1.redis哨兵理解
定义:哨兵在后台进行监控master主机是否故障,如果故障则进行投票数据自动将slave升级为master代替为新的主库,继续对外进行服务
作用:
1. 无人值守:无需redis中mster向slave进行复制时,主机故障后会自动选取新主机
2. 消息通知:哨兵可以将故障转移的结果发送给客户端
3. 故障转移:如果master异常,会进行主从切换,选取新的slave转为master
4. 配置中心,客户端通过连接哨兵来过去当前redis服务的主节点地址
2. 哨兵配置
-- 主从更换名称即可
-- vim sentinel26379.conf
-- vim sentinel26380.conf
vim sentinel26381.conf
-- 服务监听地址,用于客户端的连接,默认为本地地址
bind 0.0.0.0
daemonize yes
-- 安全保护模式
protected-mode no
port 26379
-- 日志路径
logfile "/myredis/sentinel26379.log"
-- pid文件路径
pidfile /var/run/redis-sentinel26379.pid
dir /myredis
-- 更改对应的id 端口 投票数
sentinel monitor mymaster 192.168.111.169 6379 2
-- 密码
sentinel auth-pass mymaster 111111
其他流程,网上很多可以自己找
3.哨兵运行流程和选举原理
- 当主从配置中的原master失效后,sentinel可以进行选举一个新的master,用于进行接替原来的master工作,主从配置中的其他reids服务器自动指向新的master同步,一般建议sentinel采取基数台,防止一台sentinel无法连接到master导致切换。
- 主观下线
所谓主观下线(Subjectively Down, 简称 SDOWN)指的是单个Sentinel实例对服务器做出的下线判断,即单个sentinel认为某个服务下线(有可能是接收不到订阅,之间的网络不通等等原因)。主观下线就是说如果服务器在[sentinel down-after-milliseconds]给定的毫秒数之内没有回应PING命令或者返回一个错误消息, 那么这个Sentinel会主观的(单方面的)认为这个master不可以用了。
master在多长时间内一直没有给Sentine返回有效信息,则认定该master主观下线。也就是说如果多久没联系上redis-servevr,认为这个redis-server进入到失效(SDOWN)状态
3. 客观下线
意思时一定数量的sentinel,多个哨兵达成一致意见才能进行认为master客观上异常
4. 选出领导者哨兵
当主节点被客观认为下线了,各个哨兵会进行投投票,选出领导者哨兵,由改哨兵进行故障迁移
怎么选出的领导者哨兵?
监视该主节点的所有哨兵都有可能被选为领导者,选举使用的算法是Raft算法;Raft算法的基本思路是先到先得:
即在一轮选举中,哨兵A向B发送成为领导者的申请,如果B没有同意过其他哨兵,则会同意A成为领导者
5.故障迁移
-
某个slave被选中成为新的master
选出master规则
1)redis.conf 文件中,优先级slave-priority或者replica-priority最高的从节点(数字越小优先级越高)
2)复制偏移位置offset最大的从节点
3)最小的Run ID 的从节点 -
老的slave连接新的master
1)执行slaveof no one 命令让选出来的从节点成为新的主节点,并通过slaveod命令让其他界面成为从节点
2)sentinel leader会对选举出的master执行slave no one操作 ,将其提升为master节点
3)sentinel leader 向其他的slave发送命令,让剩余的slave陈伟新的master节点的slave -
之前的老的master重新上线会成为新master的slave
4.哨兵使用建议
- 哨兵节点的数量应该为多个,保证高可用
- 哨兵节点数量为奇数个
- 各个哨兵配置应该为一样
- 哨兵集群+主从复制,并不能保证master异常下数据零丢失