Redis哨兵的搭建及工作原理讲解

作用

Redis的哨兵(sentinel) 系统用于管理多个 Redis 服务器,该系统执行以下三个任务:

  • 监控(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。
  • 提醒(Notification):当被监控的某个 Redis出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。
  • 自动故障迁移(Automatic failover):当一个Master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移操作,它会将失效Master的其中一个Slave升级为新的Master, 并让失效Master的其他Slave改为复制新的Master;

架构

哨兵架构图
哨兵架构图

它由两部分组成,哨兵节点和数据节点:

  • 哨兵节点:哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的redis节点,不存储数据。
  • 数据节点:主节点和从节点都是数据节点。

部署

部署从节点

#redis-6379.conf
port 6379
daemonize yes
logfile "6379.log"
dbfilename "dump-6379.rdb"
 
#redis-6380.conf
port 6380
daemonize yes
logfile "6380.log"
dbfilename "dump-6380.rdb"
slaveof 192.168.92.128 6379
 
#redis-6381.conf
port 6381
daemonize yes
logfile "6381.log"
dbfilename "dump-6381.rdb"
slaveof 192.168.92.128 6379

配置完成后,依次启动主节点和从节点:

redis-server redis-6379.conf
redis-server redis-6380.conf
redis-server redis-6381.conf

部署哨兵节点

哨兵节点本质上是特殊的Redis节点。
3个哨兵节点的配置几乎是完全一样的,主要区别在于端口号的不同(26379/26380/26381)。

port 26379
daemonize yes
logfile "redis-26379.log"
dir data
#mymaster 是自己起的名字,127.0.0.1 6379 当前master的地址和端口,2表示如果有2个及以上的哨兵认为此master挂了,那就判定此master挂了。
sentinel monitor mymaster 127.0.0.1 6379 2
#哨兵连接主机30000毫秒没响应就认为master挂了
sentinel down-after-milliseconds mymaster 30000
#新上任的master开始数据同步的个数,越小压力就越小,速度也越慢
sentinel parallel-syncs mymaster 1
#在数据同步的时候超过180000毫秒算超时
sentinel failover-timeout mymaster 180000

哨兵节点的启动有两种方式,二者作用是完全相同的:
启动顺序:master -> slave -> sentinel

redis-sentinel sentinel-26379.conf
redis-server sentinel-26379.conf --sentinel

哨兵的工作流程

哨兵做的主要的一件事就是主从切换,再进行主从切换的过程中经历三个阶段
监控:不断的检查master和slave是否正常运行
通知:当被监控的服务器出现问题的视乎,向其他(哨兵间,客户端)发送通知
自动故障转移:断开master和slave链接,选取一个slave作为master,将其他slave连接到新的master并告知客户端新的服务器地址

监控阶段

同步各个节点的状态信息,哨兵模式启动之后
会先使用ping指令获取各个sentinel的状态获取是否在线,接着会使用info指令获取master的状态、属性,然后根据master中的slave信息,使用info获取所有slave的信息
sentinel会向master要状态,会向slave要状态,会向其他sentinel要状态,sentinel之间会组件一个对应的频道大家在里面发信息、订阅信息、收信息、同步信息

Image text
Image text

通知阶段

通知阶段可以说是一个信息长期维护阶段,比如sentinel1通过命令获取了master和slave的信息了,然后sentinel1会把信息在哨兵组成的网络中发布,其他哨兵会收到这个信息,就像哨兵之间组成了一个朋友圈一样

Image text
Image text

故障转移阶段

如果有哨兵发现master挂了,会把master状态标记为S_DOWN主观下线,发现的哨兵会去通知其他哨兵说这个master挂了,其他哨兵纷纷去拜访master,当有半数以上的哨兵发现master确实挂了,那么这个master就被认为真的挂了,状态标记为O_DOWN(客观下线)
Sentinel会进行竞选,从哨兵中选出一个哨兵来进行选取一个slave作为新的master,首先剔除不在线的,然后把响应慢的pass掉,与原master断开久的pass掉,这样选取出来的slave再根据优先原则选出唯一的一个来作为master。
优先原则:优先级、offset、runid

添加新评论

评论列表