目錄
- 一、引言
- 二、Cluster集群增加操作
- 1、動態(tài)增加Master主服務(wù)器節(jié)點
- 2、動態(tài)增加Slave從服務(wù)器節(jié)點
- 三、Cluster集群刪除操作
- 1、動態(tài)刪除Slave從服務(wù)器節(jié)點
- 2、動態(tài)刪除Master主服務(wù)器節(jié)點
- 四、總結(jié)
一、引言
上一篇文章我們一步一步的教大家搭建了Redis的Cluster集群環(huán)境,形成了3個主節(jié)點和3個從節(jié)點的Cluster的環(huán)境。當(dāng)然,大家可以使用 Cluster info 命令查看Cluster集群的狀態(tài),也可以使用Cluster Nodes 命令來詳細(xì)了解Cluster集群每個節(jié)點的詳細(xì)信息和關(guān)系。我們可以在主節(jié)點上增加數(shù)據(jù)、操作數(shù)據(jù),也可以在從節(jié)點上讀取數(shù)據(jù),這些操作當(dāng)然都沒有問題。我們今天這篇文章主要是講解一下如何在不停掉Cluster集群環(huán)境的情況下,動態(tài)的往集群環(huán)境中增加主、從節(jié)點和動態(tài)的從集群環(huán)境中刪除節(jié)點。好了,廢話不多說,開始我們今天的講解。在開始之前,先要說明一下,因為redis的動態(tài)擴(kuò)容操作都是通過redis-trib.rb腳本文件來完成的,所以我們先來看看對這個腳本文件的說明,效果如圖:
[root@linux redis] # ruby redis-trib.rb
二、Cluster集群增加操作
現(xiàn)在正好開始我們的操作,我把增加節(jié)點和刪除節(jié)點分開來寫,并且增加或者刪除節(jié)點,我都分了兩個方面來說,一個方面是主節(jié)點的操作,另一個方面是從節(jié)點的操作,因為主、從節(jié)點在操作上會有差異,所以分來來說。增加節(jié)點的順序是先增加Master主節(jié)點,然后在增加Slave從節(jié)點。當(dāng)然這篇文章是在上一篇文章所講的Cluster集群模式的基礎(chǔ)之上來講的,那就讓我們先來看看上一篇文章所建立的Cluster集群模式的詳細(xì)信息。效果如圖:
1、動態(tài)增加Master主服務(wù)器節(jié)點
1.1、創(chuàng)建目錄7006(Master主節(jié)點文件夾)和7007(Slave從節(jié)點文件夾),并從以前Cluster集群節(jié)點7000-7005任一節(jié)點中拷貝配置文件redis.conf到7006和7007目錄下。
[root@linux redis-cluster]# pwd
[root@linux redis-cluster]# /root/application/program/redis-cluster/
[root@linux redis-cluster]# mkdir 7006 7007
[root@linux redis-cluster]# ls
7000 7001 7002 7003 7004 7005 7006 7007
[root@linux redis-cluster]# cp 7000/redis.conf 7006
[root@linux redis-cluster]# cp 7000/redis.conf 7007
1、創(chuàng)建目錄:
2、拷貝配置文件:
1.2、修改配置文件,將7006和7007目錄下面的redis.conf配置文件的端口進(jìn)行相應(yīng)修改,與自己的目錄名稱保持一致,修改項目如下:(在linux環(huán)境下可以執(zhí)行如下命令進(jìn)行全局替換::%s/7000/7006/g,%s/7000/7007/g,保存并退出則可)
1.2.1、7006節(jié)點的配置文件:redis.conf
bind 192.168.127.130
port 7006
daemonize yes
pidfile /var/run/redis-7006.pid
logfile /root/application/program/redis-cluster/7006/redis.log
dir /root/application/program/redis-cluster/7006/
cluster-enabled yes
cluster-config-file nodes-7006.conf
cluster-node-timeout 15000
appendonly yes
appendfsync always
1.2.2、7007節(jié)點的配置文件:redis.conf
bind 192.168.127.130
port 7007
daemonize yes
pidfile /var/run/redis-7007.pid
logfile /root/application/program/redis-cluster/7007/redis.log
dir /root/application/program/redis-cluster/7007/
cluster-enabled yes
cluster-config-file nodes-7007.conf
cluster-node-timeout 15000
appendonly yes
appendfsync always
1.3、啟動7006和7007目錄下Redis實例,并查看效果。
[root@linux redis]# pwd
[root@linux redis]# /root/application/program/redis/
[root@linux redis]# redis-server ../redis-cluster/7006/redis.conf
[root@linux redis]# redis-server ../redis-cluster/7007/redis.conf
效果如圖:
1.4、將7006主節(jié)點加入到Cluster集群。
[root@linux redis]# pwd
[root@linux redis]# /root/application/program/redis/
[root@linux redis]# ruby redis-trib.rb add-node 192.168.127.130:7006 192.168.127.130:7000
注意:當(dāng)添加新節(jié)點成功以后,新的節(jié)點不會有任何數(shù)據(jù),因為他沒有分配任何的數(shù)據(jù)Slot(哈希slots),這一步需要手動操作。
1.4.1、增加7006:(192.168.127.130:7006,截圖地址錯誤,端口號是7006,不是9006)
1.4.2、節(jié)點增加成功。
1.4.3、cluster info 驗證:
1.4.4、cluster nodes驗證:
1.5、為7006Master主節(jié)點分配數(shù)據(jù)Slots,分配方法是從集群中知道任何一個主節(jié)點(因為只有Master主節(jié)點才有數(shù)據(jù)slots),然后對其進(jìn)行重新分片工作。
[root@linux redis]# pwd
[root@linux redis]# /root/application/program/redis/
[root@linux redis]# ruby redis-trib.rb reshard 192.168.127.130:7000
1.5.1、分配數(shù)據(jù)槽:
1.5.2、選擇接收數(shù)據(jù)槽的節(jié)點和數(shù)據(jù)槽產(chǎn)生的方式:
1.5.3、執(zhí)行分配計劃:
1.5.4、數(shù)據(jù)槽分配成功:
2、動態(tài)增加Slave從服務(wù)器節(jié)點
在增加主節(jié)點7006的時候,前面的3步是共有的,也就是從1.1-1.3,之后才是建立主節(jié)點的內(nèi)容,前面的3步驟針對從節(jié)點7007也是必須的,我只是把這些步驟寫到了創(chuàng)建主節(jié)點7006的步驟里,大家請知曉。
2.1、將7007節(jié)點增加到集群中
[root@linux redis]# pwd
[root@linux redis]# /root/application/program/redis/
[root@linux redis]# ruby redis-trib.rb add-node 192.168.127.130:7007 192.168.127.130:7000
效果如圖:
2.2、指定7007節(jié)點作為7006的從節(jié)點,實現(xiàn)主從的配置。
[root@linux redis]# pwd
[root@linux redis]# /root/application/program/redis/
[root@linux redis]# redis-cli -c -h 192.168.127.130 -p 7007 //登陸7007
192.168.127.130::7007>cluster replicate 71ecd970838e9b400a2a6a15cd30a94ab96203bf(主節(jié)點的ID,這里是7006)
192.168.127.130::7007>OK
效果如圖:
三、Cluster集群刪除操作
由于我們在上面的步驟里面創(chuàng)建7006和7007兩個主從的節(jié)點,下面接下來的操作,我就是從這個Cluster集群模式中動態(tài)的刪除掉這兩個節(jié)點。刪除的順序是先刪除Slave從節(jié)點,然后在刪除Master主節(jié)點,最后還原到我們上一篇文章建立的Cluster集群模式,也就是3個主節(jié)點和3個從節(jié)點?,F(xiàn)在是4個主節(jié)點和4個從節(jié)點。效果如圖:
1、動態(tài)刪除Slave從服務(wù)器節(jié)點
1.1、刪除7007從節(jié)點,輸入del-node命令,指定刪除節(jié)點的IP地址和Port端口號,同時還要提供該從節(jié)點ID名稱。
[root@linux redis]# pwd
[root@linux redis]# /root/application/program/redis/
[root@linux redis]# ruby redis-trib.rb del-node 192.168.127.130:7007 991ed242102aaa08873eb9404a18e0618a4e37bd
刪除成功如圖:
刪除前如圖:
刪除后如圖:
2、動態(tài)刪除Master主服務(wù)器節(jié)點
要想刪除Master主節(jié)點,可能要繁瑣一些。因為在Master主節(jié)點上有數(shù)據(jù)槽(slots),為了保證數(shù)據(jù)的不丟失,必須把這些數(shù)據(jù)槽遷移到其他Master主節(jié)點上,然后在刪除主節(jié)點。
2.1、重新分片,把要刪除的Master主節(jié)點的數(shù)據(jù)槽移動到其他Master主節(jié)點上,以免數(shù)據(jù)丟失。
[root@linux redis]# pwd
[root@linux redis]# /root/application/program/redis/
[root@linux redis]# ruby redis-trib.rb reshard 192.168.127.130:7006
2.1.1、移除多少槽如圖:創(chuàng)建輸入200,這里要輸入199,因為計數(shù)是從0開始的,切記。
2.1.2、接受槽的Master主節(jié)點ID:這個節(jié)點可以是任意一個主節(jié)點都可以,我選擇7002,ID是:3b025b3ecfa65f462de639c7a412be443cf1dd1c
2.1.3、從哪個主節(jié)點移除,該主節(jié)點是7006,ID是:71ecd970838e9b400a2a6a15cd30a94ab96203bf
2.1.4、執(zhí)行分區(qū)計劃,選擇yes。分區(qū)完成,效果如圖:
2.1.5、當(dāng)前7006主節(jié)點已經(jīng)沒有數(shù)據(jù)槽了。
2.2、刪除7006主節(jié)點,提供要刪除節(jié)點的IP地址和Port端口,當(dāng)然還有要刪除的節(jié)點的ID名稱。
[root@linux redis]# pwd
[root@linux redis]# /root/application/program/redis/
[root@linux redis]# ruby redis-trib.rb del-node 192.168.127.130:7006 71ecd970838e9b400a2a6a15cd30a94ab96203bf
2.2.1、刪除成功
2.2.2、查看節(jié)點效果
四、總結(jié)
今天就寫到這里了,做一個小小的總結(jié)。主從復(fù)制和哨兵模式這兩個集群模式由于不能動態(tài)擴(kuò)容,而且主節(jié)點之間(有多個主節(jié)點的情況)數(shù)據(jù)完全一樣,導(dǎo)致了主節(jié)點的容量成了整個集群的瓶頸,如果想擴(kuò)展集群容量,必須擴(kuò)展主節(jié)點的容量。由于以上的問題,redis在3.0開始Cluster集群模式,這個模式在主節(jié)點之間數(shù)據(jù)是不一樣的,數(shù)據(jù)也可以根據(jù)需求自動轉(zhuǎn)向其他節(jié)點。這樣就可以實現(xiàn)橫向動態(tài)擴(kuò)容,新增加的主從節(jié)點,用于存儲新的數(shù)據(jù)則可,對以前的節(jié)點的數(shù)據(jù)不會有任何影響。再者說,配置也很簡單,這才是我們所需要的集群模式。
到此這篇關(guān)于Redis Cluster集群動態(tài)擴(kuò)容的實現(xiàn)的文章就介紹到這了,更多相關(guān)Redis Cluster集群動態(tài)擴(kuò)容 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- Redis的Cluster集群搭建的實現(xiàn)步驟
- Redis6.0搭建集群Redis-cluster的方法
- Redis cluster集群模式的原理解析
- Redis Cluster集群主從切換的踩坑與填坑
- Redis Cluster集群數(shù)據(jù)分片機(jī)制原理
- Redis cluster集群的介紹