当我们使用 Redis 做缓存策略。刚开始的时候,redis是一个单点,此时如果redis机器岩机,redis的 服务就完全停止,这时就会影响其站点的正常运行。 下面利用自带的一个集群管理工具 redis sentinel 做一个主从切换的集群管理,下面介绍我的做法。
这里我准备了三台机器 VirtualBOX 的虚拟机
Systen : Centos 6
IP:192.168.11.249 (redis slave3) port:6380 一台机器多实例redis
IP:192.168.11.250 (redis slave 1) port:6379
IP:192.168.11.251 (redis slave 2) port:6379
做好主从配置
masterauth redispass
requirepass redispass
# Replication
role:master
connected_slaves:3
slave0:ip=127.0.0.1,port=6380,state=online,offset=53535,lag=1
slave1:ip=192.168.11.250,port=6379,state=online,offset=53549,lag=0
slave2:ip=192.168.11.251,port=6379,state=online,offset=53549,lag=0
master_repl_offset:53549
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:53548
IP:192.168.11.250 slave
# Replication
role:slave
master_host:192.168.11.249
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:101631
slave_priority:99
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
IP:192.168.11.251 slave
# Replication
role:slave
master_host:192.168.11.249
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:15300
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:0
repl_backlog_histlen:0
主从同步测试事先已完成 这里不做介绍
Redis sentinel配置
主页地址:http://redis.io/topics/sentinel
sentinel主要功能就是为Redis M-S(master,slaves)集群提供了
1)master存活检测
2)集群中M-S服务监控
3) 自动故障转移,M-S角色转换等能力,
从一个方面说是提高了redis集群的可用性.
#添加并编辑配置文件/etc/sentinel.conf,新增内容如下,也可在安装文件中负责sentinel配置文件并作适当修改:
# port 可以一样也可以向下面所示 不同
port 26379
sentinel monitor mymaster 192.168.11.249 6379 2
sentinel auth-pass mymaster redispass
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 900000
sentinel parallel-syncs mymaster 1
port 26479
sentinel monitor mymaster 192.168.11.249 6379 2
sentinel auth-pass mymaster redispass
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 900000
sentinel parallel-syncs mymaster 1
port 26579
sentinel monitor mymaster 192.168.11.249 6379 2
sentinel auth-pass mymaster redispass
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 900000
sentinel parallel-syncs mymaster 1
#在三个服务器中以sentinel模式启动redis-server
[root@localhost ~]# service redis-sentinel start
[root@localhost ~]# service redis-sentinel start
此时可以看看日志
#最后三台服务器sentinel输出如下:(注意每个机器输出对应的都是另外两台机器的IP)
版本信息
......
16166:X 19 Feb 20:23:30.721 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
16166:X 19 Feb 20:23:30.721 # Sentinel runid is f76f2e2ea561611ffa4d6e43e457a35a8f6ae495
16166:X 19 Feb 20:23:30.721 # +monitor master mymaster 192.168.11.249 6379 quorum 2
16166:X 19 Feb 20:23:30.725 * +slave slave 127.0.0.1:6688 127.0.0.1 6688 @ mymaster 192.168.11.249 6379
16166:X 19 Feb 20:23:30.736 * +slave slave 127.0.0.1:6687 127.0.0.1 6687 @ mymaster 192.168.11.249 6379
16166:X 19 Feb 20:23:30.738 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 192.168.11.249 6379
16166:X 19 Feb 20:23:30.740 * +slave slave 192.168.11.250:6379 192.168.11.89 6379 @ mymaster 192.168.11.249 6379
16166:X 19 Feb 20:23:30.742 * +slave slave 192.168.11.251:6379 192.168.11.250 6379 @ mymaster 192.168.11.249 6379
16166:X 19 Feb 20:24:00.803 # +sdown slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 192.168.11.249 6379
16166:X 19 Feb 20:27:48.735 # User requested shutdown...
16166:X 19 Feb 20:27:48.735 * Removing the pid file.
16166:X 19 Feb 20:27:48.735 # Sentinel is now ready to exit, bye bye...
测试
#关掉192.168.11.250 上的redis-server服务
service redis stop
#每个sentinel将输出如下信息,表示认为该 slave已经宕机,剔除
30141:X 20 Feb 09:55:33.570 # -sdown slave 192.168.11.250:6379 192.168.11.250 6379 @ mymaster 192.168.11.249 6379
30141:X 20 Feb 09:55:43.544 * +convert-to-slave slave 192.168.11.250:6379 192.168.11.250 6379 @ mymaster 192.168.11.249 6379
在启动 redis 查看 sentinel
service redis start
30141:X 20 Feb 10:26:49.249 # +sdown slave 192.168.11.250:6379 192.168.11.250 6379 @ mymaster 192.168.11.249 6379
30141:X 20 Feb 10:28:11.776 * +reboot slave 192.168.11.250:6379 192.168.11.250 6379 @ mymaster 192.168.11.249 6379
30141:X 20 Feb 10:28:11.828 # -sdown slave 192.168.11.250:6379 192.168.11.250 6379 @ mymaster 192.168.11.249 6379
"/var/log/redis/sentinel.log" 431L, 40764C
如果关掉主redis 那么 sentinel 就会选择一台接收 master 并将其他 slave 的master 修改到这个上面
参考 http://mrcto.blog.51cto.com/1923168/1319542
没有评论