三十4、Redis擴容集羣

                                          Redis擴容集羣

這裏寫圖片描述

一、準備新節點

新節點:css

  • 集羣模式
  • 配置和其餘節點統一
  • 啓動後是孤兒節點

新增兩個節點800六、8007:node

#redis基本配置
port 8006
daemonize yes
pidfile /var/run/redis-8006.pid
dir /opt/module/redis-4.0.11/data
logfile "8006.log"
dbfilename "dump-8006.rdb"


#集羣開關,默認是不開啓集羣模式。
cluster-enabled yes

#集羣配置文件的名稱,每一個節點都有一個集羣相關的配置文件,持久化保存集羣的信息。
#這個文件並不須要手動配置,這個配置文件有Redis生成並更新,每一個Redis集羣節點須要一個單獨的配置文件,
#請確保與實例運行的系統中配置文件名稱不衝突
cluster-config-file nodes-8006.conf

#默認狀況下,集羣所有的slot有節點負責,集羣狀態才爲ok,才能提供服務。設置爲no,能夠在slot沒有所有分配的時候提供服務。
#不建議打開該配置,這樣會形成分區的時候,小分區的master一直在接受寫請求,而形成很長時間數據不一致。
#就是有一個節點掛了這個集羣還能使用
cluster-require-full-coverage no

8007節點一致。redis

二、加入集羣

2.一、節點加入集羣的解釋

這裏寫圖片描述

這裏寫圖片描述


add-node命令能夠將新節點加入集羣,節點能夠爲master,也能夠爲某個master節點的slave:ruby

add-node  new_host:new_port existing_host:existing_port
          --slave           --master-id <arg>


new_host:new_port                    新增節點的IP及端口
existing_host:existing_port          已知節點的IP及端口

目的是爲了新節點和舊結點間進行meet操做,讓整個集羣知道新節點進來了

add-node有兩個可選參數:ide

--slave:設置該參數,則新節點以slave的角色加入集羣
--master-id:這個參數須要設置了--slave才能生效,--master-id用來指定新節點的master節點。若是不設置該參數,則會隨機爲節點選擇master節點。


add-node流程以下:ui

  1. 經過load_cluster_info_from_node方法轉載集羣信息,check_cluster方法檢查集羣是否健康。
  2. 若是設置了–slave,則須要爲該節點尋找master節點。設置了–master-id,則以該節點做爲新節點的master,若是沒有設置–master-id,則調用get_master_with_least_replicas方法,尋找slave數量最少的master節點。若是slave數量一致,則選取load_cluster_info_from_node順序發現的第一個節點。load_cluster_info_from_node順序的第一個節點是add-node設置的existing_host:existing_port節點,後面的順序根據在該節點執行cluster nodes返回的結果返回的節點順序。
  3. 鏈接新的節點並與集羣第一個節點握手。
  4. 若是沒設置–slave就直接返回ok,設置了–slave,則須要等待確認新節點加入集羣,而後執行cluster replicate命令複製master節點。
2.二、800六、8007兩個節點加入案例:


先啓動800六、8007兩個節點:spa

redis-server redis-8006.conf
redis-server redis-8007.conf

先添加一個主節點8006:3d

./redis-trib.rb add-node 127.0.0.1:8006  127.0.0.1:8000

結果:code

f8b5360af3341fc0f87b9492b4a3d69689ef1072 127.0.0.1:8006@18006 myself,master - 0 1535032508000 0 connected

爲8006主節點添加一個從節點8007:server

./redis-trib.rb add-node --slave --master-id f8b5360af3341fc0f87b9492b4a3d69689ef1072 127.0.0.1:8007  127.0.0.1:8000

結果:

[root@redis src]# redis-cli -p 8006 cluster nodes
7979884fe3020a77decb542b5f841dce99fa555e 127.0.0.1:8007@18007 slave f8b5360af3341fc0f87b9492b4a3d69689ef1072 0 1535032756000 0 connected
f8b5360af3341fc0f87b9492b4a3d69689ef1072 127.0.0.1:8006@18006 myself,master - 0 1535032753000 0 connected

三、遷移槽和數據

這裏寫圖片描述

這裏寫圖片描述

3.一、遷移slot及數據語法


reshard命令能夠在線把集羣的一些slot從集羣原來slot負責節點遷移到新的節點,利用reshard能夠完成集羣的在線橫向擴容和縮容。

