Redis单点时,当一台机器挂机了,redis的服务完全停止,这时就会影响其他服务的正常运行。下面利用redis sentinel做一个主从切换的集群管理。
下面两段官方的说辞:
Redis Sentinel provides high availability for Redis. In practical terms this means that using Sentinel you can create a Redis deployment that resists without human intervention to certain kind of failures.
Redis Sentinel also provides other collateral tasks such as monitoring, notifications and acts as a configuration provider for clients.
环境配置:
由于我这次配置没有太多的机器,参考前面的主从搭建,测试环境就两台Linux机器,所以用了一台Windows机器做了一个slave。
Windows只支持64位,所以要找64位的机器,参考此博客http://blog.csdn.net/renfufei/article/details/38474435,安装包从此链接上下载https://github.com/MSOpenTech/redis/releases,有zip免安装的,也有msi的,根据自己需要下载,我下载的zip,解压默认配置即可。
windows这台是slave,启动命令:
- redis-server redis.windows.conf
集群配置最少需要三台机器,那么我就两台Linux机器,一台Windows机器分别安装同样的redis的环境
IP分别:
192.168.0.148 (redis sentinel 集群监控)
192.168.0.149 (redis 主)
192.168.9.68 (windows redis 从)
启动主和从,然后在主查看Replication信息
[root@JfbIpadServer02 /usr/local/redis/bin]#./redis-cli -h 192.168.0.149 info Replication
# Replication
role:master #代表当前主机为master
connected_slaves:1 #有一台slave
slave0:ip=192.168.0.68,port=6379,state=online,offset=50959,lag=1 #slave的IP和端口
master_repl_offset:50959
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:50958
相看从机器的Replication信息
D:\Programs\Redis-x64-3.0.501>redis-cli -h 192.168.0.68 info Replication
# Replication
role:slave
master_host:192.168.0.149
master_port:6379
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:61166
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:18167
配置redis sentinel集群监控服务
1.添加一份redis sentinel 配置文件,在192.168.0.148上,配置此文件。
jfb-test:/usr/local/src/redis-3.0.7 # cp sentinel.conf /usr/local/redis/bin/
jfb-test:/usr/local/src/redis-3.0.7 # cd /usr/local/redis/bin
jfb-test:/usr/local/redis/bin # vi sentinel.conf
The Redis source distribution contains a file called sentinel.conf
that is a self-documented example configuration file you can use to configure Sentinel, however a typical minimal configuration file looks like the following:
sentinel monitor mymaster 192.168.0.149 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
sentinel monitor resque 192.168.1.3 6380 4
sentinel down-after-milliseconds resque 10000
sentinel failover-timeout resque 180000
sentinel parallel-syncs resque 5
2,启动redis sentinel
有配置文件了,那么启动redis sentinel做redis集群监听。
把redis sentinel 集群监听启动,观察redis sentinel 日志信息
jfb-test:/usr/local/redis/bin # ./redis-sentinel sentinel.conf --sentinel
这里很清楚地看到,从的redis加入了集群,上面加了红框的那行。
执行以下命令,查看redis主从信息。
jfb-test:/usr/local/redis/bin # ./redis-cli -h 192.168.0.148 -p 26379 info Sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
master0:name=mymaster,status=ok,address=192.168.0.149:6379,slaves=1,sentinels=1
那么表示一切都正常了。你的redis sentinel集群已经配置成功!
3,故障演示
执行以下命令使用主的redis(149)服务停止 stopRedis。查看sentinel机器的日志,发现master发生了转移。
这张图片很清晰地反应到,redis sentinel 监控到主的redis(149)服务停止,然后自动把从的redis(68)切换到主。
再执行以下命令,查看redis主从信息。
jfb-test:/usr/local/redis/bin # ./redis-cli -h 192.168.0.148 -p 26379 info Sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
master0:name=mymaster,status=ok,address=192.168.0.68:6379,slaves=1,sentinels=1
4,恢复启动原主Redis
当我们已经发现,一台redis发生故障了,可能会收到一些故障信息,那么再把服务已关闭的redis恢复服务状态,会发生怎么样的情况呢?
+slave slave 192.168.0.149:6379 192.168.0.149 6379 @ mymaster 192.168.0.68 6379
redis sentinel 集群服务,会把上次主redis重新加入服务中,但是他再以不是主的redis了,变成从的reids。
5,恢复原主,这是手动操作,现实中的自动切换不用操作这步,在现在的主Redis 68上的的执行下面的命令,将149变成主。
D:\Programs\Redis-x64-3.0.501>redis-cli -p 6379 slaveof 192.168.0.149 6379
参考资料:
http://redis.io/topics/sentinel