Redis系列(三):Redis集群的水平擴展與伸縮


一、Redis集群的水平擴展

  Redis3.0版本以后,有了集群的功能,提供了比之前版本的哨兵模式更高的性能與可用性,但是集群的水平擴展卻比較麻煩,接下來介紹下Redis高可用集群如何做水平擴展,在原集群的6個節點的基礎上新增2個節點,由原來的3主3從變成4主4從,原先的3主3從部署詳見Redis系列(二):Redis高可用集群,如下圖:

 二、水平擴展具體操作

   將redis-5.0.2文件夾拷貝到新的主機192.168.160.154上去,(1)scp -r /usr/local/redis-5.0.2 root@192.168.160.154:/usr/local/ 進去到192.168.160.154主機 (2)cd /usr/local

    新啟動2個redis實例,然后檢查是否啟動成功 (1)/usr/local/redis-5.0.2/bin/redis-server /usr/local/redis-5.0.2/redis-cluster/700*/redis.conf (2)ps -ef | grep redis 查看是否啟動成功

   ③ 查看redis集群的命令幫助 (1)cd /usr/local/redis-5.0.2 (2)bin/redis-cli --cluster help

create:創建一個集群host1:port1 ... hostN:portN
call:可以執行redis命令
add-node:將一個節點添加到集群里,第一個參數為新節點的ip:port,第二個參數為集群中任意一個已經存在的節點的ip:port
del-node:移除一個節點
reshard:重新分片
check:檢查集群狀態

  ④ 使用add-node命令新增一個主節點192.168.160.154:7001(master),前面的ip:port為新增節點,后面的ip:port為集群中已存在節點(1)/usr/local/redis-5.0.2/bin/redis-cli --cluster add-node 192.168.160.154:7001 192.168.160.146:7001

   (1)連接任意一個客戶端即可:./redis-cli -c -h -p (-a訪問服務端密碼,-c表示集群模式,指定ip地址和端口號)如:/usr/local/redis-5.0.2/bin/redis-cli -c -h 192.168.160.146 -p 700* (2)進行驗證: cluster info(查看集群信息)、cluster nodes(查看節點列表)

    使用redis-cli命令為192.168.160.154:7001分配slots槽位,找到集群中的任意一個主節點,對其進行重新分片工作。(1)/usr/local/redis-5.0.2/bin/redis-cli --cluster reshard 192.168.160.146:7001

How many slots do you want to move (from 1 to 16384)? 4000
(ps:需要多少個槽移動到新的節點上,自己設置,比如4000個hash槽)
What is the receiving node ID? 44b0bd6cf056af7dbbfa0dd9497def1cfc21eb6d
(ps:把這4000個hash槽移動到哪個節點上去,需要指定節點id)
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node 1:all
(ps:輸入all為從所有主節點中分別抽取相應的槽數指定到新節點中,抽取的總槽數為4000個;或者輸入原節點ID然后輸入done,意思將輸入的節點ID,抽取的總槽數為4000個)
Do you want to proceed with the proposed reshard plan (yes/no)? yes
(ps:輸入yes確認開始執行分片任務)

  ⑦ 查看下最新的集群狀態

 

    添加從節點192.168.160.154:7002到集群中去並查看集群狀態

  (1)/usr/local/redis-5.0.2/bin/redis-cli --cluster add-node 192.168.160.154:7002 192.168.160.146:7001

  (2)cluster nodes

  (3)如上圖所示,還是一個master節點,沒有被分配任何的hash槽。我們需要執行replicate命令來指定當前節點(從節點)的主節點id為哪個,首先需要連接新加的192.168.160.154:7002節點的客戶端,然后使用集群命令進行操作,把當前的192.168.160.154:7002(slave)節點指定到一個主節點下(這里使用之前創建的192.168.160.154:7001主節點)

  (3-1)/usr/local/redis-5.0.2/bin/redis-cli -c -h 192.168.160.154 -p 7002

  (3-2)cluster replicate 44b0bd6cf056af7dbbfa0dd9497def1cfc21eb6d #后面這串id為192.168.160.154:7001的節點id

   (3-2)cluster nodes

 三、水平伸縮具體操作

  目的還原成原始集群,如下圖:

    刪除192.168.160.154:7002從節點,用del-node刪除從節點192.168.160.154:7002,指定刪除節點ip和端口,以及節點id(192.168.160.154:7002節點id) 

  (1)/usr/local/redis-5.0.2/bin/redis-cli --cluster del-node 192.168.160.154:7002 564963541c243365cbb20aed69e98048d21d68fd

   (2)cluster nodes

    刪除192.168.160.154:7001主節點,這個步驟相對麻煩一些,因為主節點的里面是有分配了slots槽位,所以必須先把192.168.160.154:7001里的slots槽位放入到其他的可用主節點中去,然后再進行移除節點操作,不然會出現數據丟失問題(目前只能把master的數據遷移到一個節點上,暫時做不了平均分配功能)

  (1)/usr/local/redis-5.0.2/bin/redis-cli --cluster reshard 192.168.160.154:7001

How many slots do you want to move (from 1 to 16384)? 4000
(ps:需要多少個槽移動到新的節點上,自己設置,比如4000個hash槽)
What is the receiving node ID? e7f80ba80749904838b6d779a0646e7f22313624
(ps:把這4000個hash槽移動到哪個節點上去,需要指定節點id)
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node 1:44b0bd6cf056af7dbbfa0dd9497def1cfc21eb6d
Source node 1:done
(ps:輸入all為從所有主節點中分別抽取相應的槽數指定到新節點中,抽取的總槽數為4000個;或者輸入原節點ID然后輸入done,意思將輸入的節點ID,抽取的總槽數為4000個)
Do you want to proceed with the proposed reshard plan (yes/no)? yes
(ps:輸入yes確認開始執行分片任務)

  (2)cluster nodes 已經成功的把192.168.160.154:7001主節點的數據遷移到192.168.160.146:7001上去了

    (3)最后我們直接使用del-node命令刪除192.168.160.154:7001主節點即可

 

   (4)最后執行cluster nodes


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM