coreos:云计算新星 Docker 正在以火箭般的速度发展,与它相关的生态圈也渐入佳境,CoreOS 就是其中之一。CoreOS 是一个全新的、面向数据中心设计的 Linux 操作系统,在2014年7月发布了首个稳定版本,目前已经完成了800万美元的A轮融资。
Sentinel实现Redis容灾部署 三哨兵架构[root@rocket sentinel]# tree
.
├── redis-cli
├── redis-sentinel
├── redis-server
├── sentinel1
│ ├── sentinel1.conf
│ └── sentinel1.log
├── sentinel2
│ ├── sentinel2.conf
│ └── sentinel2.log
└── sentinel3
├── sentinel3.conf
└── sentinel3.log
哨兵一配置sentinel1.conf
# Example sentinel.conf # port <sentinel-port> port 26371 # 守护进程模式 daemonize yes # 指明日志文件名 logfile "./sentinel1.log" # 工作路径,sentinel一般指定/tmp比较简单 dir ./ # 哨兵监控这个master,在至少quorum个哨兵实例都认为master down后把master标记为odown # (objective down客观down;相对应的存在sdown,subjective down,主观down)状态。 # slaves是自动发现,所以你没必要明确指定slaves。 sentinel monitor TestMaster 127.0.0.1 7003 1 # master或slave多长时间(默认30秒)不能使用后标记为s_down状态。 sentinel down-after-milliseconds TestMaster 1500 # 若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。 sentinel failover-timeout TestMaster 10000 # 设置master和slaves验证密码 sentinel auth-pass TestMaster 0234kz9*l sentinel config-epoch TestMaster 15 sentinel leader-epoch TestMaster 8394 # #除了当前哨兵, 还有哪些在监控这个master的哨兵 sentinel known-sentinel TestMaster 127.0.0.1 26372 0aca3a57038e2907c8a07be2b3c0d15171e44da5 sentinel known-sentinel TestMaster 127.0.0.1 26373 ac1ef015411583d4b9f3d81cee830060b2f29862 sentinel current-epoch 8394
哨兵二配置sentinel2.conf
# Example sentinel.conf # port <sentinel-port> port 26372 # 守护进程模式 daemonize yes # 指明日志文件名 logfile "./sentinel2.log" # 工作路径,sentinel一般指定/tmp比较简单 dir ./ # 哨兵监控这个master,在至少quorum个哨兵实例都认为master down后把master标记为odown # (objective down客观down;相对应的存在sdown,subjective down,主观down)状态。 # slaves是自动发现,所以你没必要明确指定slaves。 sentinel monitor TestMaster 127.0.0.1 7003 1 # master或slave多长时间(默认30秒)不能使用后标记为s_down状态。 sentinel down-after-milliseconds TestMaster 1500 # 若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。 sentinel failover-timeout TestMaster 10000 # 设置master和slaves验证密码 sentinel auth-pass TestMaster 0234kz9*l sentinel config-epoch TestMaster 15 sentinel leader-epoch TestMaster 8394 # #除了当前哨兵, 还有哪些在监控这个master的哨兵 sentinel known-sentinel TestMaster 127.0.0.1 26371 b780bbc20fdea6d3789637053600c5fc58dd0690 sentinel known-sentinel TestMaster 127.0.0.1 26373 ac1ef015411583d4b9f3d81cee830060b2f29862 sentinel current-epoch 8394
哨兵三配置sentinel3.conf
# Example sentinel.conf # port <sentinel-port> port 26373 # 守护进程模式 daemonize yes # 指明日志文件名 logfile "./sentinel3.log" # 工作路径,sentinel一般指定/tmp比较简单 dir ./ # 哨兵监控这个master,在至少quorum个哨兵实例都认为master down后把master标记为odown # (objective down客观down;相对应的存在sdown,subjective down,主观down)状态。 # slaves是自动发现,所以你没必要明确指定slaves。 sentinel monitor TestMaster 127.0.0.1 7003 1 # master或slave多长时间(默认30秒)不能使用后标记为s_down状态。 sentinel down-after-milliseconds TestMaster 1500 # 若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。 sentinel failover-timeout TestMaster 10000 # 设置master和slaves验证密码 sentinel auth-pass TestMaster 0234kz9*l sentinel config-epoch TestMaster 15 sentinel leader-epoch TestMaster 8394 # #除了当前哨兵, 还有哪些在监控这个master的哨兵 sentinel known-sentinel TestMaster 127.0.0.1 26371 b780bbc20fdea6d3789637053600c5fc58dd0690 sentinel known-sentinel TestMaster 127.0.0.1 26372 0aca3a57038e2907c8a07be2b3c0d15171e44da5 sentinel current-epoch 8394
在sentinel中查看所监控的master和slave
[root@rocket sentinel]# ./redis-cli -p 26371
127.0.0.1:26371> SENTINEL masters
1) 1) "name"
2) "TestMaster"
3) "ip"
4) "127.0.0.1"
5) "port"
6) "7003"
7) "runid"
8) "de0896e3799706bda49cb92048776e233841e25d"
9) "flags"
10) "master"
127.0.0.1:26371> SENTINEL slaves TestMaster
1) 1) "name"
2) "127.0.0.1:8003"
3) "ip"
4) "127.0.0.1"
5) "port"
6) "8003"
7) "runid"
8) "9b2a75596c828d6d605cc8529e96edcf951de25d"
9) "flags"
10) "slave"
查看当前的master
127.0.0.1:26371> SENTINEL get-master-addr-by-name TestMaster
1) "127.0.0.1"
2) "7003"
停掉master,查看容灾切换情况[root@rocket master]# ps axu|grep redis
root 24000 0.2 0.9 137356 9556 ? Ssl Jan12 0:30 ./redis-server *:7003
root 24240 0.2 0.7 137356 7504 ? Ssl Jan12 0:26 ./redis-server *:8003
root 24873 0.3 0.7 137356 7524 ? Ssl 01:31 0:25 ../redis-sentinel *:26371
root 24971 0.3 0.7 137356 7524 ? Ssl 01:33 0:25 ../redis-sentinel *:26372
root 24981 0.3 0.7 137356 7520 ? Ssl 01:33 0:25 ../redis-sentinel *:26373
root 24995 0.0 0.5 19404 5080 pts/2 S+ 01:34 0:00 ./redis-cli -p 26371
root 25969 0.0 0.0 103252 844 pts/0 S+ 03:33 0:00 grep redis
[root@rocket master]# kill -QUIT 24000
再查看master,发现已经master已经切换为原来的slave
127.0.0.1:26371> SENTINEL get-master-addr-by-name TestMaster
1) "127.0.0.1"
2) "8003"
查看sentinel日志
启动原来的master,发现变成了slave
[root@rocket master]# ./redis-server ./redis.conf
127.0.0.1:26371> SENTINEL slaves TestMaster
1) 1) "name"
2) "127.0.0.1:7003"
3) "ip"
4) "127.0.0.1"
5) "port"
6) "7003"
发现主从发生了对调。
sentinel自动发现