Redis中sentinel集群的搭建

一、测试环境

master:   192.168.0.197 6379
slave0:    192.168.0.198 6379
slave1:    192.168.0.199 6379
master-sentinel: 192.168.0.197 26379
slave0-sentinel: 192.168.0.198 26379
slave1-sentinel: 192.168.0.199 26379

二、下载安装redis 2.8.3
笔者这里不是用的root权限,新建三台主机分别新建了一个redis用户,进入/home/redis/目录

wget http://download.redis.io/releases/redis-2.8.3.tar.gz
tar –zxvf redis-2.8.3.tar.gz
cd redis-2.8.3
make

make成功之后,进入src目录,make test一次,make test 没有报错,最后make install

Redis安装过程:

异常一: 执行make的时候,出现了异常

make[2]: cc: Command not found 异常原因:没有安装gcc
解决方案:yum install gcc-c++

异常二:

zmalloc.h:51:31: error: jemalloc/jemalloc.h: No such file or directory 异常原因:一些编译依赖或原来编译遗留出现的问题 解决方案:make distclean。清理一下,然后再make。 在make成功以后,需要make test

异常三: 在make test出现异常

couldn’t execute “tclsh8.5”: no such file or directory 异常原因:没有安装tcl
解决方案:yum install -y tcl

三、配置测试环境

  • master

vim redis.conf

daemonize yes  
port 6379  
requirepass 123456        
masterauth  123456  
appendonly no  
save ""  
slave-read-only yes

vim sentinel.conf

port 26379
daemonize yes  
sentinel monitor mymaster 192.168.0.197 6379 2  
sentinel auth-pass mymaster 123456  
sentinel down-after-milliseconds mymaster 30000  
sentinel parallel-syncs mymaster 1  
sentinel failover-timeout mymaster 900000
  • slave0

vim redis.conf

daemonize yes  
port 6379  
requirepass 123456         
masterauth  123456  
appendonly no  
save ""  
slave-read-only yes  
slaveof 192.168.0.197 6379  

vim sentinel.conf

port 26379
daemonize yes  
sentinel monitor mymaster 192.168.0.197 6379 2  
sentinel auth-pass mymaster 123456  
sentinel down-after-milliseconds mymaster 30000  
sentinel parallel-syncs mymaster 1  
sentinel failover-timeout mymaster 900000  
  • slave1

vim redis.conf

daemonize yes  
port 6379  
requirepass 123456         
masterauth  123456  
appendonly no  
save ""  
slave-read-only yes  
slaveof 192.168.0.197 6379

vim sentinel.conf

port 26379
daemonize yes  
sentinel monitor mymaster 192.168.0.197 6379 2  
sentinel auth-pass mymaster 123456  
sentinel down-after-milliseconds mymaster 30000  
sentinel parallel-syncs mymaster 1  
sentinel failover-timeout mymaster 900000 

四、启动集群

注意:首次构建sentinel环境时,必须首先启动master。

启动master和master-sentinel:

cd /home/redis/redis-2.8.3
./src/redis-server redis.conf
./src/redis-sentinel sentinel.conf

克隆会话,启动slave0和slave0-sentinel:

cd /home/redis/redis-2.8.3
./src/redis-server redis.conf
./src/redis-sentinel sentinel.conf

克隆会话,启动slave1和slave1-sentinel:

cd /home/redis/redis-2.8.3
./src/redis-server redis.conf
./src/redis-sentinel sentinel.conf

查看master的状态:

./src/redis-cli -h 192.168.0.197 -p 6379  -a 123456

这里写图片描述
这里写图片描述

查看slave0的状态:

./src/redis-cli -h 192.168.0.198 -p 6379  -a 123456

这里写图片描述
这里写图片描述
查看slave1的状态:

./src/redis-cli -h 192.168.0.199 -p 6379  -a 123456

这里写图片描述
这里写图片描述

  • 场景1:slave宕机

关闭slave1:
查看sentinel状态
这里写图片描述

查看master的Replication信息,此时只存在一个slave0
这里写图片描述

  • 场景2:slave恢复

重新开启slave1:

./src/redis-server redis.conf

查看sentinel状态:
sentinel能快速的发现slave1加入到集群中:
这里写图片描述

  • 场景3:master宕机

master-sentinel作为master的leader,会选取一个slave作为新的master。slave的选取是根据一个判断DNS情况的优先级来得到,优先级相同通过runid的排序得到,但目前优先级设定还没实现,所以直接获取runid排序得到slave0。

然后发送命令slaveof no one来取消slave 0的slave状态来转换为master。当其他sentinel观察到该slave成为master后,就知道错误处理例程启动了。sentinel A然后发送给其他slave slaveof new-slave-ip-port 命令,当所有slave都配置完后,sentinel A从监测的masters列表中删除故障master,然后通知其他sentinels。
关闭master:
这里写图片描述

查看sentinel状态:
slave0-sentinel:
自动将slave0切换成master,原来的master变成slave
这里写图片描述

  • 场景4:master恢复

重新启动原来的master:
redis-server /usr/local/redis_cluster/master-6379/redis.conf
查看sentinel状态:
原来的master自动切换成slave,不会自动恢复成master:

这里写图片描述

测试完成。

注意:若在sentinel已选出新主但尚未完成其它实例的reconfigure之前,重启old master,则整个系统会出现无法选出new master的异常。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值