单纯的主从复制,由于主节点挂了之后,代码需要手动修改redis的ip,所以在实际项目中几乎不会使用,更多的是使用哨兵模式和集群模式,本文主要简述哨兵模式。
原理
当主节点出现故障时,由Redis Sentinel自动完成故障发现和转移,并通知应用方,实现高可用性。
部署哨兵模式
- 先配好主从。可以参考 .....................
- 继续采用同ip不同端口方式。复制三份sentinel.conf。分别命名为sentinel26379.conf、sentinel26380.conf、sentinel26381.conf
- 修改sentinel26379-81.conf配置
# 将端口修改为响应的端口
port 26379
# 配置主节点ip、端口,最后的2表示超过两个哨兵同意才能成为主节点
sentinel monitor mymaster 你的ip 6379 2
# 如果主节点配置了密码,则配置密码,注意这句话要写在sentinel monitor 后面
sentinel auth-pass mymaster 123456
- 启动哨兵
./redis-sentinel sentinel26379.conf &
./redis-sentinel sentinel26380.conf &
./redis-sentinel sentinel26381.conf &
- 至此完成配置
- 如果有多个主节点,那么只需要再添加sentinel monitor即可,注意 名称要不一致
- 关闭哨兵
# 进入26379的哨兵
./redis-cli -p 26379
# 查询哨兵集合信息
sentinel sentinels mymaster
# 关闭
shutdown
或
./redis-cli -p 26380 shutdown
检测哨兵
- 将主节点6379的redis手动停掉。
- 节点状态可以用 info replication查看
- 可以发现哨兵就会开始选举,最终选了6381为主节点
- 再次将6379服务起来,会发现6379节点变为了6381的从节点
其它配置
sentinel monitor mymaster 192.168.42.11 6379 2 //监控主节点的IP地址端口
sentinel auth-pass mymaster 12345678 //sentinel连主节点的密码
sentinel config-epoch mymaster 2 //执行故障转移时, 最多可以有多少个从节点同时对新的主节点进行数据同步
sentinel failover-timeout mymaster 180000 //故障转移超时时间180s,
a,如果转移超时失败,下次转移时时间为之前的2倍;
b,从节点变主节点时,从节点执行slaveof no one命令一直失败的话,当时间超过180S时,则故障转移失败
c,从节点复制新主节点时间超过180S转移失败
sentinel down-after-milliseconds mymaster 300000//sentinel节点定期向主节点ping命令
流程(了解即可)
- 哨兵启动后,哨兵会由定时任务去完成对节点的监控与发现。主要方式有ping、info replication、订阅
- 当哨兵1发现redis节点无回复的时候,会认为它主观下线
- 哨兵1向其它哨兵发出命令,询问该节点是否下线。如果有超过quorum个哨兵(包括当前哨兵)反馈,都认为该主节点主观下线了,则当前哨兵就将该主节点实例标记为客观下线
- 哨兵1会向其它哨兵确实自己是否可以成为领导者,当超过一半的哨兵同意时,他就会成为领导者,并且负责故障转移。
- 哨兵会过滤掉不健康的节点,没有回复哨兵ping消息的节点,优先选择slave-priority优先级最高的从节点、选择复制最完整的节点 (还有其他规则)
- 将原某个从节点转为主节点,其它从节点都指向新的主节点。如果原主节点恢复,则变为从节点。