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就可以了,如下: