1. 程式人生 > >redis叢集3 2臺機器遷移為3臺機器

redis叢集3 2臺機器遷移為3臺機器

環境

系統:Centos6.6
軟體:redis 3.0.3 

背景

因為2個機器搭建的redis叢集一旦1臺機器損壞,叢集依然不可用,為了解決該問題,決定新增一個機器,組成3臺機器的高可用環境。

叢集節點:

把原來的5.17 5.18 的7002埠去掉,新增5.16的7000 7001
遷移前主機   埠      遷移後主機   埠
10.112.5.17 7000        10.112.5.16 7000
10.112.5.17 7001        10.112.5.16 7001
10.112.5.17 7002        10.112.5.17 7000
10.112.5.18 7000        10.112.5.17 7001
10.112.5.18 7001        10.112.5.18 7000
10.112.5.18 7002        10.112.5.18 7001

2個機器的原始狀態:

[[email protected] ~]$ redis-cli  -p 7000 -c  cluster nodes|awk '{print $1,$2,$3,$4,$NF}'| sort -k2
231b544622793b0b69e88a286ac8b46d211c8172 10.112.5.17:7000 myself,master - 5461-10922936482ede8b9e8b94eeb7d947e51ef635e5173df 10.112.5.17:7001 slave c3312b79d40e6b90eb856c3e52d0fae21ba217e7 connected
2304aalsdkjfalsjdflkajsfj23rklwj10932je9 10.112.5.17:7002 slave 231b544622793b0b69e88a286ac8b46d211c8172 connected c3312b79d40e6b90eb856c3e52d0fae21ba217e7 10.112.5.18:7000 master - 0-5460 fb13b382748edee5e329db61af6ccbe5a426dade 10.112.5.18:7001 slave e442abf8ec244a697a203c67092fc184b45220bb connected e442abf8ec244a697a203c67092fc184b45220bb
10.112.5.18:7002 master - 10923-16383

因為需要摘除7002節點,所以找到7002節點

[[email protected] ~]$ redis-cli  -p 7000 -c  cluster nodes|awk '{print $1,$2,$3,$4,$NF}'| sort -k2|grep :70022304aalsdkjfalsjdflkajsfj23rklwj10932je9 10.112.5.17:7002 slave 231b544622793b0b69e88a286ac8b46d211c8172 connected
e442abf8ec244a697a203c67092fc184b45220bb 10.112.5.18:7002 master - 10923-16383

從上面的節點資訊可以看到

10.112.5.17:7002是slave節點,可以直接摘除, 
10.112.5.18:7002是master節點,需要先變成從節點,再進行摘除:

現在先把10.112.5.18:7002變成從節點

1 先kill掉10.112.5.18:7002的程序,讓salve這個節點下線,讓他的slave節點變成主
    ps -ef|grep 7002 |awk '{print $2}'|kill 
2.檢視節點狀態
    redis-cli  -c -p 7000 cluster nodes
    發現10.112.5.18:7002 已經下線,並且10.112.5.18:7001 已經變成了主節點
3.啟動10.112.5.18:7002 ,讓他也變成從節點
    redis-server 7002/7002.conf
    redis-cli  -c -p 7000 cluster nodes
    檢視節點狀態後,10.112.5.18:7002已經變成從節點

此時2個節點已經變成從節點,可以直接執行摘除操作。

為了安全考慮,先把2個新的節點新增到叢集,再執行節點摘除操作。

[[email protected] ~]$ redis-cli  -p 7000 -c  cluster nodes|awk '{print $1,$2,$3,$4,$NF}'| sort -k2
231b544622793b0b69e88a286ac8b46d211c8172 10.112.5.17:7000 myself,master - 5461-10922936482ede8b9e8b94eeb7d947e51ef635e5173df 10.112.5.17:7001 slave c3312b79d40e6b90eb856c3e52d0fae21ba217e7 connected
2304aalsdkjfalsjdflkajsfj23rklwj10932je9 10.112.5.17:7002 slave 231b544622793b0b69e88a286ac8b46d211c8172 connected
c3312b79d40e6b90eb856c3e52d0fae21ba217e7 10.112.5.18:7000 master - 0-5460
fb13b382748edee5e329db61af6ccbe5a426dade 10.112.5.18:7001 master - 10923-16383
e442abf8ec244a697a203c67092fc184b45220bb 10.112.5.18:7002 slave fb13b382748edee5e329db61af6ccbe5a426dade connected

