1. 程式人生 > >Redis cluster日常管理【二】

Redis cluster日常管理【二】

前面在Redis叢集架構搭建詳解博文中搭建了一個redis叢集,這篇博文就是在那個redis叢集基礎上進行操作的。

一、新增新節點

  1. 在10.220.5.172上在新配置兩個例項

①新增配置

# cd /redis/
# mkdir 6379 6380
# cp 26379/redis-26379.conf  6379/redis-6379.conf  && sed -i "s/26379/6379/g" 6379/redis-6379.conf
# cp 26380/redis-26380.conf  6380/redis-6380.conf  && sed -i "s/26380/6380/g" 6380/redis-6380.conf

②啟動

# /root/redis-4.0.11/src/redis-server /redis/6380/redis-6380.conf
# /root/redis-4.0.11/src/redis-server /redis/6379/redis-6379.conf

③檢視是否啟動成功

# ss -tnl
State      Recv-Q Send-Q        Local Address:Port                       Peer Address:Port              
LISTEN     0      128            10.220.5.172:16380                                 *:*                  
LISTEN     0      128            10.220.5.172:36380                                 *:*                  
LISTEN     0      128            10.220.5.172:6379                                  *:*                  
LISTEN     0      128            10.220.5.172:26379                                 *:*                  
LISTEN     0      128            10.220.5.172:6380                                  *:*                  
LISTEN     0      128            10.220.5.172:26380                                 *:*                  
LISTEN     0      128                       *:22                                    *:*                  
LISTEN     0      100               127.0.0.1:25                                    *:*                  
LISTEN     0      128            10.220.5.172:16379                                 *:*                  
LISTEN     0      128            10.220.5.172:36379                                 *:*                  
LISTEN     0      128                      :::22                                   :::*                  
LISTEN     0      100                     ::1:25                                   :::*      
  1. 新增主節點

① 在10.220.5.173節點執行如下命令

# /root/redis-4.0.11/src/redis-trib.rb add-node 10.220.5.172:6379 10.220.5.171:16379

說明:10.220.5.172:6379是新增節點,後面的可以是叢集中任意一箇舊節點

>>> Adding node 10.220.5.172:6379 to cluster 10.220.5.171:16379
>>> Performing Cluster Check (using node 10.220.5.171:16379)
M: 56d2348f3eb66f669405b8064fb8c068cca94105 10.220.5.171:16379
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
M: 93a37f72f33752779183d70835a101c086bbad01 10.220.5.172:26379
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 2c978644384445bf1bdfd3ed2b585f949f574f63 10.220.5.172:26380
   slots: (0 slots) slave
   replicates 56d2348f3eb66f669405b8064fb8c068cca94105
S: 8540a124e3a876ad2357d6bd10e09091612b3291 10.220.5.173:36380
   slots: (0 slots) slave
   replicates 93a37f72f33752779183d70835a101c086bbad01
S: 35c6cc6fb84b3c1a76e4f225bb8477f519abb559 10.220.5.171:16380
   slots: (0 slots) slave
   replicates 66d902b3ad7b4342720f5aeb98dfffa2b9c013fc
M: 66d902b3ad7b4342720f5aeb98dfffa2b9c013fc 10.220.5.173:36379
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 10.220.5.172:6379 to make it join the cluster.
[OK] New node added correctly.

②檢查一下是否加入成功

#  redis-4.0.11/src/redis-trib.rb  check 10.220.5.172:26379
>>> Performing Cluster Check (using node 10.220.5.172:26379)
M: 93a37f72f33752779183d70835a101c086bbad01 10.220.5.172:26379
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 8540a124e3a876ad2357d6bd10e09091612b3291 10.220.5.173:36380
   slots: (0 slots) slave
   replicates 93a37f72f33752779183d70835a101c086bbad01
S: 2c978644384445bf1bdfd3ed2b585f949f574f63 10.220.5.172:26380
   slots: (0 slots) slave
   replicates 56d2348f3eb66f669405b8064fb8c068cca94105
M: f523db5333150607a347fa9e55a282bcbe67b5aa 10.220.5.172:6379
   slots: (0 slots) master
   0 additional replica(s)
M: 66d902b3ad7b4342720f5aeb98dfffa2b9c013fc 10.220.5.173:36379
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
M: 56d2348f3eb66f669405b8064fb8c068cca94105 10.220.5.171:16379
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: 35c6cc6fb84b3c1a76e4f225bb8477f519abb559 10.220.5.171:16380
   slots: (0 slots) slave
   replicates 66d902b3ad7b4342720f5aeb98dfffa2b9c013fc
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
可以看到10.220.5.172:6379已經加入到了叢集中並且還是主節點其id為:f523db5333150607a347fa9e55a282bcbe67b5aa
  1. 新增從節點

①在10.220.5.173節點執行如下命令

# /root/redis-4.0.11/src/redis-trib.rb  add-node --slave --master-id f523db5333150607a347fa9e55a282bcbe67b5aa 10.220.5.172:6380 10.220.5.171:16380

說明:--slave,表示新增的是從節點
--master-id,後面跟的是主節點的node-d這裡是簽名上一步新增的那個6379的node id
10.220.5.172:6380,是即將新增入叢集的節點,最後面的是原叢集的任意一個節點即可

>>> Adding node 10.220.5.172:6380 to cluster 10.220.5.171:16380
>>> Performing Cluster Check (using node 10.220.5.171:16380)
S: 35c6cc6fb84b3c1a76e4f225bb8477f519abb559 10.220.5.171:16380
   slots: (0 slots) slave
   replicates 66d902b3ad7b4342720f5aeb98dfffa2b9c013fc
