天天看點

Redis Cluster線上遷移

由于之前的redis cluster實體硬體性能不足。決定更新到更好的伺服器上。

考慮到redis是核心生産資料庫,決定線上遷移,遷移過程,不中斷服務。

下面是測試環境的完成遷移步驟:

1. 原環境(測試環境,沒有建立slave)

1

2

3

<code>10.21.14.251:7000</code>

<code>10.21.14.251:7001</code>

<code>10.21.14.251:7002</code>

2. 在新主機上,啟動三個redis執行個體

<code>10.21.10.120:7000</code>

<code>10.21.10.120:7001</code>

<code>10.21.10.120:7002</code>

3. 将三個redis,都添加到叢集中. 指令格式redis-trib.rb add-node &lt;新增節點名&gt; &lt; 原叢集節點名&gt;

<code>./redis-trib.rb </code><code>add</code><code>-node  10.21.10.120:7000  10.21.14.251:7000</code>

<code>./redis-trib.rb </code><code>add</code><code>-node  10.21.10.120:7001  10.21.14.251:7000</code>

<code>./redis-trib.rb </code><code>add</code><code>-node  10.21.10.120:7002  10.21.14.251:7000</code>

4. 确認添加成功之後,開始reshard slot

<code>./redis-trib.rb reshard 10.21.10.120:7000</code>

5. 遇到點問題,由于網絡逾時等原因,導緻resharding中斷。然後出現兩邊都有slot的情況,需要通過fix的方式來修複

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

<code>[redis@ip-10-21-14-251 redis]$ ./redis-trib.rb reshard 10.21.10.120:7000</code>

<code>&gt;&gt;&gt; Performing Cluster </code><code>Check</code> <code>(using node 10.21.10.120:7000)</code>

<code>M: 4422ab38377fa8828e0f7884570b3b482a66496b 10.21.10.120:7000</code>

<code>   </code><code>slots:5026-5460 (435 slots) master</code>

<code>   </code><code>0 additional replica(s)</code>

<code>M: 5b38e63a1091baa3a871a52275489a2aa1d28bfb 10.21.10.120:7002</code>

<code>   </code><code>slots:894-3397 (2504 slots) master</code>

<code>M: bb1572074d41254e5b4d5aae5c52e54f5129d6d5 10.21.14.251:7001</code>

<code>   </code><code>slots:3398-4999,5461-15922 (12064 slots) master</code>

<code>M: 396a7fbd2ec61752f9e848a1d8cc7b405aef0356 10.21.14.251:7000</code>

<code>   </code><code>slots: (0 slots) master</code>

<code>M: 9f215e7e4b511f3d2bbf5d734731899b71a62a3b 10.21.10.120:7001</code>

<code>   </code><code>slots:0-893,5000-5025,15923-15948 (946 slots) master</code>

<code>M: 0c9b383f65ae4fefc5e02617fb76a845d7510a53 10.21.14.251:7002</code>

<code>   </code><code>slots:15949-16383 (435 slots) master</code>

<code>[OK] </code><code>All</code> <code>nodes agree about slots configuration.</code>

<code>&gt;&gt;&gt; </code><code>Check</code> <code>for</code> <code>open</code> <code>slots...</code>

<code>[WARNING] Node 10.21.10.120:7002 has slots </code><code>in</code> <code>importing state (3398).</code>

<code>[WARNING] Node 10.21.14.251:7001 has slots </code><code>in</code> <code>migrating state (3398).</code>

<code>[WARNING] The following slots are </code><code>open</code><code>: 3398</code>

<code>&gt;&gt;&gt; </code><code>Check</code> <code>slots coverage...</code>

<code>[OK] </code><code>All</code> <code>16384 slots covered.</code>

<code>*** Please fix your cluster problems before resharding     &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;</code>

6. 可以使用下面指令進行叢集檢查

<code>./redis-trib.rb </code><code>check</code> <code>10.21.10.120:7000</code>

7. 執行下面指令進行修複,然後就可以繼續reshard slot了

<code>./redis-trib.rb fix 10.21.10.120:7000</code>

