给Redis主从复制模式加上哨兵实现高可用
Posted zhuhuix
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了给Redis主从复制模式加上哨兵实现高可用相关的知识,希望对你有一定的参考价值。
文章目录
一、背景
- 在上篇文章《自已动手搭建环境实现Redis主从复制模式》结尾处,我们提到主从复制模式,存在主机宕机,从机需要人工切换的问题。需要实现主从的自动切换,才能保证Redis服务的高可用。
二、哨兵模式
- 所谓哨兵模式其实就是启动一组独立的监控进程,通过发送命令监听Redis服务,当主机 宕机时,自动切换从机成为主机,以保证Redis服务的不间断运行。
三、配置
- 接下来让我们实际动手给Redis服务器加上哨兵机制。
服务类型 | 主从关系 | IP | Port |
redis | 主机 | 172.16.109.118 | 6379 |
redis | 从机 | 172.17.0.4 | 6379 |
redis | 从机 | 172.33.62.249 | 6379 |
sentinel | 172.16.109.118 | 26379 | |
sentinel | 172.17.0.4 | 26379 | |
sentinel | 172.33.62.249 | 26379 |
- 编辑哨兵模式的配置文件
>
# 配置监听的主服务器
# sentinel monitor代表监控
# redismaster代表服务器的名称,可以自定义
# 172.16.109.118代表监控的主服务器,6379代表端口,2代表只有两个或两个以上的哨兵认为主服务器不可用的时候,才会进行failover操作。
sentinel monitor redismaster 172.16.109.118 6379 2
# 禁止保护模式
protected-mode no
# sentinel author-pass定义服务的密码
# redismaster 是服务名称,123456是Redis服务器密码
- 启动哨兵,并观察后台进程
# 启动哨兵进程
>
- 通过主机上的redis-cli查看哨兵状态
> ./redis-cli -p 26379
127.0.0.1:26379> info
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=redismaster,status=ok,address=172.16.109.118:6379,slaves=2,sentinels=3
四、测试
- 关闭主机的redis服务
>
- 通过sentinel.log日志文件观察主机切换状态:
1233:X 29 Jan 14:32:23.838 # +sdown master redismaster 172.16.109.118 6379
1233:X 29 Jan 14:32:23.957 # +new-epoch 1
1233:X 29 Jan 14:32:23.962 # +vote-for-leader a200e9f2071762d69e1b07139ee2592c3fc6756a 1
1233:X 29 Jan 14:32:24.409 # +config-update-from sentinel a200e9f2071762d69e1b07139ee2592c3fc6756a 172.16.109.118 26379 @ redismaster 172.16.109.118 6379
1233:X 29 Jan 14:32:24.409 # +switch-master redismaster 172.16.109.118 6379 172.17.0.4 6379
1233:X 29 Jan 14:32:24.409 * +slave slave 172.33.62.249:6379 172.33.62.249 6379 @ redismaster 172.17.0.4 6379
1233:X 29 Jan 14:32:24.409 * +slave slave 172.16.109.118:6379 172.16.109.118 @ redismaster 172.17.0.4 6379
- 从以上信息可以得到其中一台从机被选举投票后切换成了主机,而原来的主机变成了从机
服务类型 | 主从关系 | IP | Port |
redis | 主机->从机 | 172.16.109.118 | 6379 |
redis | 从机->主机 | 172.17.0.4 | 6379 |
redis | 从机->从机 | 172.33.62.249 | 6379 |
sentinel | 172.16.109.118 | 26379 | |
sentinel | 172.17.0.4 | 26379 | |
sentinel | 172.33.62.249 | 26379 |
- 重新启协原主机的redis服务,观察原主机变为从机后,是否能从新的主机上同步数据
- 我们首选通过redis连接客户端在新的主机上增加一些键值对
- 然后重启原主机的redis服务,并观察同步信息
>
- 原主机已经完成了同步
五、小结
- 哨兵只是一个进程,不存储数据,只是监控redis服务。
- 主机宕机,哨兵组会通过投票机制,将其中一台从机切换为主机,而原有的主机变成了从机。
- 通过哨兵机制原主从复制模式下人工切换的方式,变成了自动切换,保证了redis服务的高可用。
以上是关于给Redis主从复制模式加上哨兵实现高可用的主要内容,如果未能解决你的问题,请参考以下文章
Redis技术探索「高可用架构模式」哨兵(sentinel)模式实现主从故障互切换模式详解