redis主从复制中的哨兵机制
1.上述配置存在的问题
如果master宕机则不能及时处理,影响整体的“可用性”。
2.解决方案
1)手动解决
2)引入一个机制,这个机制至少做2件事,即自动检测障碍、自动切换slave成master。
3.哨兵机制
redis-sentinel,哨兵机制是主从复制架构的容错机制。
1)如何配置哨兵
# cp /usr/local/redis-3.2.11/sentinel.conf /etc/redis/sentinel26379.conf
# cp /usr/local/redis-3.2.11/sentinel.conf /etc/redis/sentinel26380.conf
# vi sentinel26379.conf
port 26379
sentinel monitor mymaster 127.0.0.1 6380 2
sentinel auth-pass mymaster myredis1611
备注:
第一,哨兵只检测master;
第二,后面的2代表如果至少有2个哨兵同时发现master宕机才执行切换恢复(failover)策略
第三,myredis1611为master密码
第四,mymaster是自己给主机取的名字,可以包含字母数字等
2)如何启动哨兵
[root@sdfsdf~]#redis-sentinel /usr/local/bin/sentinel26379.conf &
[root@sdfsdf~]#redis-sentinel /usr/local/bin/sentinel26380.conf &
备注:&保证了服务能在后台运行,关闭xshell不会退出程序。
4.验证哨兵的有效性
1)首先配置6380为master,配置6381/6382为slave.
2)使用info replication记录下主从关系
3)然后kill掉6380
4)再次使用info replication记录下主从关系
5)再次恢复之前的master
6)再次使用info replication记录下主从关系
7)发现之前的master成为了slave.
备注:在整个过程中,sentinel修改了6380.conf, 6381.conf,6382.conf,sentinel26379.conf,sentilnel26380.conf
5.如何从众多的slave选择一个slave?
见配置文件redis.conf中的slave-priority 100配置项
1)如果值设置为0则永远不会被选择
2)值小的优先被选择