溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

redis cluster 集群搭建(增、刪、改、查) :5.0.2

發(fā)布時(shí)間:2020-08-06 15:34:05 來(lái)源:網(wǎng)絡(luò) 閱讀:1564 作者:無(wú)鋒劍 欄目:關(guān)系型數(shù)據(jù)庫(kù)

環(huán)境簡(jiǎn)介:

1:centos 7  ;
2:redis version  5.0.2   ;
3:  安裝方式:編譯安裝 ;
4:。。。

創(chuàng)建集群

節(jié)點(diǎn)IP地址
10.42.166.105:6379 
10.42.142.202:6379 
10.42.11.183:6379 
10.42.35.201:6379 
10.42.181.22:6379 
10.42.225.72:6379

使用公司redis docker 鏡像啟動(dòng)6個(gè)實(shí)例后,開(kāi)始創(chuàng)建集群:
create命令可選replicas參數(shù),replicas表示需要有幾個(gè)slave。最簡(jiǎn)單命令使用如下:

redis-cli --cluster create --cluster-replicas 1 \
10.42.166.105:6379 \
10.42.142.202:6379 \
10.42.11.183:6379 \
10.42.35.201:6379 \
10.42.181.22:6379 \
10.42.225.72:6379 

查看集群節(jié)點(diǎn)

redis-cli cluster nodes

測(cè)試創(chuàng)建key

set testkey1 testvalue1
get testkey1

模擬故障,刪除鏡像

直接在rancher集群直接delete 10.42.141.119 節(jié)點(diǎn)

查看狀態(tài)

root@redis-cluster-redis-cluster-test-1:/data# redis-cli cluster nodes
21322d2e62d027393a46add604a8eed37c53b460 10.42.1.140:6379@16379 slave 39cde9a04a9cfde37337840f31fa1bc1ab8fb37a 0 1546933324975 6 connected
dfa238fff8a7a49230cff7eb74f573f5645c8ec5 10.42.166.105:6379@16379 myself,master - 0 1546933324000 1 connected 0-5460
f1e99f5f57b2390cba33c8142cb79c2e062db854 10.42.158.17:6379@16379 master - 0 1546933325980 2 connected 5461-10922
3f20faa26d09fd263f249976fbdac859d26a511a 10.42.91.228:6379@16379 slave f1e99f5f57b2390cba33c8142cb79c2e062db854 0 1546933326981 5 connected
39cde9a04a9cfde37337840f31fa1bc1ab8fb37a 10.42.221.211:6379@16379 master - 0 1546933325000 3 connected 10923-16383

### 集群顯示節(jié)點(diǎn)連接失敗
9460c46ed7e8e9d809a896d966754823c7fb9e5d 10.42.141.119:6379@16379 slave,fail dfa238fff8a7a49230cff7eb74f573f5645c8ec5 1546933279432 1546933277829 4 connected

從集群徹底刪除節(jié)點(diǎn)

從集群中移除 node_id 指定的節(jié)點(diǎn)。

redis-cli cluster forget dfa238fff8a7a49230cff7eb74f573f5645c8ec5

返回
OK

### 從集群中刪除節(jié)點(diǎn) 
del-node可以把某個(gè)節(jié)點(diǎn)從集群中刪除。del-node只能刪除沒(méi)有分配slot的節(jié)點(diǎn)。刪除命令傳遞兩個(gè)參數(shù):

host:port:從該節(jié)點(diǎn)獲取集群信息。
node_id:需要?jiǎng)h除的節(jié)點(diǎn)id。

redis-cli cluster del-node 10.42.141.211:6379  dfa238fff8a7a49230cff7eb74f573f5645c8ec5

添加新節(jié)點(diǎn) (添加從節(jié)點(diǎn))

--slave:設(shè)置該參數(shù),則新節(jié)點(diǎn)以slave的角色加入集群
--master-id:這個(gè)參數(shù)需要設(shè)置了--slave才能生效,--master-id用來(lái)指定新節(jié)點(diǎn)的master節(jié)點(diǎn)。如果不設(shè)置該參數(shù),則會(huì)隨機(jī)為節(jié)點(diǎn)選擇master節(jié)點(diǎn)。

