Redis 哨兵机制和实现
在前面的1主2从架构中Redis 主从架构实践
CentOS 64-bit-basic 192.168.127.130 redis(主)
CentOS 64-bit 192.168.127.128 redis(从)
CentOS 64-bit_2 192.168.127.129 redis(从)
如果Redis主挂了,两个redis从不能进行写操作,将导致redis不可用。Redis从也不会自动转为Redis主。这时候哨兵机制就很好的解决了这个问题。
一、哨兵机制原理
哨兵模式(Sentinel): 哨兵会监控所有的redis主和redis从,当redis主挂了之后,会在redis从当中选择一个redis从作为redis主。新的redis主和redis从重新组成redis主从模式。
往往一个哨兵是不够的,通常是一个哨兵集群。
这样这能实现了Redis的高可用。
二、Redis哨兵机制实践
1、CentOS 64-bit-basic 192.168.127.130 redis(主) 配置sentinel.conf
cd /home/tools/redis-6.0.5
cp sentinel.conf /usr/local/redis/
cd /usr/local/redis/
vi sentinel.conf
1) protected-mode no
2) 哨兵后台运行
daemonize yes
3) 配置日志文件
logfile /usr/local/redis/sentinel/redis-sentinel.log
4)哨兵工作路径
dir /usr/local/redis/sentinel
5) 配置哨兵监控
sentinel monitor larry-master 192.168.127.130 6379 2
larry-master 是redis主的昵称
2 代表哨兵的数量
6) 配置密码
sentinel auth -pass larry-master larry123456
7) 设置判定master失效的实践
sentinel down-after-milliseconds larry-master 10000
单位毫秒,也就是如果mater失效时间超过10秒,则认为master失效了。
8)设置并行同步的数量
sentinel parallel-syncs larry-master 1
假设有5个slavel,如果master挂了,其中1个slave成功master,那么新的master要与其它4个slave进行同步,这4个slave是一个接着一个进行同步的。
如果设置为2,则是2个接着2个进行同步。
9)主备切换的超时时间设置。默认3分钟
sentinel failover-timeout larry-master 180000
master主挂了,哨兵进行故障转移。如果超过3分钟哨兵还没处理好,由于哨兵也是集群,则由其它哨兵处理。
启动哨兵
cd /home/tools/redis-6.0.5/src/
cp redis-sentinel /usr/local/bin/
cd /usr/local/redis/
redis-sentinel sentinel.conf
查看是否启动
说明哨兵已经启动了
2、 同理CentOS 64-bit 192.168.127.128 redis(从) 和redis主配置一致,并启动redis-sentinel
3、 同理CentOS 64-bit_2 192.168.127.129 redis(从)和redis主配置一致,并启动redis-sentinel
4、测试哨兵模式
此时redis1主2从以及redis哨兵已经启动,现在停掉redis主
1) CentOS 64-bit-basic 192.168.127.130 redis(主)
2) CentOS 64-bit 192.168.127.128 redis(从)
3) CentOS 64-bit_2 192.168.127.129 redis(从)
4) 停止redis主
192.168.127.130(Redis主)服务器上查看日志
cd /usr/local/redis/sentinel
tail -f redis-sentinel.log
从日志里可以看出 192.168.127.130所在的redis主已经停掉了,然后vote-for-leader 进行投票选择master
130挂了之后,129被选为master,128是slave, 129和128构成redis1主1从。
在129的redis-cli查看,128是slave
在128的redis-cli查看,129是master
然后关闭129,128被选为master。 开启129和130。最后是128是master,其它是slave
此时129任然是master, 130是slave。
注意: 由于redis主从配置时,刚开始redis主为130,后来它变为slave,未设置 masterauth larry123456,将导致最后同步master数据。解决方法: 加上masterauth。