redis cluster 4.0.9 之二: failover
阿新 • • 發佈:2018-12-25
os: centos7.4
redis:4.0.9
ruby:2.3.4
ip 規劃
redis1 192.168.56.101
redis2 192.168.56.102
用兩臺虛擬機器模擬6個redis節點。
分別為
192.168.56.101 的 9001、9002、9003 埠,
192.168.56.102 的 9001、9002、9003 埠。
連線redis
# redis-cli -h 192.168.56.101 -p 9001 -c 192.168.56.101:9001> 192.168.56.101:9001> 192.168.56.101:9001> cluster info cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:6 cluster_size:3 cluster_current_epoch:6 cluster_my_epoch:1 cluster_stats_messages_ping_sent:23175 cluster_stats_messages_pong_sent:25275 cluster_stats_messages_sent:48450 cluster_stats_messages_ping_received:25270 cluster_stats_messages_pong_received:23175 cluster_stats_messages_meet_received:5 cluster_stats_messages_received:48450 192.168.56.101:9001> cluster nodes cf22edbc6463b8b31536819297ac50e9e39175ad 192.168.56.102:
[email protected] slave 8240d131c58c8b687c11462e03825bdba00af53b 0 1526649623970 6 connected 8240d131c58c8b687c11462e03825bdba00af53b 192.168.56.101:[email protected] myself,master - 0 1526649623000 1 connected 0-5460 12e2353c9f0b085d2684da46ba0dc69575d68603 192.168.56.102:[email protected] slave e38d78fc68b69d4e5f347cf96f31a9cb6a02dccf 0 1526649621000 7 connected 2b48fd08a8ec55eba5bfa0d163d02c8462637302 192.168.56.102:[email protected] slave 0bdd8387a662984e95f5103522f52e75eceaab69 0 1526649624972 5 connected 0bdd8387a662984e95f5103522f52e75eceaab69 192.168.56.101:[email protected] master - 0 1526649622000 2 connected 10923-16383 e38d78fc68b69d4e5f347cf96f31a9cb6a02dccf 192.168.56.101:[email protected] master - 0 1526649622963 7 connected 5461-10922
kill某個redis master 程序
# ps -ef|grep -i redis
root 11301 1 0 21:09 ? 00:00:00 redis-server 192.168.56.101:9001 [cluster]
root 11330 1 0 21:10 ? 00:00:00 redis-server 192.168.56.101:9002 [cluster]
root 11340 1 0 21:10 ? 00:00:00 redis-server 192.168.56.101:9003 [cluster]
root 11358 1851 0 21:11 pts/0 00:00:00 redis-cli -h 192.168.56.101 -p 9001 -c
root 11484 5873 0 21:21 pts/1 00:00:00 grep --color=auto -i redis
# kill 11301
192.168.56.101:9002> cluster nodes
8240d131c58c8b687c11462e03825bdba00af53b 192.168.56.101:[email protected] master,fail - 1526649753764 1526649753061 1 disconnected
12e2353c9f0b085d2684da46ba0dc69575d68603 192.168.56.102:[email protected] slave e38d78fc68b69d4e5f347cf96f31a9cb6a02dccf 0 1526649779186 7 connected
0bdd8387a662984e95f5103522f52e75eceaab69 192.168.56.101:[email protected] myself,master - 0 1526649778000 2 connected 10923-16383
e38d78fc68b69d4e5f347cf96f31a9cb6a02dccf 192.168.56.101:[email protected] master - 0 1526649776000 7 connected 5461-10922
2b48fd08a8ec55eba5bfa0d163d02c8462637302 192.168.56.102:[email protected] slave 0bdd8387a662984e95f5103522f52e75eceaab69 0 1526649777173 5 connected
cf22edbc6463b8b31536819297ac50e9e39175ad 192.168.56.102:[email protected] master - 0 1526649778179 8 connected 0-5460
可以看到 192.168.56.101:9001 現在是 master,fail 狀態
kill 之前redis的狀態
master 192.168.56.101:9001、192.168.56.101:9002、192.168.56.101:9003
slave 192.168.56.102:9001、192.168.56.102:9002、192.168.56.102:9003
kill 之後redis的狀態
master 192.168.56.101:9002、192.168.56.101:9003、192.168.56.102:9003
slave 192.168.56.102:9001、192.168.56.102:9002
master,fail 192.168.56.101:9001
可以看出,192.168.56.102:9003 充當了新的master,也可以推斷kill之前,192.168.56.102:9003 是 192.168.56.101:9001 的slave
從輸出求證,確實是這樣
cf22edbc6463b8b31536819297ac50e9e39175ad 192.168.56.102:[email protected] slave 8240d131c58c8b687c11462e03825bdba00af53b 0 1526649623970 6 connected
8240d131c58c8b687c11462e03825bdba00af53b 192.168.56.101:[email protected] myself,master - 0 1526649623000 1 connected 0-5460
注意 8240d131c58c8b687c11462e03825bdba00af53b
redis的slave在master down後,可以自動提升為master。這個很重要。
重新啟動被kill的那個redis
# redis-server /usr/redis/redis-cluster-data/9001/redis.conf
[[email protected] 9001]# redis-cli -h 192.168.56.101 -p 9001 -c
192.168.56.101:9001>
192.168.56.101:9001> cluster nodes
12e2353c9f0b085d2684da46ba0dc69575d68603 192.168.56.102:[email protected] slave e38d78fc68b69d4e5f347cf96f31a9cb6a02dccf 0 1526650968543 7 connected
2b48fd08a8ec55eba5bfa0d163d02c8462637302 192.168.56.102:[email protected] slave 0bdd8387a662984e95f5103522f52e75eceaab69 0 1526650969546 5 connected
cf22edbc6463b8b31536819297ac50e9e39175ad 192.168.56.102:[email protected] master - 0 1526650967000 8 connected 0-5460
8240d131c58c8b687c11462e03825bdba00af53b 192.168.56.101:[email protected] myself,slave cf22edbc6463b8b31536819297ac50e9e39175ad 0 1526650967000 1 connected
e38d78fc68b69d4e5f347cf96f31a9cb6a02dccf 192.168.56.101:[email protected] master - 0 1526650969000 7 connected 5461-10922
0bdd8387a662984e95f5103522f52e75eceaab69 192.168.56.101:[email protected] master - 0 1526650966534 2 connected 10923-16383
192.168.56.101:9001> set peiyb1 abc
-> Redirected to slot [6161] located at 192.168.56.101:9003
OK
192.168.56.101:9001>
此時,redis各節點的狀態為
master 192.168.56.101:9002、192.168.56.101:9003、192.168.56.102:9003
slave 192.168.56.102:9001、192.168.56.102:9002、192.168.56.101:9001
可以看出,新啟動的redis 192.168.56.101:[email protected] 狀態為slave,並沒有搶奪master的許可權。
此外,在slave上操作 set 時,能自動計算 hash slot ,拋給對應的master執行。