redis-cli --cluster add-node  新節(jié)點(diǎn)IP地址:端口    存在節(jié)點(diǎn)IP:端口 --cluster-slave (從節(jié)點(diǎn)) --cluster-master-id (master節(jié)點(diǎn)的ID)

redis-cli --cluster add-node   10.42.141.119:6379  10.42.166.105:6379  --cluster-slave   --cluster-master-id  dfa238fff8a7a49230cff7eb74f573f5645c8ec5

返回結(jié)果如下:

>>> Adding node 10.42.141.119:6379 to cluster 10.42.166.105:6379
>>> Performing Cluster Check (using node 10.42.166.105:6379)
M: dfa238fff8a7a49230cff7eb74f573f5645c8ec5 10.42.166.105:6379
   slots:[0-5460] (5461 slots) master
..........
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 10.42.141.119:6379 to make it join the cluster.
Waiting for the cluster to join

>>> Configure node as replica of 10.42.166.105:6379.
[OK] New node added correctly.

添加一組集群節(jié)點(diǎn)

節(jié)點(diǎn)如下:
10.42.42.180 (主)
10.42.22.184 (從)

方法:先添加主節(jié)點(diǎn),然后添加從節(jié)點(diǎn);

添加主節(jié)點(diǎn)

redis-cli --cluster add-node 新節(jié)點(diǎn)IP:端口 已存在節(jié)點(diǎn)IP:端口
實(shí)例:
redis-cli --cluster add-node 10.42.42.180:6379 10.42.166.105:6379

root@redis-cluster-redis-cluster-test-1:/data# redis-cli --cluster add-node 10.42.42.180:6379  10.42.166.105:6379
>>> Adding node 10.42.42.180:6379 to cluster 10.42.166.105:6379
>>> Performing Cluster Check (using node 10.42.166.105:6379)
M: 748273d7a0a186d229028edefdcff2711c1c0e0d 10.42.166.105:6379
...........
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 10.42.42.180:6379 to make it join the cluster.  《== 添加成功
[OK] New node added correctly.

驗(yàn)證

root@redis-cluster-redis-cluster-test-1:/data# redis-cli cluster nodes
........
b18bef6a47c06a624d1e2ba0f5d83d4c4ce97ff7 10.42.11.183:6379@16379 master - 0 1546941402518 3 connected 10923-16383
6764b152d0d7526b48a16621ff2a4c72f6494622 10.42.142.202:6379@16379 master - 0 1546941402000 2 connected 5461-10922

### 新節(jié)點(diǎn)
0488e5f3e006f0df2806bf0b178a2414b248b1e5 10.42.42.180:6379@16379 master - 0 1546941402000 0 connected

添加從節(jié)點(diǎn)

redis-cli --cluster add-node 新節(jié)點(diǎn)IP地址:端口 存在節(jié)點(diǎn)IP:端口 --cluster-slave (從節(jié)點(diǎn)) --cluster-master-id (master節(jié)點(diǎn)的ID)

實(shí)例:
redis-cli --cluster add-node 10.42.22.184:6379 10.42.42.180:6379 --cluster-slave --cluster-master-id 0488e5f3e006f0df2806bf0b178a2414b248b1e5

root@redis-cluster-redis-cluster-test-1:/data# redis-cli --cluster add-node   10.42.22.184:6379  10.42.42.180:6379  --cluster-slave   --cluster-master-id  0488e5f3e006f0df2806bf0b178a2414b248b1e5
>>> Adding node 10.42.22.184:6379 to cluster 10.42.42.180:6379
>>> Performing Cluster Check (using node 10.42.42.180:6379)
M: 0488e5f3e006f0df2806bf0b178a2414b248b1e5 10.42.42.180:6379
   slots: (0 slots) master
................
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 10.42.22.184:6379 to make it join the cluster.
Waiting for the cluster to join

>>> Configure node as replica of 10.42.42.180:6379.
[OK] New node added correctly.

驗(yàn)證

