Redis 主从复制机制(集群)与 哨兵机制
1,什么是redis 主从复制
支持多个数据库之间的数据同步。只能一个主数据库(master),可以一个或者多个从数据库(slave)
主数据库,可以读写
从数据库,只可以读
当主数据库,做写的操作的时候,写完,redis会从给数据库发送信号,并将数据信息发送给从数据库,从数据库备份。
过程:
1:当一个从数据库启动时,会向主数据库发送sync命令,
2:主数据库接收到sync命令后会开始在后台保存快照(执行rdb操作),并将保存期间接收到的命令缓存起来
3:当快照完成后,redis会将快照文件和所有缓存的命令发送给从数据库。
4:从数据库收到后,会载入快照文件并执行收到的缓存的命令。
2,当主数据据宕机了,怎么办?
主数据库,宕机之后,会在从数据库中从数据库(slave)中推举一个数据库,作为master 数据库
3,如何知道主数据库宕机?
哨兵机制:
Redis的哨兵(sentinel) 系统用于管理多个 Redis 服务器,该系统执行以下三个任务:
· 监控(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。
· 提醒(Notification):当被监控的某个 Redis出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。
· 自动故障迁移(Automatic failover):当一个Master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移操作,它会将失效Master的其中一个Slave升级为新的Master, 并让失效Master的其他Slave改为复制新的Master; 当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用Master代替失效Master。
哨兵(sentinel) 是一个分布式系统,你可以在一个架构中运行多个哨兵(sentinel) 进程,这些进程使用流言协议(gossipprotocols)来接收关于Master是否下线的信息,并使用投票协议(agreement protocols)来决定是否执行自动故障迁移,以及选择哪个Slave作为新的Master.
每个哨兵(sentinel) 会向其它哨兵(sentinel)、master、slave定时发送消息,以确认对方是否”活”着,如果发现对方在指定时间(可配置)内未回应,则暂时认为对方已挂(所谓的”主观认为宕机” Subjective Down,简称sdown).
若“哨兵群”中的多数sentinel,都报告某一master没响应,系统才认为该master"彻底死亡"(即:客观上的真正down机,Objective Down,简称odown),通过一定的vote算法,从剩下的slave节点中,选一台提升为master,然后自动修改相关配置.
虽然哨兵(sentinel) 释出为一个单独的可执行文件 redis-sentinel ,但实际上它只是一个运行在特殊模式下的 Redis 服务器,你可以在启动一个普通 Redis 服务器时通过给定 --sentinel 选项来启动哨兵(sentinel).
哨兵(sentinel) 的一些设计思路和zookeeper非常类似
4,单个哨兵和主从复制的架构图

5,配置主从复制
192.168.178.110 (master)
192.168.178.112(slave)
192.168.178.115 (slave)
三台电脑正常安装配置redis 之后,slave 需要如下配置 vi /usr/local/redis/etc/redis.conf slaveof 192.168.178.110 6379 masterauth 123456--- 主redis服务器配置了密码,则需要配置
两台都是这样配置
配置完成之后,主redis
set name 'chris'
两台从redis get name 可以获得值,且没有写入的权力
6,配置哨兵
192.168.178.110 (master)
192.168.178.112(slave)
192.168.178.115 (slave)
192.168.178.115 (sentinel) 哨兵
在哨兵的redis 服务器配置如下:
1.拷贝到etc目录
cp sentinel.conf /usr/local/redis/etc
2.修改sentinel.conf配置文件
sentinel monitor mymast 192.168.110.133 6379 1 #主节点 名称 IP 端口号 选举次数
sentinel auth-pass mymaster 123456
3. 修改心跳检测 30毫秒
sentinel down-after-milliseconds mymaster 30
4.sentinel parallel-syncs mymaster 2 --- 做多多少合格节点
5. 启动哨兵模式
./redis-server /usr/local/redis/etc/sentinel.conf --sentinel &
启动哨兵之前,先将主redis,从redis 依次启动;
哨兵的日志如下:可以看出主从关系
10687:X 02 Aug 22:51:03.405 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
10687:X 02 Aug 22:51:03.407 # Sentinel ID is 37ac433a3cdc235ae1326987feb3f13909612f84
10687:X 02 Aug 22:51:03.407 # +monitor master mymaster 192.168.178.110 6379 quorum 1
10687:X 02 Aug 22:51:03.409 * +slave slave 192.168.178.112:6379 192.168.178.112 6379 @ mymaster 192.168.178.110 6379
10687:X 02 Aug 22:51:03.413 * +slave slave 192.168.178.115:6379 192.168.178.115 6379 @ mymaster 192.168.178.110 6379
10687:X 02 Aug 22:51:03.463 # +sdown slave 192.168.178.115:6379 192.168.178.115 6379 @ mymaster 192.168.178.110 6379
10687:X 02 Aug 22:51:03.463 # +sdown slave 192.168.178.112:6379 192.168.178.112 6379 @ mymaster 192.168.178.110 6379
10687:X 02 Aug 22:51:03.521 # -sdown slave 192.168.178.112:6379 192.168.178.112 6379 @ mymaster 192.168.178.110 6379
在master 或者 slave 的服务器上打印info 也可以看出主从关系
7 测试
将192.168.178.110 shutdown
# Keyspace
127.0.0.1:6379> SHUTDOWN
not connected>
哨兵已经选出新的master redis
10687:X 02 Aug 22:54:36.822 # +sdown master mymaster 192.168.178.110 6379
10687:X 02 Aug 22:54:36.822 # +odown master mymaster 192.168.178.110 6379 #quorum 1/1
10687:X 02 Aug 22:54:36.822 # +new-epoch 1
10687:X 02 Aug 22:54:36.822 # +try-failover master mymaster 192.168.178.110 6379
10687:X 02 Aug 22:54:36.825 # +vote-for-leader 37ac433a3cdc235ae1326987feb3f13909612f84 1
10687:X 02 Aug 22:54:36.825 # +elected-leader master mymaster 192.168.178.110 6379
10687:X 02 Aug 22:54:36.825 # +failover-state-select-slave master mymaster 192.168.178.110 6379
10687:X 02 Aug 22:54:36.926 # +selected-slave slave 192.168.178.112:6379 192.168.178.112 6379 @ mymaster 192.168.178.110 6379
10687:X 02 Aug 22:54:36.926 * +failover-state-send-slaveof-noone slave 192.168.178.112:6379 192.168.178.112 6379 @ mymaster 192.168.178.110 6379
10687:X 02 Aug 22:54:36.985 * +failover-state-wait-promotion slave 192.168.178.112:6379 192.168.178.112 6379 @ mymaster 192.168.178.110 6379
10687:X 02 Aug 22:54:37.879 # +promoted-slave slave 192.168.178.112:6379 192.168.178.112 6379 @ mymaster 192.168.178.110 6379
10687:X 02 Aug 22:54:37.879 # +failover-state-reconf-slaves master mymaster 192.168.178.110 6379
10687:X 02 Aug 22:54:37.932 # +failover-end master mymaster 192.168.178.110 6379
10687:X 02 Aug 22:54:37.932 # +switch-master mymaster 192.168.178.110 6379 192.168.178.112 6379
10687:X 02 Aug 22:54:37.932 * +slave slave 192.168.178.115:6379 192.168.178.115 6379 @ mymaster 192.168.178.112 6379
10687:X 02 Aug 22:54:37.932 * +slave slave 192.168.178.110:6379 192.168.178.110 6379 @ mymaster 192.168.178.112 6379
10687:X 02 Aug 22:54:37.990 # +sdown master mymaster 192.168.178.112 6379
10687:X 02 Aug 22:54:37.990 # +odown master mymaster 192.168.178.112 6379 #quorum 1/1
10687:X 02 Aug 22:54:37.990 # +new-epoch 2
10687:X 02 Aug 22:54:37.990 # +try-failover master mymaster 192.168.178.112 6379
10687:X 02 Aug 22:54:37.993 # +vote-for-leader 37ac433a3cdc235ae1326987feb3f13909612f84 2
10687:X 02 Aug 22:54:37.993 # +elected-leader master mymaster 192.168.178.112 6379
10687:X 02 Aug 22:54:37.993 # +failover-state-select-slave master mymaster 192.168.178.112 6379
10687:X 02 Aug 22:54:37.993 # +sdown slave 192.168.178.110:6379 192.168.178.110 6379 @ mymaster 192.168.178.112 6379
10687:X 02 Aug 22:54:37.994 # +sdown slave 192.168.178.115:6379 192.168.178.115 6379 @ mymaster 192.168.178.112 6379
10687:X 02 Aug 22:54:38.095 # -failover-abort-no-good-slave master mymaster 192.168.178.112 6379
10687:X 02 Aug 22:54:38.172 # Next failover delay: I will not start a failover before Fri Aug 2 23:00:38 2019
10687:X 02 Aug 22:54:38.900 # -sdown master mymaster 192.168.178.112 6379
10687:X 02 Aug 22:54:38.900 # -odown master mymaster 192.168.178.112 6379
两次推选,192.168.178.112 被选为master
再次看192,168.178.112 的info 为master
Redis 主从复制机制(集群)与 哨兵机制的更多相关文章
- redis主从、集群、哨兵
redis的主从.集群.哨兵 参考: https://blog.csdn.net/robertohuang/article/details/70741575 https://blog.csdn.net ...
- (六) Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)
参考并感谢 官方文档 https://hub.docker.com/_/redis GitHub https://github.com/antirez/redis happyJared https:/ ...
- redis(5)--redis集群之哨兵机制
哨兵机制 在前面讲的master/slave模式,在一个典型的一主多从的系统中,slave在整个体系中起到了数据冗余备份和读写分离的作用.当master遇到异常终端后,需要从slave中选举一个新的m ...
- Redis进阶实践之十 Redis主从复制的集群模式
一.引言 Redis的基本数据类型,高级特性,与Lua脚本的整合等相关知识点都学完了,说是学完了,只是完成了当前的学习计划,在以后的时间还需继续深入研究和学习.从今天开始来讲一下有关Re ...
- Redis实战——redis主从复制和集群实现原理
出自:https://blog.csdn.net/nuli888/article/details/52136822 redis主从复制redis主从配置比较简单,基本就是在从节点配置文件加上:slav ...
- 5-11 Redis缓存 | 持久化 | 集群_哨兵_主从复制_读写分离
Redis 强化 缓存淘汰策略 Redis服务器繁忙时,有大量信息要保存 如果Redis服务器内存全满,再要往Redis中保存新的数据,就需要淘汰老数据,才能保存新数据 noeviction:返回错误 ...
- 搭建Redis主从复制的集群
在主从复制模式的集群里,主节点一般是一个,从节点一般是两个或多个,写入主节点的数据会被复制到从节点上,这样一旦主节点出现故障,应用系统能切换到从节点去读写数据,这样能提升系统的可用性.而且如果再采用主 ...
- redis 主从复制 和集群
redis集群最少三个节点 之间相互通信ping-pong 投票选举机制 主从复制 的话 最少六个节点 ,主三从三
- Redis高可用集群方案——哨兵
本篇文章版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文系列地址http://www.cnblogs.com/tdws/tag/NoSql/ 本人之前有篇文章,讲到了redis主从复制,读写分 ...
- redis集群之哨兵模式【原】
redis集群之哨兵(sentinel)模式 哨兵模式理想状态 需要>=3个redis服务,>=3个redis哨兵,每个redis服务搭配一个哨兵. 本例以3个redis服务为例: 一开始 ...
随机推荐
- 【读书笔记】https://source.android.google.cn/compatibility/tests?hl=en
AuthorBlog:秋城https://www.cnblogs.com/houser0323/ Android Platform Testing This content is geared tow ...
- Dart的JIT 与 AOT
JIT:Just In Time AOT:Ahead of Time 含义: 目前,程序主要有两种运行方式:静态编译与动态解释. 静态编译的程序在执行前全部被翻译为机器码,通常将这种类型称为AOT ( ...
- Java 在PDF中添加表格
本文将介绍通过Java编程在PDF文档中添加表格的方法.添加表格时,可设置表格边框.单元格对齐方式.单元格背景色.单元格合并.插入图片.设置行高.列宽.字体.字号等. 使用工具:Free Spire. ...
- python数据转换
主要内容 1:数字类型:算术运算 bool:判断真假,运用场景在逻辑运算里较多,比如while循环了. 字符串:可以索引取值,可以嵌套 列表:存放任意数据类型,因为是按序存放的,故可以索引取值, 字典 ...
- SpringBoot图文教程14—SpringBoot集成EasyExcel「上」
有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+ ...
- 2020 新个税算的头疼?会 python,这都不是事儿...
背景 今年疫情复工后,财务小姐姐给我们普及了2020年新个税的算法.. 听完之后的感觉就是:恩,原来是这么回事! 虽然是个小工薪阶级,但是对于扣多少税还是很关心的.于是拿起笔算了算2月份的个税,产生了 ...
- 一起了解 .Net Foundation 项目 No.18
.Net 基金会中包含有很多优秀的项目,今天就和笔者一起了解一下其中的一些优秀作品吧. 中文介绍 中文介绍内容翻译自英文介绍,主要采用意译.如与原文存在出入,请以原文为准. Protobuild Pr ...
- django学习笔记 多文件上传
习惯了flask 再用django 还是不太习惯 好麻烦 配置文件也忒多了 不过还是要学的 之前只能一个一个文件长传,这次试试多个文件 不适用django的forms创建表单 直接在html中使用 ...
- MySQL5.7 数据库的my.cnf配置
[client] port socket=/tmp/mysql.sock default-character-set=utf8 [mysql] no-auto-rehash default-chara ...
- 免费获取 Jetbrain 全家桶使用兑换码的正确姿势!
自今年1月份以Jetbrain公司严厉打击旗下开发工具产品(如:IntelliJ IDEA.WebStorm.PyCharm等)的盗版破解以来.求新破解方式.分享新破解方法的帖子或信息经常可以在各技术 ...