带你认识什么是redis主从复制集群的原理和部署

Redis集群部署模式详解:从原理到实战的全方位指南 Redis集群部署模式解析与实践 本文系统介绍了Redis四种集群部署模式的核心特点与实现方法。主从复制模式通过读写分离提升性能;Sentinel模式实现自动故障转移;Redis Cluster支持数据分片与自动扩缩容;代理集群适合遗留系统改造。文章详细展示了各模式的配置步骤,包括主从节点设置、Sentinel集群部署、Redis Cluster创建等核心流程,并提供了Java客户端连接代码示例。对比表格清晰呈现了不同模式在节点关系、分片方式、高可用实现等方面的差异,以及性能、扩展性等关键指标,为开发者构建 阅读详情

前言

最近在复盘redis的知识,所以本文开始希望介绍下redis的集群架构、原理以及部署;本文主要介绍redis的主从复制集群,包括其架构模型,原理,高可用等;

一、主从集群的介绍

  redis的主从复制集群为了提高效率降低客户端等待时长,主从间的数据同步采用的是弱一致性的策略,即客户端请求发到主机后,不论是否同步到备机,都认为此次请求是成功的,这样虽然效率上提高了,但是数据一致性却得不到保障;所以redis提供了一个min-replicas-to-write参数用来配置,至少有几台从机与主机保持连接时主机才能执行写入操作,一定程度上维护了数据的一致性;   其次,使用redis主从复制集群主要是为了解决单点故障问题,从机相当于主机的备份,且只提供读不提供写入功能,为的是在主机故障导致不能对外提供服务时从机能快速接替从而实现集群的高可用;而集群间主从的切换显然不能通过人工来完成,所以redis提供了一个哨兵的概念,顾名思义,哨兵即负责监控放哨,当主机不可用时迅速从从机中选出一个主机来,而这又涉及到以下两个方面;

  • 1、如何判断redis集群的master不可用 判断master不可用使用的是过半机制,即当哨兵集群中某一个哨兵发现master不可用时,会向集群其他哨兵发送is-master-down-by-addr指令询问master是否真的挂了,集群其他哨兵收到指令后会根据自身与master的连接情况判断是否真的挂了,然后给第一个哨兵作出响应,是否赞成master挂了;当超过集群数量一半加1的机器认为master挂了那么就投票通过,即认为redis集群的master真的挂了,需要进行选主操作;所以哨兵也应该是集群部署的,单个部署的话与主机是一对一的关系,不稳定性太大容易造成误判

  • 2、哨兵发现master挂了过后又是如何给redis集群做主从个切换的呢(哨兵的选主) 当第一个发现master挂了的哨兵收到其他哨兵的响应确认master挂了后,会继续发送一个请求,希望自己成为哨兵的leader来进行redis集群的主从切换操作,此时该哨兵被称为候选者;集群中的所有哨兵都只有一次投票机会,投给自己或者别人,需要注意的是只有候选者才能将票投给自己;哨兵之间的选主使用的是Raft算法

注意: 1、一般最先发现master挂了的哨兵会作为哨兵集群选主的候选者,会自动投给自己一票 2、如果同一时点有两个哨兵同时发现master挂了,那么就会有两个候选者,他们都投给自己一票,需要注意的是集群中的每个哨兵只有一次投票机会,所以两个候选者之外的哨兵肯定只会给两个候选者中的一个投票

二、主从集群的安装部署

我在安装步骤里做了一些笔记,大概也囊括了主从复制的大部分特性,并且也贴上了关键命令执行的图片,所以我就不拎出来单独介绍了

1、环境准备

  • 1、先在linux下安装redis,这里我就不贴教程了,我安装的是redis-5.0.5版本

  • 2、进入redis安装目录下的utils文件夹,执行 ./install_server.sh命令然后无脑回车,自动安装redis服务,做集群的话则第一遍默认执行6379,第二遍第三遍可以把端口号换成6380和81,这样我们主机里就有三个redis服务了

  • 3、安装完后执行service redis_6379 stop、service redis_6380 stop和service redis_6381 stop分别停掉这三台主机,因为后续演示我们需要前台阻塞运行查看日志

  • 4、在任意目录下创建一个文件夹testRedis,然后把/etc下的redis的配置文件复制过来,因为我们集群测试会给一堆配置,所以另外复制一份,不动系统本身的配置,命令如下mkdir testRediscd testRediscp /etc/redis/* ./

  • 5、编辑/testRedis下的三个配置文件,将

  • daemonize置为no,使redis服务前台运行,方便观察日志;

  • 注释掉 logfile /var/log/redis_6379.log使其前台打印

  • appendonly置为no,关闭aof使其只使用rdb,具体原因后面会分析

  • 上面的配置完成后,表示接下来启动的redis实例是会前台阻塞运行且不使用aof的持久化方式

  • 6、启动三个redis实例redis-server ~/testRedis/6379.confredis-server ~/testRedis/6380.confredis-server ~/testRedis/6381.conf

  • 7、启动三个reids-cli连接三个实例redis-cli -p 6379redis-cli -p 6380redis-cli -p 6381

  • 8、通过命令的方式使6380和6381作为slave追随6379

  • 老版本命令 slaveof 127.0.0.1 6379

  • 新版本(5.0)命令 replicaof 127.0.0.1 6379

  • 注意: 1、主从集群搭建完毕后,在6379set数据后80和81就能同步过去了,但是默认情况下80、81是不能写入的,会报 READONLY You can't write against a read only slave的错误;并且从机第一次追随主机时是会flush掉本身所有数据的,会全量同步主机的数据过来;

  • 9、模拟从机下线6381下线重启仍追随6379,不开启aof,命令如下: redis-server ~/testRedis/6381.conf --replicaof 127.0.0.1 6379 6381下线重启仍追随6379,同时开启aof,命令如下: redis-server ~/testRedis/6381.conf --replicaof 127.0.0.1 6379 --appendonly yes

1、由上面两个图可以看到,开启aof时从机(6381)是会先flush掉自身数据重新从master(6379)身上全量同步数据的,所以从效率上来说增量同步肯定优于全量同步的 2、从机下线重启后仍然追随原主机(即下线前做过主从同步)的话,如果从机重启时未开启aof,那么会做增量同步,否则则会进行全量同步;因为rdb中会记录原主机信息而aof不会;

  • 10、模拟主机下线 直接终止6379的进程,那么此时6380和81会报Error condition on socket for SYNC: Connection refused错误,并且均只能提供读服务不能提供写入能力,所以此时可以人为的让6380或6381使自己作为master,命令如下replicaof no one 然后再使另一个实例追随新的matster,这样redis集群又可以对外提供服务了,但是这种靠人为选主并切换终究不靠谱,所以就要用到哨兵模式,用来监控,当master挂了的时候能快速的响应,重新选主,使集群快速可用

  • 11、集群相关的配置replica-serve-stale-data yes 从机同步主机数据期间是否将自己原本的旧数据对外暴露,默认对外暴露replica-read-only yes 从机是否开启只读模式,默认从机只读repl-diskless-sync no 主机以何种方式将rdb文件同步给备机,yes表示主机生成rdb后直接通过网络IO将数据发给备机;no的话表示主机先将rdb通过磁盘IO落本机磁盘再通过网络传送给备机;默认为先落磁盘再发送给从机repl-backlog-size 1mb 增量复制的大小;即当从机同步完后主机会维护一个增量数据的队列,从机下次备份时可以拿着offset从队列里直接取增量数据;默认是1m,但是需要根据业务的写入量来确定该值大小;因为如果业务写入过多,从机下线恢复这段时间写入超过默认的1m的话,那么只使用增量同步的话就会丢失数据了min-replicas-to-write 3 可以理解成master能否执行写入操作的一个限制条件;当有指定个数的从机与主机保持连接时master才能执行写操作;默认为当有3个从机与master保持连接master才能执行写入操作,否则master不对外提供写入能力;这样虽然不能保证所有的从机都能同步到master的数据,但是可以保证至少有几个从机存活master才能执行写入操作,避免丢失过多数据;值为0表示关闭该限制min-replicas-max-lag 10 从机是否与主机保持连接的标准;默认为延迟小于10s的从机才被认为是健康的,是与主机保持连接的

三、哨兵集群搭建

  • 1、由于哨兵我们也搭建一个集群,所以创建三个哨兵的配置文件,在testRedis下执行以下命令

  • vi 26379.conf,按i输入:

  • port 26379

  • sentinel monitor mymaster 127.0.0.1 6379 2

  • 一个redis哨兵集群可以监控多个redis集群,所以mymaster表示redis集群的名称,后面跟redis集群master的ip和端口;最后一个数字2表示redis集群中几个实例通过后投票有效,即我们常说的过半加1后的那个值,因为我的redis集群只有三台机器,所以这个值为3/2+1=2

  • cp 26379.conf 26380.conf 复制26379的配置,修改26380.conf里的port为26380

  • cp 26379.conf 26381.conf 复制26379的配置,修改26381.conf里的port为26381

  • 2、启动redis集群中的各个实例,以6379为主6380和6381为slave追随6379

  • 3、启动哨兵集群

  • redis-server ./26379.conf --sentinel

  • redis-server ./26380.conf --sentinel

  • redis-server ./26381.conf --sentinel

  • 上图,哨兵配置文件只配置了redis集群的主机ip和端口,但是哨兵启动后却获取了整个redis集群所有实例的信息,是因为redis集群中从机追随主机时主机已经知道从机的信息了,所以哨兵通过获取主机信息既能获取从机的信息 另外,哨兵又是如何获取其他哨兵的信息的呢?这是因为其使用了redis本身的发布订阅功能;即在redis集群的master上发布各哨兵信息,哨兵们自行订阅,可以通过在redis任意实例上执行PSUBSCRIBE * 来观察哨兵之间的交互信息,如图:

  • 4、当redis集群的master下线后哨兵集群是会自动修改自身的配置文件,将sentinel monitor mymaster后面换成最新的master的ip加端口,并且还会在配置文件后追加识别到的redis的其他从机和其他哨兵信息,如图 至此,redis的主从复制集群介绍完毕,如有纰漏还望指正!

Redis 主从复制+哨兵模式+集群部署(含节点扩容) 是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。主从复制是高可用Redis的基础哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。故障恢复无法自动化;写操作无法负载均衡;存储能力受到单机的限制。默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。当。 阅读详情

相关推荐

Masta调用Geometry Modeller(Space Claim)进行根据三维模型快速建模设置方法

masta中调用ANSYS的space claim的设置方法

xifegnlie的博客 247

MySQL主从集群原理+实战

目录如下 MySQL主从集群原理+实战 背景 随着公司业务的发展,对数据库的要求越来越高,以前的单机MySQL肯定是玩不转了,亟需升级成MySQL集群,这是一个公司在业务发展时不得不面临的问题 就单机MySQL而言,自己玩玩可以,运用到实际项目中,那肯定要挨批的。一方面数据不安全,万一数据库的电脑磁盘坏了,就坑了。另一方面数据库的并发能力是有限的,一般并发数200~500就差不多了,当然你要继续往上增,也是可以的,那就影响整体Mysql的响应时间。 那么有哪些集群方案呢? 集群方案 在初期,由于MyS

xvktdmjg的博客 1261

Kubernetes CRD 系列(一):CRD 介绍

CR(Custom Resource)其实就是在 Kubernetes 中定义一个自己的资源类型,是一个具体的 “自定义 API 资源” 实例,为了能够让 Kubernetes 认识这个 CR,就需要让 Kubernetes 明白这个 CR 的宏观定义是什么,也就是需要创建所谓的 CRD(Custom Resource Definition)来表述。 可能这么说并不是太直观,换个方式表达一下,我们想要创建一个 Pod 的时候,那么会编写一个 YAML 配置,然后前两行一般会这么写: [root@l

会哭的雨@的博客 7922

redis的集群原理:主从复制

redis:主从复制

lcarus008的博客 1511

Voicebox本地部署:模型下载与离线模式实战指南

在本地语音处理场景中,模型下载失败和离线运行需求是开发者最常遇到的两大难题。理解语音工具的本地推理原理,关键在于掌握模型文件与程序逻辑的分离管理:模型独立下载,程序负责推理,输出留在本机。这种架构带来显著的技术价值——数据不出本地、不依赖公网、批量任务不中断。无论是语音识别转写、语音合成,还是集成到自动化脚本中,本地离线模式都能在隐私敏感或网络不稳定环境下稳定运行。对开发者而言,先解决模型文件的完整获取,再验证离线启动流程,就能绕过“无法下载模型”的常见坑。本文从环境准备、模型放置、服务启动到接口调用,提供

weixin_29048309的博客 312

ArcGIS实战:地形湿度指数(TWI)计算全流程解析

本文详细解析了ArcGIS中地形湿度指数(TWI)的计算全流程,从DEM数据获取、填洼处理到水流方向与汇流累积量计算,最终实现TWI的精准计算。通过实战步骤指导,帮助读者掌握水文建模和土壤湿度预测的关键技术,适用于农业规划、生态研究等领域。

weixin_29231725的博客 872

彻底明白Redis集群主从切换原理

写在前面 参考文章: https://www.cnblogs.com/dadonggg/p/8628735.html 1.Redis Cluster 为了支持高可用,Redis提供了集群部署方案,当master发生故障时,能及时进行主从切换。 客户端使用参数【-c】连接集群中任意一个节点,无论是主还是从,都没有任何区别,都能访问整个集群。这是因为Redis集群是去中心化的,每个节点都维护着集群...

一个技术菜鸟的博客 2万+

Redis—哨兵集群—主从切换

Redis Sentinel集群关于主从切换相关的基本原理

xiayping的博客 1975

【YOLO11改进 - C3k2融合】C3k2融合动态蛇形卷积(Dynamic Snake Convolution)用于管状结构分割任务

【YOLO11改进 - C3k2融合】C3k2融合动态蛇形卷积(Dynamic Snake Convolution)用于管状结构分割任务

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 519

基于STM32设计的智能防盗单车锁_349

本设计基于STM32F103RCT6单片机,研制了一种适用于户外环境的智能防盗单车锁系统。系统集成了GPS定位模块、ADXL345加速度传感器、4G通信模块(Air780E)、OLED显示屏、继电器模拟锁控模块等硬件,通过姿态感知实现车辆异常移动检测,在锁车状态下自动触发蜂鸣器报警并通过短信与APP通知用户。

868

Redis主从切换技术详解

当主节点出现故障时,从节点可以升级为新的主节点,继续提供服务,保证系统的高可用性。哨兵是Redis的一个独立进程,负责监控主节点和从节点的状态,并在主节点出现故障时自动将从节点切换为主节点。(3)执行主从切换的哨兵节点会选择一个从节点作为新的主节点,并向该从节点发送SLAVEOF NO ONE命令,使其脱离主从关系,成为新的主节点;(4)哨兵集群会更新集群的元数据,将新的主节点的地址和端口广播给集群中的所有节点;(3)修改应用程序的配置文件,将新的主节点的地址和端口替换为原来的主节点;

m0_61431263的博客 1563

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

Redis 主从复制、哨兵和集群区别

转自:http://www.kongzid.com/archives/redis1 Redis Cluster是Redis的分布式集群解决方案,在 3.0 版本正式推出。在3.0之前的集群方案主要是主从复制和哨兵机制,3种方案各有优缺点。 主从复制(Replication)主要是备份数据、读写分离、负载均衡,一个Master可以有多个Slaves服务器作为备份。

孔子说 8333

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

redis集群的三种部署方式——主从复制、哨兵机制、cluster集群

Redis是常用的非关系型数据库,具有以下特点:1.核心特点高性能:Redis基于内存操作,读写速度极快,特别适用于对性能要求高的实时应用。数据持久化:支持RDB和AOF两种持久化方式,确保即使在服务器重启后也能恢复数据。分布式特性:通过主从复制、哨兵模式或cluster集群模式,Redis可以轻松地构建高可用和可扩展的服务。丰富的数据结构:提供了多种数据结构支持,便于开发人员根据实际需求进行数据建模和处理。

2301_80440447的博客 6327

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Redis(主从复制、哨兵模式、集群)概述及部署

文章目录一、Redis主从复制1、Redis主从复制的概念2、Redis主从复制的作用3、Redis主从复制的流程4、Redis主从复制的搭建1、环境配置/安装包2、安装Redis(所有主机)3、修改Master节点Redis配置文件4、修改Slave节点Redis配置文件5、验证主从效果二、Redis 哨兵模式1、哨兵模式的原理2、哨兵模式的作用3、哨兵模式的结构4、哨兵模式的搭建1、环境配置2、修改 Redis 配置文件(所有节点操作)2、启动哨兵模式3、故障模拟4、验证结果三、Redis 群集模式1、

愿你成为自己喜欢的模样,不抱怨,不将就,有自由,有光芒! 3592

Redis三种模式——主从复制、哨兵模式、集群

主从复制,是指将一台 Redis 服务器的数据,复制到其他的 Redis 服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。默认情况下,每台 Redis 服务器都是主节点;且一个主节点可以有多个从节点 (或没有从节点),但一个从节点只能有一个主节点。

weixin_44112402的博客 4828

redis学习之集群部署

本篇文章主要针对redis的集群三种方式,1、主从模式、2、哨兵模式 3、分布式架构,同时对三种集群的原理、工作方式,以及搭建和验证进行详细说明,是一篇不错的redis集群部署学习佳作,希望读者收藏以备查阅

liushangzaibeijing的博客 4万+

Redis的三种模式——主从复制、哨兵、集群

Redis的三种模式——主从复制、哨兵、集群

qq_44363920的博客 7019

redis 三种模式(主从复制,哨兵,集群)理论图文详解和 redis 总结

redis 主从同步 哨兵 集群 优化

shenyuanhaojie的博客 5万+

Redis主从复制哨兵及集群

目录一.主从复制主从复制的工作原理如下:主从复制的作用:搭建Redis 主从复制每台服务器配置:​编辑进行编译安装:定义systemd服务管理脚本:开启服务,报错看下内容:修改 Redis 配置文件(Master节点操作):修改 Redis 配置文件(Slave节点操作):192.168.233.30(从)与192.168.233.20(从)配置一样.验证主从效果:二.Redis 哨兵模式哨兵模式的作用:哨兵结构由两部分组成:主节点的选举:哨兵模式工作过程:哨兵的启动依赖于主从模式,所以须把主从模式安装好的

2302_79748698的博客 4314

Redis集群方案——主从复制

单节点redis的并发能力是有上线的,为了提升redis高并发下的性能,我们可以搭建redis的主从复制集群,实现读写分离。最常用的主从同步集群是一主多从,主节点负责写数据,从节点只负责读数据。

m0_74808313的博客 1373

Redis主从复制、哨兵、集群原理部署介绍

Redis主从复制是保证Redis数据库高可用性和容错性的重要解决方案之一。Redis哨兵模式是保证Redis数据库高可用性和容错性的重要解决方案之一。Redis 是一款内存数据库,常用于缓存、消息队列等。随着业务的发展和数据的增长,单机 Redis 可能无法满足我们的需求,此时我们需要使用 Redis 集群模式。Redis 集群模式可以将多个 Redis 实例组成一个集群,提供更高的性能和可用性。我们将介绍 Redis 集群模式的核心原理,并通过代码实践演示如何搭建 Redis 集群。

青山师 1294

Redis (主从复制,哨兵模式,集群)概述及部署

Redis引入了哈希槽的概念。Redis集群由16384个哈希槽集群的每一个节点负责一部分哈希槽每个key通过CRC算法后对16384取余来决定放置哪个槽位。再通过这个槽位到对应的节点,然后直接跳转到这个对应的节点上进行存取操作。总的来说:就是cluster集群是分布式的,它可以将多个master当做一个整体来存放数据。并且cluster中有16384个slot(哈希槽),集群中的master来平分这些槽位。

m0_54594153的博客 1876

Redis 主从复制,哨兵模式,集群

redis群集有三种模式,主从复制,哨兵模式,集群(Cluster)

m0_66372974的博客 1289
上一篇: 从查询语句执行流程看MySQL架构
下一篇: 详解架构模式的六种事件驱动
Java_LingFeng
博客等级 码龄4年 505粉丝 259原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值