redis cluster集羣架構詳解(二十)- redis cluster實驗:master水平擴容-支撐海量數據處理

5.12. redis cluster實驗:master水平擴容-支撐海量數據處理

redis cluster通過master水平擴容來支撐更高的讀寫吞吐+海量數據。

​ redis cluster模式下,不建議做物理的讀寫分離,我們建議通過master的水平擴容,來橫向擴展讀寫吞吐量,並支撐更多的海量數據。

​ 6G內存的redis,在fork類操作的時候很耗時,會導致請求延時的問題,如果擴容到5臺master,能支撐總緩存數據量可達到30G,如果繼續擴展到100臺,能支撐緩存就達到600G,繼續擴展,就能達到1T+,這樣就能真正支撐海量數據的處理。

5.12.1. 加入新master

加入新master

​ 以上實驗,我們都是使用同一臺機器,上面分別啓動了端口號爲7001、7002、7003、7004、7005、7006的redis,並將這6個redis 創建redis 集羣。

接下來還是在這臺機器上,創建端口號爲7007的redis。
  • 將原先的redis配置文件7006.conf文件拷貝一份,修改文件名爲7007.conf,並將之前配置的slaveof註釋掉(如果之前配置了slaveof,就註釋掉)
  • 將 7007.conf 放到/etc/redis/redis-cluster-7007目錄下。
  • 將7007.conf文件按照以下進行配置,端口port和綁定(bind)的IP修改爲對應的端口和ip,詳見配置請參考《redis集羣安裝》

手動啓動此新的redis實例,在7007端口上

[root@cache01 redis]# redis-server ./redis-cluster-7007/7007.conf 

將新增master節點添加到redis cluster中

[root@cache01 redis]# redis-cli --cluster add-node 192.168.75.187:7007 192.168.75.187:7003

運行日誌如下:

在這裏插入圖片描述

通過日誌,我們看到,新的master節點已經添加進集羣。

檢測redis cluster集羣:

[root@cache01 redis]# redis-cli --cluster check 192.168.75.187:7001

運行日誌如下:

在這裏插入圖片描述

通過檢測,發現了新的master節點 192.168.75.187:7007 ,但是此節點slot爲0 。

連接到新的redis實例上,cluster nodes,確認自己是否加入了集羣,作爲了一個新的master。

在這裏插入圖片描述

5.12.2. reshard數據到新節點

reshard一些數據到新節點

resharding的意思就是把一部分hash slot從一些node上遷移到另外一些node上

redis-cli --cluster reshard 192.168.75.187:7001 --cluster-from all --cluster-to 62cb7cf009d812b0854ce6fe54ea863805f3028d --cluster-slots 1000

要把之前3個master上的slot,拿出1000個slot放到新節點192.168.75.187:7007上。

執行後再一次檢查:

[root@cache01 redis]# redis-cli --cluster check 192.168.75.187:7001

在這裏插入圖片描述

7007上的slot槽:(332-0) + 1 +(5794-5461) + 1 + (11255-10923) + 1 = 1000;

slot已經從7002、7003、7004三個節點共遷移了1000個slot到7007上。

5.12.3.添加新的node作爲slave

添加node作爲slave

在此服務器上再添加一個節點7008,作爲7007的一個slave,添加節點方法請見《redis集羣安裝》

執行以下命令:

[root@cache01 redis]# redis-cli --cluster add-node 192.168.75.187:7008 192.168.75.187:7001 --cluster-slave --cluster-master-id 62cb7cf009d812b0854ce6fe54ea863805f3028d

在這裏插入圖片描述

查看集羣

在這裏插入圖片描述

7008已經成功的作爲7007的slave添加。

5.12.4.刪除node

刪除node

先用resharding將數據都移除到其他節點,確保node爲空之後,才能執行remove操作,我們刪除7007爲例。

(1)移除7007的slot到7003上

[root@cache01 redis]# redis-cli --cluster reshard 192.168.75.187:7001 --cluster-from 62cb7cf009d812b0854ce6fe54ea863805f3028d --cluster-to bf579d975d99f9be5f8e01c2aab6b7930fea8e52 --cluster-slots 1000

再次查看集羣,發現7007的slot已經爲0,如下:

在這裏插入圖片描述

(2)移除7007這個master節點。

[root@cache01 redis]# redis-cli --cluster del-node 192.168.75.187:7001 62cb7cf009d812b0854ce6fe54ea863805f3028d

執行效果如下:

在這裏插入圖片描述

當清空了一個master的hash slot時,redis cluster就會自動將其slave掛載到其他master上去,這個時候就只要刪除掉master就可以了,如下:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章