M: 93a37f72f33752779183d70835a101c086bbad01 10.220.5.172:26379
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 8540a124e3a876ad2357d6bd10e09091612b3291 10.220.5.173:36380
   slots: (0 slots) slave
   replicates 93a37f72f33752779183d70835a101c086bbad01
S: 2c978644384445bf1bdfd3ed2b585f949f574f63 10.220.5.172:26380
   slots: (0 slots) slave
   replicates 56d2348f3eb66f669405b8064fb8c068cca94105
M: 56d2348f3eb66f669405b8064fb8c068cca94105 10.220.5.171:16379
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
M: 66d902b3ad7b4342720f5aeb98dfffa2b9c013fc 10.220.5.173:36379
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
M: f523db5333150607a347fa9e55a282bcbe67b5aa 10.220.5.172:6379
   slots: (0 slots) master
   0 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 10.220.5.172:6380 to make it join the cluster.
Waiting for the cluster to join.......
>>> Configure node as replica of 10.220.5.172:6379.
[OK] New node added correctly.
  1. 重新分配slot

新增加的節點是沒有slots的M: f523db5333150607a347fa9e55a282bcbe67b5aa 10.220.5.172:6379 slots: (0 slots) master主節點沒有slots存取資料的時候就不會被選中,為其分配slots的方式有兩種:

  • 所有節點的slots收回重新分配
  • 從某個節點抽取部分slots分配給新節點

①在10.220.5.173節點執行下面命令

# /root/redis-4.0.11/src/redis-trib.rb reshard 10.220.5.172:6379
How many slots do you want to move (from 1 to 16384)? 1000  >>>設定slot個數
What is the receiving node ID?  f523db5333150607a347fa9e55a282bcbe67b5aa  >>>新節點的node  id 這裡就是那個新新增的10.220.5.172:6379的node id
Source node #1:all >>>表示全部節點重新分配槽,此處輸入某節點的node id的話表示從某個節點抽取slots分配給新節點
Do you want to proceed with the proposed reshard plan (yes/no)? yes  >>>確認重新分配
  1. 檢視一下叢集的狀態
 redis-4.0.11/src/redis-trib.rb  check 10.220.5.172:26379
>>> Performing Cluster Check (using node 10.220.5.172:26379)
M: 93a37f72f33752779183d70835a101c086bbad01 10.220.5.172:26379
   slots:6129-10922 (4794 slots) master
   1 additional replica(s)
S: 76b5218ca0729fbe305c65a8a4aefae4462a58fc 10.220.5.172:6380
   slots: (0 slots) slave
   replicates f523db5333150607a347fa9e55a282bcbe67b5aa
S: 8540a124e3a876ad2357d6bd10e09091612b3291 10.220.5.173:36380
   slots: (0 slots) slave
   replicates 93a37f72f33752779183d70835a101c086bbad01
S: 2c978644384445bf1bdfd3ed2b585f949f574f63 10.220.5.172:26380
   slots: (0 slots) slave
   replicates 56d2348f3eb66f669405b8064fb8c068cca94105
M: f523db5333150607a347fa9e55a282bcbe67b5aa 10.220.5.172:6379
   slots:0-665,5461-6128,10923-11588 (2000 slots) master
   1 additional replica(s)

   可以看到我們新加入的節點已經被分配了slots,我這裡為了演示第四步做了兩次所以我這裡是有2000個slots

M: 66d902b3ad7b4342720f5aeb98dfffa2b9c013fc 10.220.5.173:36379
   slots:11589-16383 (4795 slots) master
   1 additional replica(s)
M: 56d2348f3eb66f669405b8064fb8c068cca94105 10.220.5.171:16379
   slots:666-5460 (4795 slots) master
   1 additional replica(s)
S: 35c6cc6fb84b3c1a76e4f225bb8477f519abb559 10.220.5.171:16380
   slots: (0 slots) slave
   replicates 66d902b3ad7b4342720f5aeb98dfffa2b9c013fc
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

二、刪除節點

刪除從節點,10.220.5.172:6380

# /root/redis-4.0.11/src/redis-trib.rb del-node 10.220.5.171:16379 76b5218ca0729fbe305c65a8a4aefae4462a58fc

說明:
10.220.5.171:16379,叢集入口
 76b5218ca0729fbe305c65a8a4aefae4462a58fc,要刪除的10.220.5.176:6380節點的node id

>>> Removing node 76b5218ca0729fbe305c65a8a4aefae4462a58fc from cluster 10.220.5.172:6380
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.

刪除主節點,10.220.5.172:6379
如果主節點有從節點,將從節點轉移到其他主節點,如果主節點有slot,去掉分配的slot然後再刪除主節點

# /root/redis-4.0.11/src/redis-trib.rb reshard 10.220.5.172:6379
How many slots do you want to move (from 1 to 16384)? 1000  >>>這裡寫被刪除的master的全部slot數量
What is the receiving node ID? 56d2348f3eb66f669405b8064fb8c068cca94105  >>>接收被刪除節點的slot的master的node id
Source node #1:f523db5333150607a347fa9e55a282bcbe67b5aa >>>被刪除的master的node-id
Source node #2:done
Do you want to proceed with the proposed reshard plan (yes/no)? yes  >>>是否希望取消slot以後,reshard

#刪除節點
# /root/redis-4.0.11/src/redis-trib.rb del-node 10.220.5.171:16379 f523db5333150607a347fa9e55a282bcbe67b5aa
>>> Removing node f523db5333150607a347fa9e55a282bcbe67b5aa from cluster 10.220.5.171:16379
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.

做到這裡開篇新新增的一個master和一個slave節點都被刪除了,也就是回到這篇博文開始沒有新增節點的狀態了。