- 场景
假如我们采用1主1从的方式搭建redis的backup,显然这样没有什么作用。因为无论是主还是从服务器下线,我们都得手动恢复,才能使用网站正常使用。是否可以让redis做到自动的failover呢?是可以的,我们可以使用redis sentinel来做到这一点,当master下线,sentinel可以将slave节点升级为master。用户访问之前master节点时,将自己切换访问为slave节点,从而实现故障自动转移。
当故障的master节点恢复健康,上线后sentinel将把故障的master节点降级,成为新的master节点的一个slave节点。
下面我们看看需要做的一些操作
1 服务器角色规划
role | ip |
---|---|
sentinel | 10.10.10.1 |
master | 10.10.10.2 |
slave | 10.10.10.3 |
2 master配置
注意,master的password需要与slave的password保持一致,这里我们演示master设置了密码的配置。编缉master的配置文件,加入以下配制项目
bind 10.10.10.2
protected-mode yes
port 6379
daemonize yes
requirepass abcd
slaveof 10.10.10.3 6379
3 slave配置
bind 10.10.10.3
port 6379
daemonize yes
requirepass abcd
masterauth "abcd"
4 sentinel配置
bind 10.10.10.1
protected-mode yes
port 6379
daemonize yes
sentinel monitor master_server 10.10.10.2 6379 1
sentinel down-after-milliseconds master_server 5000
sentinel failover-timeout master_server 15000
sentinel auth-pass master_server abcd
5 启动master、slave、sentinel
master与slave启动
[root@local bin]#./redis-server 配置文件路径
sentinel的启动与master、slave略有不同
[root@local bin]#./redis-server 配置文件路径 --sentinel
至此,1主1从1哨兵的主从自动切换灾备部署完成。
- 验证
登录master服务器
[root@local bin]#./redis-cli -h 10.10.10.2 -p 6379 -a abcd
10.10.10.2:6379> INFO
... ...
# Replication
role:master
connected_slaves:1
slave0:ip=10.10.10.3,port=6379,state=online,offset=426034,lag=1
... ...
如果使用命令SHUTDOWN将master下线,则登录slave使用INFO命令查看,可以看到slave的role将从slave转变成master。
当故障的master恢复后,将成为新的master的一个slave节点