实验环境 | |
s1:172.25.7.1 | 主 |
s2:172.25.7.2 | 从 |
s3:172.25.7.3 | 从 |
据上一篇配置好三个机器的主从关系。
一、哨兵模式简介
当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。
这里的哨兵有两个作用
-
通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。
-
当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。
二、哨兵模式配置
s1:
[root@s1 ~]# cd redis-5.0.5
[root@s1 redis-5.0.5]# vim sentinel.conf
84 sentinel monitor mymaster 172.25.7.1 6379 2 #更改主节点信息
113 sentinel down-after-milliseconds mymaster 10000 #超过10s就认为主节点挂掉了
[root@s1 redis-5.0.5]# cp sentinel.conf /etc/redis/ #将哨兵配置文件移动一下目录
[root@s1 redis-5.0.5]# redis-server /etc/redis/sentinel.conf --sentinel #开启哨兵模式
将sentinel.conf 移动到s2和s3的/etc/redis/目录下,同理再移动到s3一份
注意:先复制到s2和s3的/etc/redis的目录下再开启哨兵模式,目的是让/etc/redis/sentinel.conf文件中的sentinel myid号不一致
如果先开启s1的哨兵模式,再scp哨兵配置文件到s2和s3,则sentinel myid就一样了。实验会失败!
将s2和s3的哨兵开启:
[root@s2 ~]# redis-server /etc/redis/sentinel.conf --sentinel
[root@s3 utils]# redis-server /etc/redis/sentinel.conf --sentinel
查看s1,s2,s3的开启后的哨兵状态
三、测试
s1,s2,s3监控窗口不要关,另打开一个tenimal模仿主节点挂掉
先看一下主节点的状态,此时是s1
真机新打开一个teminal连接s1, 让s1挂掉:
查看哨兵监控信息:可见原主节点s1挂掉值之后,s2顶替上来了。
新打开一个teminal登陆s2验证其是否为主节点:
注意:
在原主节点s1挂掉之后,我们需要重新开启并且手动添加配置文件:slaveof 172.25.7.2 6379 。把它加到现主节点的s2的从节点中。
之所以需要手动添加s1而不是在它挂掉之后直接变为slave是因为,原主节点s1上有大量数据可能s2和s3没有同步完全如果直接直接置为slave,会造成数据丢失,所以需要手动添加。
[root@s1 redis-5.0.5]# vim /etc/redis/6379.conf
slaveof 172.25.7.2 6379
[root@s1 redis-5.0.5]# /etc/init.d/redis_6379
Please use start, stop, restart or status as first argument
[root@s1 redis-5.0.5]# /etc/init.d/redis_6379 start
Starting Redis server...
在s2上查看:redis-cli ---> info