reshard          host:port
                  --slots <arg>                   --to <arg>                   --from <arg>                   --yes                   --pipeline <arg>                   --timeout <arg>

參數解釋:

host:port:這個是必傳參數,用來從一個節點獲取整個集羣信息,至關於獲取集羣信息的入口。
--from <arg>:須要從哪些源節點上遷移slot,可從多個源節點完成遷移,以逗號隔開,傳遞的是節點的node id,               還能夠直接傳遞--from all,這樣源節點就是集羣的全部節點,不傳遞該參數的話,則會在遷移過程當中提示用戶輸入。
--to <arg>:slot須要遷移的目的節點的node id,目的節點只能填寫一個,不傳遞該參數的話,則會在遷移過程當中提示用戶輸入。 --slots <arg>:遷移到目標節點的slot總數量,不傳遞該參數的話,則會在遷移過程當中提示用戶輸入。 --yes:設置該參數,能夠在打印執行reshard計劃的時候,提示用戶輸入yes確認後再執行reshard。 --timeout <arg>:設置migrate命令的超時時間。 --pipeline <arg>:定義cluster getkeysinslot命令一次取出的key數量,不傳的話使用默認值爲10

遷移前:

7979884fe3020a77decb542b5f841dce99fa555e 127.0.0.1:8007@18007 slave f8b5360af3341fc0f87b9492b4a3d69689ef1072 0 1535032756000 0 connected
f8b5360af3341fc0f87b9492b4a3d69689ef1072 127.0.0.1:8006@18006 myself,master - 0 1535032753000 0 connected
a2d034b74c9cec4cd8398e8b23ae2d2ab124d49d 127.0.0.1:8000@18000 slave 9d1cb9fea95f1b205fc7a5ecb20125259765d6ca 0 1535032755246 7 connected
fd17cbac4a5ca1942490d3734a73387341e80fb7 127.0.0.1:8005@18005 slave f5960002d40cf3711eca7146719c4f568115f76c 0 1535032756000 3 connected
1f0d813205ea17d9b254488215bd48612c0ff2b5 127.0.0.1:8001@18001 master - 0 1535032755000 2 connected 5461-10922
9d1cb9fea95f1b205fc7a5ecb20125259765d6ca 127.0.0.1:8003@18003 master - 0 1535032757258 7 connected 0-5460
f5960002d40cf3711eca7146719c4f568115f76c 127.0.0.1:8002@18002 master - 0 1535032756252 3 connected 10923-16383
93ae6d9a42bf485a955d2387b0a0d659e2c12902 127.0.0.1:8004@18004 slave 1f0d813205ea17d9b254488215bd48612c0ff2b5 0 1535032758265 2 connected

全部節點向8006節點遷移1364個slot:

./redis-trib.rb reshard --slots 4096 --to f8b5360af3341fc0f87b9492b4a3d69689ef1072 --from all --yes 127.0.0.1:8000

槽點遷移後:

7979884fe3020a77decb542b5f841dce99fa555e 127.0.0.1:8007@18007 slave f8b5360af3341fc0f87b9492b4a3d69689ef1072 0 1535035117200 9 connected
f8b5360af3341fc0f87b9492b4a3d69689ef1072 127.0.0.1:8006@18006 myself,master - 0 1535035113000 9 connected 0-1363 5461-6826 10923-12286
a2d034b74c9cec4cd8398e8b23ae2d2ab124d49d 127.0.0.1:8000@18000 slave 9d1cb9fea95f1b205fc7a5ecb20125259765d6ca 0 1535035116193 7 connected
fd17cbac4a5ca1942490d3734a73387341e80fb7 127.0.0.1:8005@18005 slave f5960002d40cf3711eca7146719c4f568115f76c 0 1535035114000 3 connected
1f0d813205ea17d9b254488215bd48612c0ff2b5 127.0.0.1:8001@18001 master - 0 1535035114000 2 connected 6827-10922
9d1cb9fea95f1b205fc7a5ecb20125259765d6ca 127.0.0.1:8003@18003 master - 0 1535035114000 7 connected 1364-5460
f5960002d40cf3711eca7146719c4f568115f76c 127.0.0.1:8002@18002 master - 0 1535035115000 3 connected 12287-16383
93ae6d9a42bf485a955d2387b0a0d659e2c12902 127.0.0.1:8004@18004 slave 1f0d813205ea17d9b254488215bd48612c0ff2b5 0 1535035115189 2 connected
相關文章
相關標籤/搜索