/ redis  

redis下sentinel实验

很早以前在2台阿里云服务器上把redis主备给搭好了,但是一直纠结的是阿里云好像不支持vip,没办法做主从切换,万一主服务器崩了就完蛋咯.
先不考虑服务器端环境,学习一下redis自身关于HA(hign available)的实现–sentinel.
下面开始做实验看看它的实际效果.


一.配置master和slave(为了方便,所有操作均在一台电脑上,通过改变端口号去模拟多台服务器)

1.用mkdir testRedis指令建一个测试目录

2.将redis-2.8.19拷贝到该目录下,并且再复制其多个副本
一共copy3个出来就行,分别命名redis1,redis2,redis3,注意linux下拷贝目录用cp -r xx xx指令,别把-r丢了

3.将redis1里面的redis.conf配置文件中的port值设置为6380,其余2个别设置为6381和6382,并且在后2个配置slave of 127.0.0.1 6380
这样最终设置成的环境是redis1目录里面运行的是主,redis2和redis3是它的从,如下图

ms

二.配置并执行sentinel

1.修改redis1里面sentinel.conf配置文件
需要修改的参数有
port 26380
sentinel monitor mymaster 127.0.0.1 6380 2
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 10000

第一个参数就是sentinel进程占用的端口号,我们需要配置每个sentinel.conf的端口号不相同,即在redis2,redis3里面的设置成26381和26382;
第二个参数是监听的master身份的redis服务器,mymaster应该就是一个别名吧,应该是用来跟其他参数统一配置,例如下面均为mymaster,最后面的那个2表示的意思是:
最少有2个sentinel进程认为master挂掉了,才会更换master;
第三个参数表示当master服务器端失去连接30秒了,就换master;
第四个参数表示易主之前,最后需要等待的时间,因为做测试,所以改成10秒.

2.运行3个sentinel实例
在src下面有redis-sentinel脚本,和启动redis服务一样,输入redis-sentinel ../sentinel.conf即开始运行

三.手动down掉master服务器,然后看图说话

1.用ctrl+C关闭redis1里对于的那个master

大哥一挂,小弟们纷纷呼唤着大哥归来
图1

30秒过去了,大哥仍无视2小弟的呼唤,2小弟开始去sentinel报案说master挂机了,团战没C位怎么打
于是sentinel认为这个大哥太垃圾了,跟2个小弟说:’你们2个自己投票吧,选一个人当C位’
图2

这里10秒钟的failover-timeout配的不好,应该要大于30秒比较好,如果设置成了默认的5分钟.2小弟就还要再用5分钟去彼此同步大哥的装备(数据)
看到Next failover delay:后面的话了吗,那个时间就是当前时间加上上面配置的failover-timeout时间,即在进行故障转移之前需要等这么长时间,具体用途应该是修改配置文件或是同步数据之类的吧

2.sentinel产生了新的master

图3

3.当原先的master重写连接上

老的大哥网吧断电了,终于reconnect了,但是发现小弟已经不认它了,它只能被迫改行当小弟

图5

4.查看配置文件发现slaveof属性发生了改变
redis2(端口号6381)的变为 slaveof 127.0.0.1 6382
另外新master里面的sentinel配置文件会有部分变动