【redis教程】14、redis哨兵的构建及工作原理

哨兵(sentinel) 是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的master并将所有slave接连到新的master上。
注意:哨兵也是一台服务器,只不过不提供数据服务,通常哨兵配置数量为单数。

一、哨兵结构构建

哨兵服务器配置
sentinel monitor mymaster 127.0.0.1 6379 2
mymaster 是自己起的名字,127.0.0.1 6379当前master的地址和端口,2表示如果有2个及以上的哨兵认为此master挂了,那就判定此master挂了。

sentinel down-after-milliseconds mymaster 30000
哨兵连接主机30000毫秒没响应就认为master挂了

sentinel parallel-syncs mymaster 1
新上任的master开始数据同步的个数,越小压力就越小,速度也越慢

sentinel failover-timeout mymaster 180000
在数据同步的时候180000毫秒算超时

哨兵服务器完整的配置sentinel-26379.conf :

port 26379
daemonize yes
logfile "redis-26379.log"
dir /an-dev/redis-4.0.14/data
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000

另外两个哨兵服务器的端口设为26380和26381,里面内容logfile名字做相应修改其他地方就不用修改了。

master配置
和前几节的配置一样,这里可以把持久化的配置去掉了,我这里没有去掉,不影响实验。

port 6379
daemonize yes
logfile "redis-6379.log"
dir /an-dev/redis-4.0.14/data
dbfilename dump-6379.rdb
rdbcompression yes
rdbchecksum yes
appendonly yes
appendfsync always
appendfilename appendonly-6379.aof
auto-aof-rewrite-min-size 200b
auto-aof-rewrite-percentage 200

slave配置
这里有两台slave服务器,分别为6380和6381,这里只列出6380的配置,

port 6380
daemonize yes
logfile "redis-6380.log"
dir /an-dev/redis-4.0.14/data
slaveof 127.0.0.1 6379

启动服务器
先启动master,再启动slave,最后启动哨兵。注意启动哨兵的命令是redis-sentinel
在这里插入图片描述
现在都启动起来了,查看一下日志信息,
哨兵26379的日志信息:
可以看到1个master,2个slave,和另外两个哨兵。
在这里插入图片描述
master宕机后重新选举master
我现在杀掉master的进行代表master宕机,30秒后哨兵会重新选出一个新的master,
在这里插入图片描述
等待一会,查看哨兵26379的日志信息,可以看到选举出了新的master
在这里插入图片描述

二、哨兵的工作原理

哨兵做的主要的一件事就是主从切换,再进行主从切换的过程中经历三个阶段

  • 监控
  • 通知
  • 故障转移

监控阶段

同步各个节点的状态信息,哨兵模式启动之后,

  • 会先使用ping指令获取各个sentinel的状态(是否在线)
  • 使用info指令获取master的状态、属性
  • 根据master中slave信息,使用info获取所有slave信息
    在这里插入图片描述

通知阶段

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

故障转移阶段

  • 如果有哨兵发现master挂了,会把master状态标记为S_DOWN(主观下线),此时其他哨兵得知此时,纷纷去拜访master,当有半数以上的哨兵发现master挂了,那么这个master就被认为真的挂了,状态标记为O_DOWN(客观下线)。
  • 经过竞选,会从哨兵中选出一个来进行选取一个slave作为新的master,首先要是在线的,然后把响应慢的pass掉,与原master断开久的pass掉,这样选取出来的在根据优先原则选出唯一的一个来。
    在这里插入图片描述
发布了28 篇原创文章 · 获赞 1 · 访问量 1849

猜你喜欢

转载自blog.csdn.net/m0_46130323/article/details/104345822