实际场景分析:为了解决主从模式的无法自动容错及恢复的问题,Redis引入了一种哨兵模式的集群架构。哨兵模式是在主从复制的基础上加入了哨兵节点。哨兵节点是一种特殊的Redis节点,用于监控主节点和从节点的状态。当主节点发生故障时,哨兵节点可以自动进行故障转移,选择一个合适的从节点升级为主节点,并通知其他从节点和应用程序进行更新。
图片
在原来的主从架构中,引入哨兵节点,其作用是监控Redis主节点和从节点的状态。每个Redis实例都可以作为哨兵节点,通常需要部署多个哨兵节点,以确保故障转移的可靠性。
好啦,话不多说,接下来就让我们一起实操吧!
看重点
看到最后:免费领取详细的Word文档?
图片
01哨兵模式原理
哨兵节点定期向所有主节点和从节点发送PING命令,如果在指定的时间内未收到PONG响应,哨兵节点会将该节点标记为主观下线。如果一个主节点被多数哨兵节点标记为主观下线,那么它将被标记为客观下线。
当主节点被标记为客观下线时,哨兵节点会触发故障转移过程。”它会从所有健康的从节点中选举一个新的主节点,并将所有从节点切换到新的主节点,实现自动故障转移。同时,哨兵节点会更新所有客户端的配置,指向新的主节点。
哨兵节点通过发布订阅功能来通知客户端有关主节点状态变化的消息。客户端收到消息后,会更新配置,将新的主节点信息应用于连接池,从而使客户端可以继续与新的主节点进行交互。
这个集群模式的优点就是为整个集群系统了一种故障转移和恢复的能力。
02搭建Redis哨兵模式步骤
2.1 安装Redis主从模式(一主二仆)
Redis主从模式具体步骤请参考详文《不要只会玩儿Redis单机版,如果是读多写少的情况,请选择Redis主从模式吧》
PS:如果都是一台服务器测试哨兵模式,请将slave-6380.conf和slave-6381.conf中slaveof 127.0.01 6379
2.2 配置Redis哨兵模式(sentinel)具体步骤如下
2.2.1 启动好一主二仆模式,6379带着6380、6381
查看详细信息:info replication
图片
图片
图片
2.2.2 自定义的config目录下新建sentinel.conf文件
新建sentinel文件命令:touch sentinel.conf
配置哨兵,填写内容:vi sentinel.conf
sentinel monitor mymaster 127.0.0.1 6379 1
#其中mymaster为监控对象起的服务器名称,1为至少有多少个哨兵同意迁移的数量
sentinel down-after-milliseconds mymaster 30000
#判定服务器down掉的时间周期,默认30000毫秒(30秒)
2.2.3 启动哨兵
退回上级目录:cd ../
执行命令:./redis-sentinel config/sentinel.conf
图片
2.2.4 当主机挂掉,从机选举中产生新的主机
(大概10秒左右可以看到哨兵窗口日志,切换了新的主机)
哪个从机会被选举为主机呢?根据优先级别:slave-priority
原主机重启后会变为从机。
图片
图片
PS:如果都是一台服务器测试哨兵模式,发现6379宕机后并没有实现选举从机过程,请务必将6380和6381的slaveof后的IP地址修改为127.0.0.1,将sentinel.conf中sentinel monitor mymaster 127.0.0.1 6379 1的IP地址也统一设置为127.0.0.1
03哨兵模式应用总结
哨兵模式的优势主要在于当主节点发生故障时,哨兵节点可以自动进行故障转移与自动恢复,选择一个合适的从节点升级为主节点,并通知其他从节点和应用程序进行更新。
但是哨兵模式最大的缺点,就是不适用于大规模应用的解决方案,它无法提供了更好的横向扩展和容错能力。