上一篇文章中,我们主要介绍了Redis集群中的主从复制模式,还没看过的可以点击下面连接:
主从复制模式https://blog.csdn.net/u014374743/article/details/135862183?spm=1001.2014.3001.5502
今天我们开始学习怎么使用Redis集群的哨兵模式
一、哨兵模式介绍
哨兵的配置需要依赖主从复制,如果大家不清楚可以点击上一篇文章
为了解决主从模式的无法自动容错及恢复的问题,Redis引入了一种哨兵模式的集群架构。
哨兵模式是在主从复制的基础上加入了哨兵节点。哨兵节点是一种特殊的Redis节点,用于监控主节点和从节点的状态。当主节点发生故障时,哨兵节点可以自动进行故障转移,选择一个合适的从节点升级为主节点,并通知其他从节点和应用程序进行更新。
每个Redis实例都可以作为哨兵节点,通常需要部署多个哨兵节点,以确保故障转移的可靠性。
哨兵节点定期向所有主节点和从节点发送PING命令,如果在指定的时间内未收到PONG响应,哨兵节点会将该节点标记为主观下线。如果一个主节点被多数哨兵节点标记为主观下线,那么它将被标记为客观下线。
当主节点被标记为客观下线时,哨兵节点会触发故障转移过程。它会从所有健康的从节点中选举一个新的主节点,并将所有从节点切换到新的主节点,实现自动故障转移。同时,哨兵节点会更新所有客户端的配置,指向新的主节点。
哨兵节点通过发布订阅功能来通知客户端有关主节点状态变化的消息。客户端收到消息后,会更新配置,将新的主节点信息应用于连接池,从而使客户端可以继续与新的主节点进行交互。
这个集群模式的优点就是为整个集群系统了一种故障转移和恢复的能力。
二、实现方式
1.上一章中,我们准备了一主两从,现在我们需要准备额外3个哨兵节点,只需添加3个sentinel配置
redis.sentinel.conf
# 修改端口号port,分别为26001/26002/26003
port 26001
# 设置no允许本地和远程链接
protected-mode no
# 配置哨兵,监控名为 "mymaster" 的节点,指定IP、端口和监控阈值
# 监控阈值是指至少几台哨兵节点发现master异常判定为下线
sentinel monitor mymaster 127.0.0.1 6001 2
# 设置节点故障检测时间为10秒
sentinel down-after-milliseconds mymaster 10000
# 设置故障切换超时时间为60秒
sentinel failover-timeout mymaster 60000
# 设置同步节点数为1
sentinel parallel-syncs mymaster 1
# 连接密码
sentinel auth-pass mymaster 111111
2. 启动一主二从三哨兵
# 主redis
redis-server.exe 6001/redis.windows.conf
# 从redis
redis-server.exe 6002/redis.windows.conf
# 从redis
redis-server.exe 6003/redis.windows.conf
# 三台哨兵节点,都监控6001主redis
redis-server.exe 6001/redis.sentinel.conf --sentinel
redis-server.exe 6002/redis.sentinel.conf --sentinel
redis-server.exe 6003/redis.sentinel.conf --sentinel
启动之后,通过redis-cli连接6001,查看详情
redis-cli.exe -h 127.0.0.1 -p 6001 -a 111111
127.0.0.1:6001> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6002,state=online,offset=8886,lag=1
slave1:ip=127.0.0.1,port=6003,state=online,offset=8886,lag=1
master_repl_offset:8886
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:8885
可以从信息中看出,6001为主redis,有两个从redis分别为6002和6003
连接6002,查看详情可以看到如下信息
127.0.0.1:6002> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6001
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:264610
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
查看启动的哨兵服务,如图显示主从服务信息表示成功
3.模拟测试,关掉6001主redis
可以看到哨兵日志
检测到6001掉线,然后执行故障转移,设置6002为master,6003为6002的从服务。
三、注意
当练习当中,失败之后想要重启,请删除哨兵配置中启动后自动添加的一些连接参数,不然会导致无法连接master等
哨兵节点本身不需要设置密码,可以删掉密码的配置,不然会导致多个哨兵节点无法连接问题
关注我,学习更多简单好理解的编程和架构知识!下次分享最后一篇Redis Cluster模式。
关注我 不迷路
或者微信 添加公众号