8. 全部slot遷移完成

<code>$ ./redis-trib.rb </code><code>check</code> <code>10.21.10.120:7000</code>

<code>   </code><code>slots:3399-4999,5026-7332 (3908 slots) master</code>

<code>   </code><code>slots:894-3398,7333-15332,15949-16383 (10940 slots) master</code>

<code>   </code><code>slots:0-893,5000-5025,15333-15948 (1536 slots) master</code>

确認一下狀态

<code>[redis@ip-10-21-14-251 redis]$ ./redis-cli -p 7000 cluster nodes</code>

<code>bb1572074d41254e5b4d5aae5c52e54f5129d6d5 10.21.14.251:7001 master - 0 1509611814919 6 connected</code>

<code>9f215e7e4b511f3d2bbf5d734731899b71a62a3b 10.21.10.120:7001 master - 0 1509611811917 14 connected 0-893 5000-5025 15333-15948</code>

<code>5b38e63a1091baa3a871a52275489a2aa1d28bfb 10.21.10.120:7002 master - 0 1509611815923 13 connected 894-3398 7333-15332 15949-16383</code>

<code>396a7fbd2ec61752f9e848a1d8cc7b405aef0356 10.21.14.251:7000 myself,master - 0 0 1 connected</code>

<code>4422ab38377fa8828e0f7884570b3b482a66496b 10.21.10.120:7000 master - 0 1509611813919 12 connected 3399-4999 5026-7332</code>

<code>0c9b383f65ae4fefc5e02617fb76a845d7510a53 10.21.14.251:7002 master - 0 1509611812917 3 connected</code>

9. 确認狀态OK的話,開始删除節點

<code> </code><code>./redis-trib.rb del-node 10.21.14.251:7000 396a7fbd2ec61752f9e848a1d8cc7b405aef0356</code>

<code> </code><code>./redis-trib.rb del-node 10.21.14.251:7001 bb1572074d41254e5b4d5aae5c52e54f5129d6d5</code>

<code> </code><code>./redis-trib.rb del-node 10.21.14.251:7002 0c9b383f65ae4fefc5e02617fb76a845d7510a53</code>

10. 幹掉10.21.14.251:7002成功,

<code> </code><code>[redis@ip-10-21-14-251 redis]$ ./redis-trib.rb del-node 10.21.14.251:7002 0c9b383f65ae4fefc5e02617fb76a845d7510a53</code>

<code>&gt;&gt;&gt; Removing node 0c9b383f65ae4fefc5e02617fb76a845d7510a53 </code><code>from</code> <code>cluster 10.21.14.251:7002</code>

<code>&gt;&gt;&gt; Sending CLUSTER FORGET messages </code><code>to</code> <code>the cluster...</code>

<code>&gt;&gt;&gt; SHUTDOWN the node.</code>

<code>[envuser@ip-10-21-14-251 redis]$ ./redis-trib.rb </code><code>check</code> <code>10.21.10.120:7000</code>

狀态檢查

<code>bb1572074d41254e5b4d5aae5c52e54f5129d6d5 10.21.14.251:7001 master - 0 1509611900094 6 connected</code>

<code>9f215e7e4b511f3d2bbf5d734731899b71a62a3b 10.21.10.120:7001 master - 0 1509611902100 14 connected 0-893 5000-5025 15333-15948</code>

<code>5b38e63a1091baa3a871a52275489a2aa1d28bfb 10.21.10.120:7002 master - 0 1509611901098 13 connected 894-3398 7333-15332 15949-16383</code>

<code>4422ab38377fa8828e0f7884570b3b482a66496b 10.21.10.120:7000 master - 0 1509611899093 12 connected 3399-4999 5026-7332</code>

根據上面步驟,删除剩餘節點即可。

經過測試,應用在遷移過程中,沒有受到任何影響。但是應用連接配接池的IP需要找機會增加10.21.10.120。

本文轉自 hsbxxl 51CTO部落格,原文連結:http://blog.51cto.com/hsbxxl/1978491,如需轉載請自行聯系原作者

繼續閱讀