Redis-4.0.1 哨兵模式搭建

1、建立文件件redis-sentinel,目录内放置如下文件:


2、拷贝redis安装目录下的redis.conf到7501-7504文件夹下,分别命名,例如redis-7501.conf,分别修改这4个文件,将里面的对应选项分别设置

daemonize yes
port 7501
logfile "./logs/redis-7501.log"
bind 127.0.0.1
3、拷贝 redis安装目录下的redis-sentinel.conf文件到目录下,命名为redis-sentinel-7601.conf、redis-sentinel-7602.conf、redis-sentinel-7603.conf,分别修改这3个文件,将里面的对应选项分别设置(此处一定要注意myid要有所区别)

port 7601
sentinel monitor mymaster 127.0.0.1 7502 2
sentinel myid 9162374a99b49f9080ec33f4b977ae0fbfc205b1

4、启动redis-server服务和redis-sentinel服务

redis-server 7501/redis-7501.conf
redis-server 7502/redis-7502.conf
redis-server 7503/redis-7503.conf
redis-server 7504/redis-7504.conf

5、分别登录7502-7504四个实例,改变主从关系

redis-cli -h 127.0.0.1 -p 7501
redis-cli -h 127.0.0.1 -p 7502
redis-cli -h 127.0.0.1 -p 7503
redis-cli -h 127.0.0.1 -p 7504

SLAVEOF 127.0.0.1 7501

6、启动哨兵

redis-sentinel redis-sentinel-7601.conf
redis-sentinel redis-sentinel-7602.conf
redis-sentinel redis-sentinel-7603.conf

7、接下来开始测试,先用redis-cli -h 127.0.0.1 -p 7501命令登录各台机器,输入info replication查看master-slave状态,然后强行杀掉master,观察redis-sentinel输出,可以看到哨兵已经选取了7502作为新的master


这个时候打开sentinel-config文件,发现对应的配置项发生改变,master已经更改为新的节点:

sentinel monitor mymaster 127.0.0.1 7502 2

8、接下来继续测试,先将3个sentinel节点杀掉,然后将新的master节点杀掉,再启动3个sentinel,奇迹发生了,sentinel居然选出来了新的master!

这就很疑惑了,在本来的master节点就挂掉的情况下,而且sentinel只与挂掉的master能通信的情况下,居然能找到其他节点选取新master?

当然这是错的,仔细看redis-sentinel.conf文件就会发现,在上一个周期,sentinel与master能正常通信的情况下,它是会拉取整个集群的全部节点信息存储起来的,所以在master先挂sentinel后启动的情况下,sentinel也是能与其他节点通信的。


猜你喜欢

转载自blog.csdn.net/Lakers_KobeBryant/article/details/79130701