root@redis-cluster-redis-cluster-test-1:/data# redis-cli cluster nodes
f41d8746a1fd31135b0af1737f69a77ec8e6cd26 10.42.225.72:6379@16379 slave b18bef6a47c06a624d1e2ba0f5d83d4c4ce97ff7 0 1546941516826 6 connected
.......
6764b152d0d7526b48a16621ff2a4c72f6494622 10.42.142.202:6379@16379 master - 0 1546941514822 2 connected 5461-10922

## 新加節(jié)點(diǎn)添加成功,但還沒(méi)有分配槽位
0488e5f3e006f0df2806bf0b178a2414b248b1e5 10.42.42.180:6379@16379 master - 0 1546941515825 7 connected
f9bc8def897915d73569b140d1478fbf94d3dbef 10.42.22.184:6379@16379 slave 0488e5f3e006f0df2806bf0b178a2414b248b1e5 0 1546941515000 7 connected

rebalance平衡集群節(jié)點(diǎn)slot數(shù)量

語(yǔ)法:

rebalance       host:port
                --weight <arg>
                --auto-weights
                --threshold <arg>
                --use-empty-masters
                --timeout <arg>
                --simulate
                --pipeline <arg>

host:port:這個(gè)是必傳參數(shù),用來(lái)從一個(gè)節(jié)點(diǎn)獲取整個(gè)集群信息,相當(dāng)于獲取集群信息的入口。
--weight <arg>:節(jié)點(diǎn)的權(quán)重,格式為node_id=weight,如果需要為多個(gè)節(jié)點(diǎn)分配權(quán)重的話,需要添加多個(gè)--weight <arg>參數(shù),即--weight b31e3a2e=5 --weight 60b8e3a1=5,node_id可為節(jié)點(diǎn)名稱的前綴,只要保證前綴位數(shù)能唯一區(qū)分該節(jié)點(diǎn)即可。沒(méi)有傳遞–weight的節(jié)點(diǎn)的權(quán)重默認(rèn)為1。
--auto-weights:這個(gè)參數(shù)在rebalance流程中并未用到。
--threshold <arg>:只有節(jié)點(diǎn)需要遷移的slot閾值超過(guò)threshold,才會(huì)執(zhí)行rebalance操作。具體計(jì)算方法可以參考下面的rebalance命令流程的第四步。
--use-empty-masters:rebalance是否考慮沒(méi)有節(jié)點(diǎn)的master,默認(rèn)沒(méi)有分配slot節(jié)點(diǎn)的master是不參與rebalance的,設(shè)置--use-empty-masters可以讓沒(méi)有分配slot的節(jié)點(diǎn)參與rebalance。
--timeout <arg>:設(shè)置migrate命令的超時(shí)時(shí)間。
--simulate:設(shè)置該參數(shù),可以模擬rebalance操作,提示用戶會(huì)遷移哪些slots,而不會(huì)真正執(zhí)行遷移操作。
--pipeline <arg>:與reshar的pipeline參數(shù)一樣,定義cluster getkeysinslot命令一次取出的key數(shù)量,不傳的話使用默認(rèn)值為10。

實(shí)例:

redis-cli --cluster rebalance 10.42.35.201:6379 --cluster-threshold 1 --cluster-use-empty-masters --pipeline 10

如果需要模擬執(zhí)行添加 : --cluster-simulate

root@redis-cluster-redis-cluster-test-1:/data# redis-cli --cluster rebalance  10.42.35.201:6379 --cluster-threshold 1 --cluster-use-empty-masters
>>> Performing Cluster Check (using node 10.42.35.201:6379)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Rebalancing across 4 nodes. Total weight = 4.00
Moving 1366 slots from 10.42.142.202:6379 to 10.42.42.180:6379
###############################################################################################
Moving 1365 slots from 10.42.166.105:6379 to 10.42.42.180:6379
#############################################################################################
Moving 1365 slots from 10.42.11.183:6379 to 10.42.42.180:6379
#############################################################################################

驗(yàn)證rebalance 結(jié)果:

redis-cli cluster nodes

