当前位置 > it书童 > 编程 > 正文

Redis 哨兵机制

编程 it书童 2020-12-18 22:32:15 0赞 0踩 722阅读 0评论

当一主多从的架构出现主节点宕机时,整个 redis 架构是不能再写入的,因为从节点只提供读操作,如果能让从节点自动转为主节点,就可以保证服务正常运行。

Redis 的哨兵机制就能实现此功能

节点ip说明:

  • 主节点:171

  • 从节点:172 与 152

只凭一个哨兵也不可靠,万一哨兵也挂了呢?所以哨兵也需要搭建高可用集群

哨兵的配置文件 /etc/redis-sentinel.conf

# 关闭保护模式
protected-mode no
# 工作空间
dir /tmp
# 日志
logfile /var/log/redis/sentinel.log
# 核心配置
sentinel monitor mymaster 192.168.1.171 6379 2 # 最后为 2 表示有2个哨兵监测到 master 宕机,就将其判断为宕机,从而去将某个 slave 转为 master 

由于哨兵也是用集群模式,因此各 redis 节点的哨兵配置须一致

接下来启动哨兵

$ sudo redis-sentinel /etc/redis-sentinel.conf

也可以使用后台启动模式

$ nohup sudo redis-sentinel /etc/redis-sentinel.conf &

$ ps -ef | grep redis
redis     3610     1  0 09:26 ?        00:00:08 /usr/bin/redis-server *:6379
root      3753  3189  0 10:09 pts/0    00:00:00 sudo redis-sentinel /etc/redis-sentinel.conf
root      3757  3753  0 10:09 pts/0    00:00:00 redis-sentinel *:26379 [sentinel]

然后将从节点的哨兵也开启

查看主节点的哨兵日志,可看到从节点哨兵加入的信息

$ sudo tail /var/log/redis/sentinel.log
2922:X 18 Dec 14:23:11.562 # +sdown sentinel 3e60fd4b6e256054f9a24855a2a030849c2e6064 192.168.1.172 26379 @ mymaster 192.168.1.171 6379
2922:X 18 Dec 14:23:11.562 # +sdown sentinel 70615df68ac15ecfc878d08f5d5fd9fd9216964c 192.168.1.151 26379 @ mymaster 192.168.1.171 6379
2922:X 18 Dec 14:24:42.087 # +sdown master mymaster 192.168.1.171 6379
2922:X 18 Dec 14:24:42.194 # +new-epoch 8
2922:X 18 Dec 14:24:42.196 # +vote-for-leader 3e60fd4b6e256054f9a24855a2a030849c2e6064 8
2922:X 18 Dec 14:24:42.701 # +config-update-from sentinel 3e60fd4b6e256054f9a24855a2a030849c2e6064 192.168.1.172 26379 @ mymaster 192.168.1.171 6379
2922:X 18 Dec 14:24:42.701 # +switch-master mymaster 192.168.1.171 6379 192.168.1.151 6379
2922:X 18 Dec 14:24:42.701 * +slave slave 192.168.1.172:6379 192.168.1.172 6379 @ mymaster 192.168.1.151 6379
2922:X 18 Dec 14:24:42.701 * +slave slave 192.168.1.171:6379 192.168.1.171 6379 @ mymaster 192.168.1.151 6379
2922:X 18 Dec 14:25:12.715 # +sdown slave 192.168.1.171:6379 192.168.1.171 6379 @ mymaster 192.168.1.151 6379

接下来将主节点的 redis 关闭,再查看主节点的哨兵日志,可看到哨兵发现主节点宕机后,会投票选举其中一个从节点作为新的主节点

注意,各节点的 redis.conf 必须将端口开放连接,否则哨兵无法切换主从,报错如下:

3504:X 18 Dec 13:13:08.900 # +vote-for-leader 70615df68ac15ecfc878d08f5d5fd9fd9216964c 3
3504:X 18 Dec 13:13:08.902 # 7866aeb1b858507f4828bcd82504297a3d614ffc voted for 3e60fd4b6e256054f9a24855a2a030849c2e6064 3
3504:X 18 Dec 13:13:19.634 # -failover-abort-not-elected master mymaster 192.168.1.171 6379
3504:X 18 Dec 13:13:19.686 # Next failover delay: I will not start a failover before Fri Dec 18 13:19:09 2020
3504:X 18 Dec 13:19:09.596 # +new-epoch 4
3504:X 18 Dec 13:19:09.596 # +try-failover master mymaster 192.168.1.171 6379
3504:X 18 Dec 13:19:09.602 # +vote-for-leader 70615df68ac15ecfc878d08f5d5fd9fd9216964c 4
3504:X 18 Dec 13:19:09.603 # 7866aeb1b858507f4828bcd82504297a3d614ffc voted for 3e60fd4b6e256054f9a24855a2a030849c2e6064 4
3504:X 18 Dec 13:19:19.976 # -failover-abort-not-elected master mymaster 192.168.1.171 6379
3504:X 18 Dec 13:19:20.032 # Next failover delay: I will not start a failover before Fri Dec 18 13:25:09 2020

将 redis 按以下配置后重启即可

# bind 127.0.0.1
# 关闭保护模式
protected-mode no

此时,再将原先的主节点重新开启,该节点就会成为从节点

关于我
一个文科出身的程序员,追求做个有趣的人,传播有价值的知识,微信公众号主要分享读书思考心得,不会有代码类文章,非程序员的同学请放心订阅
转载须注明出处:https://www.itshutong.com/articles/972