本篇文章給大家?guī)砹岁P(guān)于Redis的相關(guān)知識,其中主要整理了集群操作的相關(guān)問題,包括了增加redis實例、配置8007為主節(jié)點、配置8008為8007的從節(jié)點等等內(nèi)容,下面一起來看一下,希望對大家有幫助。
推薦學習:Redis視頻教程
基于已有一定基礎(chǔ),這里搭建一個基礎(chǔ)版本三主三從,架構(gòu)如下
1、啟動集群
/usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8001/redis.conf /usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8002/redis.conf /usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8003/redis.conf /usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8004/redis.conf /usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8005/redis.conf /usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8006/redis.conf
查看集群狀態(tài):cluster nodes
從上圖可以看出,整個集群運行正常,三個master節(jié)點和三個slave節(jié)點,
- 8001端口的實例節(jié)點存儲0-5460這些hash槽,
- 8002端口的實例節(jié)點存儲5461-10922這些hash槽,
- 8003端口的實例節(jié)點存儲10923-16383這些hash槽,
這三個master節(jié)點存儲的所有hash槽組成 redis集群的存儲槽位,slave點是每個主節(jié)點的備份從節(jié)點,不顯示存儲槽位。
2、集群操作
我們在原始集群基礎(chǔ)上再增加一主(8007)一從(8008),增加節(jié)點后的集群參見下圖,新增節(jié)點用虛線框表示
2.1、增加redis實例
在/usr/local/redis-cluster下創(chuàng)建8007和8008文件夾,并拷貝8001文件夾下的redis.conf文件到8007和8008這兩個文件夾下
mkdir 8007 8008 cd 8001 cp redis.conf /usr/local/redis‐cluster/8007/ cp redis.conf /usr/local/redis‐cluster/8008/ # 修改8007文件夾下的redis.conf配置文件 vim /usr/local/redis‐cluster/8007/redis.conf # 修改如下內(nèi)容: port:8007 dir /usr/local/redis‐cluster/8007/ cluster‐config‐file nodes‐8007.conf # 修改8008文件夾下的redis.conf配置文件 vim /usr/local/redis‐cluster/8008/redis.conf # 修改內(nèi)容如下: port:8008 dir /usr/local/redis‐cluster/8008/ cluster‐config‐file nodes‐8008.conf # 啟動8007和8008倆個服務(wù)并查看服務(wù)狀態(tài) /usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8007/redis.conf /usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8008/redis.conf ps ‐el | grep redis
2.2、配置8007為主節(jié)點
用add-node命令新增一個主節(jié)點8007(master),前面的ip:port為新增節(jié)點,后面的ip:port為已知存在節(jié)點,看到日志最后有"[OK] New node added correctly"提示代表新節(jié)點加入成功
/usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐‐cluster add‐node 192.168.0.61:8007 192.168.0.61:8001
查看集群狀態(tài)
/usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐c ‐h 192.168.0.61 ‐p 8001 192.168.0.61:8001> cluster nodes
如下所示:
注意:當添加節(jié)點成功以后,新增的節(jié)點不會有任何數(shù)據(jù),因為它還沒有分配任何的slot(hash槽),我們需要為新節(jié)點手工分配hash槽
使用redis-cli命令為8007分配hash槽,找到集群中的任意一個主節(jié)點,對其進行重新分片工作
/usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐‐cluster reshard 192.168.0.61:8001
2.3、配置8008為8007的從節(jié)點
添加從節(jié)點8008到集群中去并查看集群狀態(tài)
/usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐‐cluster add‐node 192.168.0.61:8008 192.168.0.61:8001
如下:
如圖所示,還是一個master節(jié)點,沒有被分配任何的hash槽。
原因:我們需要執(zhí)行replicate命令來指定當前節(jié)點(從節(jié)點)的主節(jié)點id為哪個,首先需要連接新加的8008節(jié)點的客戶端,然后使用集群命令進行操作,把當前的8008(slave)節(jié)點指定到一個主節(jié)點下(這里使用之前創(chuàng)建的8007主節(jié)點)
執(zhí)行指令
/usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐c ‐h 192.168.0.61 ‐p 8008 192.168.0.61:8008> cluster replicate 2728a594a0498e98e4b83a537e19f9a0a3790f38 #后面這串id為8007的節(jié)點id
查看集群狀態(tài),8008節(jié)點已成功添加為8007節(jié)點的從節(jié)點
2.4、刪除8080從節(jié)點[不刪除四主四從]
用del-node刪除從節(jié)點8008,指定刪除節(jié)點ip和端口,以及節(jié)點id(紅色為8008節(jié)點id)
/usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐‐cluster del‐node 192.168.0.61:8008 a1cfe35722d151cf70585cee212755653 93c0956
再次查看集群狀態(tài),如下圖所示,8008這個slave節(jié)點已經(jīng)移除,并且該節(jié)點的redis服務(wù)也已被停止
2.5、刪除8007主節(jié)點[不刪除四主四從]
因為主節(jié)點的里面是有分配了hash槽的,所以我們這里必須先把8007里的hash槽放入到其他的可用主節(jié)點中去,然后再進行移除節(jié)點操作,不然會出現(xiàn)數(shù)據(jù)丟失問題(目前只能把master的數(shù)據(jù)遷移到一個節(jié)點上,暫時做不了平均分配功能),執(zhí)行命令如下:
/usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐‐cluster reshard 192.168.0.61:8007
遷移驗證:會發(fā)現(xiàn)8007下面已經(jīng)沒有任何hash槽了,證明遷移成功!
用del-node命令刪除8007主節(jié)點即可
/usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐‐cluster del‐node 192.168.0.61:8007 2728a594a0498e98e4b83a537e19f9a0a 3790f38
查看最終集群狀態(tài),發(fā)現(xiàn)一切恢復(fù)如初,至此水平擴展結(jié)束
推薦學習:Redis視頻教程