实现Redis的哨兵模式
一、参考资料
linux下redis的主从复制:https://www.cnblogs.com/javasl/p/12099046.html
哨兵模式是在主从复制的基础上增加故障转移功能,简言之,当主节点宕机后,自动在从节点中选一个做主节点,无需人为干预,实现高可用。
二、配置步骤
【主节点配置】无任何额外配置
#bind 127.0.0.1 protected-mode no daemonize yes
【从节点配置】无任何额外配置
#bind 127.0.0.1 protected-mode no daemonize yes replicaof 192.168.43.121 6379
【哨兵节点配置】增加sentinel配置
1)安装哨兵节点
哨兵节点安装在121服务器上,端口为6380,本机已经安装了redis-5.0.4,直接复制目录,修改配置即可。
[root@localhost myroom]# cp -r redis-5.0.4 redis-sentinel
2)修改配置文件
port 6380 daemonize yes protected-mode no #bind 127.0.0.1 pidfile /var/run/redis_6380.pid #指定别名 主节点ip 端口 哨兵个数(有几个哨兵监控到主节点宕机,执行转移) sentinel monitor mymaster 192.168.43.121 6379 1 #5秒没有收到主节点的心跳,哨兵人为主节点宕机了 sentinel down-after-milliseconds mymaster 5000
三、测试
1)先启动redis的主节点和从节点
2)启动哨兵节点
[root@localhost bin]# ./redis-server redis.conf --sentinel
3)依然是主节点可以读写、从节点只能读
4)关掉主节点,其中一个从节点也可以读写(升为主节点),另一个从节点只能读
5)再关掉这个可以读写的节点,就剩下一个从节点了,它依然升为主节点,可以读写
6)启动最初的那个主节点(121节点),它退为了从节点
7)上面的任何操作都无需重启节点
四、备注
1)主节点变为从节点后,redis会自动回写配置文件,如下:
2)哨兵节点第一次运行后,会自动回写配置文件,如下:
3)多哨兵配置与单个哨兵配置一样,直接复制上面哨兵的配置文件即可
4)生产中应该使用多哨兵,且哨兵的数量为奇数(因为半数+1的哨兵认为选主节点才会选择,1个哨兵与两个哨兵,3个哨兵与4个哨兵,5个哨兵与6个哨兵...其实作用是一样的,使用偶数会浪费一个节点)
5)使用两个哨兵节点,假如宕掉一个哨兵,则哨兵模式失效(2的半数+1还是2,不会选择主节点,宕掉半数哨兵节点,则哨兵模式失效)