新的節點是為了替換2個7002埠的從節點,所以找到2個7002埠對應的2個主節點:

231b544622793b0b69e88a286ac8b46d211c8172 10.112.5.17:7000 myself,master - 5461-10922
fb13b382748edee5e329db61af6ccbe5a426dade 10.112.5.18:7001 master - 10923-16383

執行新增節點操作:

命令用法:redis-trib.rb add-node newip:newport IP:port 
redis-trib.rb add-node --slave --master-id 231b544622793b0b69e88a286ac8b46d211c8172 10.112.5.16:7000 10.112.5.17:7000
redis-trib.rb add-node --slave --master-id fb13b382748edee5e329db61af6ccbe5a426dade 10.112.5.16:7001 10.112.5.17:7000

新增2個新的從節點後,檢視狀態,一共8個節點

[[email protected] ~]$ redis-cli  -p 7000 -c  cluster nodes|awk '{print $1,$2,$3,$4,$NF}'| sort -k2
e442abf8ec244a697a203c67092fc184b45220bb 10.112.5.16:7001 slave fb13b382748edee5e329db61af6ccbe5a426dade connected
341a85b5ca42f8bb7baf707579025fa352c822b6 10.112.5.16:7000 slave 231b544622793b0b69e88a286ac8b46d211c8172 connected
231b544622793b0b69e88a286ac8b46d211c8172 10.112.5.17:7000 myself,master - 5461-10922936482ede8b9e8b94eeb7d947e51ef635e5173df 10.112.5.17:7001 slave c3312b79d40e6b90eb856c3e52d0fae21ba217e7 connected
2304aalsdkjfalsjdflkajsfj23rklwj10932je9 10.112.5.17:7002 slave 231b544622793b0b69e88a286ac8b46d211c8172 connected
c3312b79d40e6b90eb856c3e52d0fae21ba217e7 10.112.5.18:7000 master - 0-5460
fb13b382748edee5e329db61af6ccbe5a426dade 10.112.5.18:7001 master - 10923-16383
e442abf8ec244a697a203c67092fc184b45220bb 10.112.5.18:7002 slave fb13b382748edee5e329db61af6ccbe5a426dade connected

刪除2個7002埠的幾點:

redis-trib.rb del-node 10.112.5.17:7001 e442abf8ec244a697a203c67092fc184b45220bb
redis-trib.rb del-node 10.112.5.17:7001 fb13b382748edee5e329db61af6ccbe5a426dade

遷移後的節點狀態:

[[email protected] ~]$ redis-cli  -p 7000 -c  cluster nodes|awk '{print $1,$2,$3,$4,$NF}'
e442abf8ec244a697a203c67092fc184b45220bb 10.112.5.16:7001 slave fb13b382748edee5e329db61af6ccbe5a426dade connected
936482ede8b9e8b94eeb7d947e51ef635e5173df 10.112.5.17:7001 slave c3312b79d40e6b90eb856c3e52d0fae21ba217e7 connected
231b544622793b0b69e88a286ac8b46d211c8172 10.112.5.17:7000 myself,master - 5461-10922341a85b5ca42f8bb7baf707579025fa352c822b6 10.112.5.16:7000 slave 231b544622793b0b69e88a286ac8b46d211c8172 connected
c3312b79d40e6b90eb856c3e52d0fae21ba217e7 10.112.5.18:7000 master - 0-5460
fb13b382748edee5e329db61af6ccbe5a426dade 10.112.5.18:7001 master - 10923-16383