redis学习-哨兵
redis哨兵作用
监控主从节点状态,主节点出问题后自动切换从节点为主节点,保证主节点的高可用,自动化的故障恢复
主从配置
配置环境:
1 | 主节点 127.0.0.1 6000 |
哨兵节点配置如下:
1 | port 7000 |
其中7000为哨兵的通信端口,masternode为主节点名称,127.0.0.1 6000为初始主节点的ip和端口,2代表至少有两个哨兵节点判定主节点故障,才能进行故障转移。一个哨兵节点可以监控多个主节点,只需要配置多行即可。注意:哨兵节点启动成功后配置文件会自动修改;配置的主节点IP应该使用应用可访问到的IP,因为哨兵只做主节点的配置发现不做代理。
故障恢复过程
- 发现故障
通过定时任务,哨兵发现主节点没有响应,将主节点标为主观下线
- 确认故障
哨兵发送命令给其他哨兵,如果判定主节点故障的哨兵个数达到配置值,则将主节点标记为客观下线。
- 选举哨兵leader
标记主节点为客观下线的哨兵A,向其他哨兵节点发送命令,要求对方选举自己为哨兵leader,目标哨兵如果没有答应过其他哨兵为leader,则会同意哨兵A为leader,超过半数的哨兵同意后,哨兵A成为哨兵leader
- 选择主节点
哨兵leader负责挑选主节点,规则如下:先按从节点优先级判定,优先级一致则选择同步偏移量最大的从节点,如果还一致,则选择ID较小的从节点。
- 修改主从配置
哨兵leader给选定的从节点发送 slaveof none one 命令,从节点变为主节点,给其他从节点发送 slaveof 命令使其成为新的主节点的从节点,其他从节点修改主节点后开始同步数据。旧的主节点标记为新的主节点的从节点,如果旧的主节点再次上线,将成为从节点。

应用使用
1 | const Redis = require('ioredis'); |
哨兵部署好之后,通过以上代码不断查询节点信息,在主节点故障后,连接会有短时间无法连接错误,应用暂不可用,等待哨兵重新选定主节点后,应用即可恢复。