摘要:哨兵机制的原理及实现是一个分布式架构,其中包含若干个节点和数据节点,每个节点会对数据节点和其余节点进行监控,当它发现节点不可达时,会对节点做下线标识。故障转移后整个的结构重新选举了新的主节点。技巧节点不应该部署在一台物理机器上。
概述
上篇文章主要说了Redis 复制的内容,但 Redis 复制有一个缺点,当主机 Master 宕机以后,我们需要人工解决切换,比如使用slaveof no one 。实际上主从复制并没有实现,高可用, 高可用侧重备份机器, 利用集群中系统的冗余,当系统中某台机器发生损坏的时候,其他后备的机器可以迅速的接替它来启动服务。
主从复制的问题一旦主节点宕机,写服务无法使用,就需要手动去切换,重新选取主节点,手动设置主从关系。
那么如何解决呢?如果我们有一个监控程序能够监控各个机器的状态及时作出调整,将手动的操作变成自动的。Sentinel的出现就是为了解决这个问题。
哨兵机制的原理及实现 Redis SentinelRedis Sentinel 是一个分布式架构,其中包含若干个 Sentinel 节点和 Redis 数据节点,每个 Sentinel 节点会对数据节点和其余 Sentinel 节点进行监控,当它发现节点不可达时,会对节点做下线标识。如果被标识的是主节点,它还会和其他 Sentinel 节点进行“协商”,当大多数 Sentinel 节点都认为主节点不可达时,它们会选举出一个 Sentinel 节点来完成自动故障转移的工作,同时会将这个变化实时通知给 Redis 应用方。整个过程完全是自动的,不需要人工来介入,所以这套方案很有效地解决了 Redis 的高可用问题。
如图所示:
1)主节点出现故障,此时两个从节点与主节点失去连接,主从复制失败。
2)每个 Sentinel 节点通过定期监控发现主节点出现了故障
3)多个 Sentinel 节点对主节点的故障达成一致会选举出其中一个节点作为领导者负责故障转移。
4)Sentinel 领导者节点执行了故障转移,整个过程基本是跟我们手动调整一致的,只不过是自动化完成的。
5)故障转移后整个 Redis Sentinel 的结构,重新选举了新的主节点。
实例使用docker创建如下redis容器,这里可以参考[进阶篇]docker编排PHP开发坏境、Linux docker-compose 实战学习下容器技术
redis-sentinel1 172.10.0.9 22530 -> 22530 sentinel redis-sentinel2 172.10.0.10 22531 -> 6379 sentinel redis-sentinel3 172.10.0.11 22532 -> 6379 sentinel redis-master2 172.10.0.5 6383 -> 6379 Master redis-slave2 172.10.0.6 6384 -> 6379 Slave redis-slave3 172.10.0.7 6385 -> 6379 Slave配置
Sentinel 的核心配置
sentinel monitor mymaster 127.0.0.1 7000 2
监控的主节点的名字、IP 和端口,最后一个2的意思是有几台 Sentinel 发现有问题,就会发生故障转移,例如 配置为2,代表至少有2个 Sentinel 节点认为主节点不可达,那么这个不可达的判定才是客观的。对于设置的越小,那么达到下线的条件越宽松,反之越严格。一般建议将其设置为 Sentinel 节点的一半加1。
sentinel down-after-millseconds mymaster 30000
这个是超时的时间(单位为毫秒)。打个比方,当你去 ping 一个机器的时候,多长时间后仍 ping 不通,那么就认为它是有问题。
sentinel parallel-syncs mymaster 1
当 Sentinel 节点集合对主节点故障判定达成一致时,Sentinel 领导者节点会做故障转移操作,选出新的主节点,原来的从节点会向新的主节点发起复制操作,parallel-syncs 就是用来限制在一次故障转移之后,每次向新的主节点发起复制操作的从节点个数,指出 Sentinel 属于并发还是串行。1代表每次只能复制一个,可以减轻 Master 的压力。
sentinel auth-pass
如果 Sentinel 监控的主节点配置了密码,sentinel auth-pass 配置通过添加主节点的密码,防止 Sentinel 节点对主节点无法监控。
sentinel failover-timeout mymaster 180000
表示故障转移的时间。
技巧1)Sentinel 节点不应该部署在一台物理“机器”上。
这里特意强调物理机是因为一台物理机做成了若干虚拟机或者现今比较流行的容器,它们虽然有不同的 IP 地址,但实际上它们都是同一台物理机,同一台物理机意味着如果这台机器有什么硬件故障,所有的虚拟机都会受到影响,为了实现 Sentinel 节点集合真正的高可用,请勿将 Sentinel 节点部署在同一台物理机器上。
2)部署至少三个且奇数个的 Sentinel 节点。
3个以上是通过增加 Sentinel 节点的个数提高对于故障判定的准确性,因为领导者选举需要至少一半加1个节点,奇数个节点可以在满足该条件的基础上节省一个节点。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/30181.html
摘要:面试官要不你来讲讲你最近在看的点呗可以拉出来一起讨论下今天我也不知道要问什么候选者最近在看相关的内容面试官嗯,我记得已经问过的基础和持久化了面试官要不你来讲讲你公司的是什么架构的咯候选者我前公司的架构是分片集群,使用的是层来对进行分流到不同面试官:要不你来讲讲你最近在看的点呗?可以拉出来一起讨论下(今天我也不知道要问什么)候选者:最近在看「Redis」相关的内容面试官:嗯,我记得已经问过Re...
摘要:哨兵监控也是有集群的,会有多个哨兵进行监控,当判断发生故障的哨兵达到一定数量的时候才进行修复。一个健壮的部署至少需要三个哨兵实例。若重新向的命令返回有效回复,的主观下线状态就会被移除。 哨兵监控也是有集群的,会有多个哨兵进行监控,当判断发生故障的哨兵达到一定数量的时候才进行修复。一个健壮的部署至少需要三个哨兵实例。 1.每个Sentinel以每秒钟一次的频率向它所知的Master,Sl...
摘要:可以通过以下两个配置尽量减少数据丢失的可能从零单排学铂金三,敬请期待参考资料设计与实现实战如果你觉得我写得还不错,了解一下坚持原创的技术公众号。 前言 只有光头才能变强 好的,今天我们要上【铂金二】了,如果还没有上铂金的,赶紧先去蹭蹭经验再回来(不然不带你上分了): 从零单排学Redis【青铜】 从零单排学Redis【白银】 从零单排学Redis【黄金】 从零单排学Redis【铂金一...
阅读 3169·2021-11-23 09:51
阅读 680·2021-10-14 09:43
阅读 3204·2021-09-06 15:00
阅读 2406·2019-08-30 15:54
阅读 2560·2019-08-30 13:58
阅读 1841·2019-08-29 13:18
阅读 1374·2019-08-27 10:58
阅读 506·2019-08-27 10:53