root@redis-cluster-redis-cluster-test-1:/data# redis-cli cluster  nodes
f41d8746a1fd31135b0af1737f69a77ec8e6cd26 10.42.225.72:6379@16379 slave b18bef6a47c06a624d1e2ba0f5d83d4c4ce97ff7 0 1546942598000 6 connected
e538c397a1c8ca6217561a88d72b08b0e513da84 10.42.181.22:6379@16379 slave 6764b152d0d7526b48a16621ff2a4c72f6494622 0 1546942598000 5 connected
39aceb27ccdce533c5cfbf51eb13928d2515fadc 10.42.35.201:6379@16379 slave 748273d7a0a186d229028edefdcff2711c1c0e0d 0 1546942599807 4 connected
6764b152d0d7526b48a16621ff2a4c72f6494622 10.42.142.202:6379@16379 master - 0 1546942598803 2 connected 6827-10922
748273d7a0a186d229028edefdcff2711c1c0e0d 10.42.166.105:6379@16379 myself,master - 0 1546942597000 1 connected 1365-5460
b18bef6a47c06a624d1e2ba0f5d83d4c4ce97ff7 10.42.11.183:6379@16379 master - 0 1546942598000 3 connected 12288-16383

## 新加節(jié)點(diǎn)已經(jīng)有分配槽位
f9bc8def897915d73569b140d1478fbf94d3dbef 10.42.22.184:6379@16379 slave 0488e5f3e006f0df2806bf0b178a2414b248b1e5 0 1546942600809 7 connected
0488e5f3e006f0df2806bf0b178a2414b248b1e5 10.42.42.180:6379@16379 master - 0 1546942597000 7 connected 0-1364 5461-6826 10923-12287

常用命令參考:

集群

cluster info :打印集群的信息
cluster nodes :列出集群當(dāng)前已知的所有節(jié)點(diǎn)( node),以及這些節(jié)點(diǎn)的相關(guān)信息。
節(jié)點(diǎn)

cluster meet <ip> <port> :將 ip 和 port 所指定的節(jié)點(diǎn)添加到集群當(dāng)中,讓它成為集群的一份子。
cluster forget <node_id> :從集群中移除 node_id 指定的節(jié)點(diǎn)。
cluster replicate <node_id> :將當(dāng)前節(jié)點(diǎn)設(shè)置為 node_id 指定的節(jié)點(diǎn)的從節(jié)點(diǎn)。
cluster saveconfig :將節(jié)點(diǎn)的配置文件保存到硬盤里面。
槽(slot)

cluster addslots <slot> [slot ...] :將一個(gè)或多個(gè)槽( slot)指派( assign)給當(dāng)前節(jié)點(diǎn)。
cluster delslots <slot> [slot ...] :移除一個(gè)或多個(gè)槽對(duì)當(dāng)前節(jié)點(diǎn)的指派。
cluster flushslots :移除指派給當(dāng)前節(jié)點(diǎn)的所有槽,讓當(dāng)前節(jié)點(diǎn)變成一個(gè)沒(méi)有指派任何槽的節(jié)點(diǎn)。
cluster setslot <slot> node <node_id> :將槽 slot 指派給 node_id 指定的節(jié)點(diǎn),如果槽已經(jīng)指派給另一個(gè)節(jié)點(diǎn),那么先讓另一個(gè)節(jié)點(diǎn)刪除該槽>,然后再進(jìn)行指派。
cluster setslot <slot> migrating <node_id> :將本節(jié)點(diǎn)的槽 slot 遷移到 node_id 指定的節(jié)點(diǎn)中。
cluster setslot <slot> importing <node_id> :從 node_id 指定的節(jié)點(diǎn)中導(dǎo)入槽 slot 到本節(jié)點(diǎn)。
cluster setslot <slot> stable :取消對(duì)槽 slot 的導(dǎo)入( import)或者遷移( migrate)。
鍵

cluster keyslot <key> :計(jì)算鍵 key 應(yīng)該被放置在哪個(gè)槽上。
cluster countkeysinslot <slot> :返回槽 slot 目前包含的鍵值對(duì)數(shù)量。
cluster getkeysinslot <slot> <count> :返回 count 個(gè) slot 槽中的鍵

參考文檔:

http://weizijun.cn/2016/01/08/redis%20cluster%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7redis-trib-rb%E8%AF%A6%E8%A7%A3/

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI