redis集群之新增節(jié)點(diǎn)

操作環(huán)境

服務(wù)器centos7.3, ip:47.52.41.245,所包含的集群節(jié)點(diǎn)有7003,7004,7005

查看所有節(jié)點(diǎn)信息
  1. 沒有密碼情況下
redis-cli -c -p port cluster nodes

port:端口

  1. 有密碼情況下
redis-cli -c -p port -a password cluster nodes

password:密碼

port 是本服務(wù)器集群中任意節(jié)點(diǎn)的端口

[root@iZj6c7eeosj2t5vjw8rf4xZ /]# redis-cli -c -p 7003 cluster nodes
668397aba571ece85532b1eb1fccb42e4e33b1f2 116.196.65.198:7001 master - 0 1506343504317 2 connected 10923-16383
908430b2bf63669898e9eaef79dd6c1b33c8c57a 116.196.65.198:7002 slave cc86a24f3896ad7530e2687cf52582912f74b661 0 15063435093
33d50636b5235de9970de2da75901b642d2b14d2 116.196.65.198:7000 master - 0 1506343506319 1 connected 0-5460
cc86a24f3896ad7530e2687cf52582912f74b661 172.31.195.1:7003 myself,master - 0 0 4 connected 5461-10922
3a0b27e2e34e72430ce41bb78f6d207579175306 47.52.41.245:7004 slave 33d50636b5235de9970de2da75901b642d2b14d2 0 1506343507275
ca60de73e15c19a9aa45da508d270a5781a76724 47.52.41.245:7005 slave 668397aba571ece85532b1eb1fccb42e4e33b1f2 0 1506343508277

新增節(jié)點(diǎn)
  1. 在先前已經(jīng)搭建好集群的服務(wù)器47.52.41.245上面的/tmp/frank/redis/redis-3.2.1/redis_cluster下面新建一個(gè)文件夾7006,然后把7003下redis.config拷貝里面
[root@iZj6c7eeosj2t5vjw8rf4xZ redis_cluster]# cd /tmp/frank/redis/redis-3.2.1/redis_cluster/
[root@iZj6c7eeosj2t5vjw8rf4xZ redis_cluster]# ls
7003  7004  7005
[root@iZj6c7eeosj2t5vjw8rf4xZ redis_cluster]# mkdir 7006
[root@iZj6c7eeosj2t5vjw8rf4xZ redis_cluster]# cp /tmp/frank/redis/redis-3.2.1/redis_cluster/7003/redis.conf 7006
[root@iZj6c7eeosj2t5vjw8rf4xZ redis_cluster]# cd 7006
[root@iZj6c7eeosj2t5vjw8rf4xZ 7006]# ls
redis.conf

  1. 修改redis.config,修改內(nèi)容如下
port  7006                      //端口    
protected-mode no   //關(guān)掉保護(hù)模式3.2之后 不然會(huì)報(bào)Sorry, can't connect to node
#bind 本機(jī)ip //默認(rèn)ip為127.0.0.1,在3.2之后要注釋掉 daemonize    yes //redis后臺(tái)運(yùn)行
pidfile  /var/run/redis_7006.pid//pidfile文件對(duì)應(yīng)7006
cluster-enabled  yes            //開啟集群  把注釋#去掉
cluster-config-file  nodes_7006.conf//集群的配置  配置文件首次啟動(dòng)自動(dòng)生成 7006
cluster-node-timeout  15000     //請(qǐng)求超時(shí)  默認(rèn)15秒,可自行設(shè)置
appendonly  yes             //aof日志開啟 
  1. 開放服務(wù)器和安全組的7006和17006(集群對(duì)應(yīng)的)端口,先啟動(dòng)防火墻,然后開發(fā)對(duì)應(yīng)端口,接著重慶防火墻,如果有安全組,安全組同樣要開啟
[root@iZj6c7eeosj2t5vjw8rf4xZ 7006]# systemctl start firewalld.service
[root@iZj6c7eeosj2t5vjw8rf4xZ 7006]# firewall-cmd --zone=public --add-port=7006/tcp --permanent
success
[root@iZj6c7eeosj2t5vjw8rf4xZ 7006]# firewall-cmd --zone=public --add-port=17006/tcp --permanent
success
[root@iZj6c7eeosj2t5vjw8rf4xZ 7006]# firewall-cmd --reload
success

4.啟動(dòng)節(jié)點(diǎn)并查看啟動(dòng)狀態(tài)

[root@iZj6c7eeosj2t5vjw8rf4xZ 7006]# redis-server redis.conf 
[root@iZj6c7eeosj2t5vjw8rf4xZ 7006]# netstat -tnlp | grep redis
tcp        0      0 0.0.0.0:17003           0.0.0.0:*               LISTEN      2228/redis-server * 
tcp        0      0 0.0.0.0:17004           0.0.0.0:*               LISTEN      2224/redis-server * 
tcp        0      0 0.0.0.0:17005           0.0.0.0:*               LISTEN      2232/redis-server * 
tcp        0      0 0.0.0.0:17006           0.0.0.0:*               LISTEN      3867/redis-server * 
tcp        0      0 0.0.0.0:7003            0.0.0.0:*               LISTEN      2228/redis-server * 
tcp        0      0 0.0.0.0:7004            0.0.0.0:*               LISTEN      2224/redis-server * 
tcp        0      0 0.0.0.0:7005            0.0.0.0:*               LISTEN      2232/redis-server * 
tcp        0      0 0.0.0.0:7006            0.0.0.0:*               LISTEN      3867/redis-server * 
tcp6       0      0 :::17003                :::*                    LISTEN      2228/redis-server * 
tcp6       0      0 :::17004                :::*                    LISTEN      2224/redis-server * 
tcp6       0      0 :::17005                :::*                    LISTEN      2232/redis-server * 
tcp6       0      0 :::17006                :::*                    LISTEN      3867/redis-server * 
tcp6       0      0 :::7003                 :::*                    LISTEN      2228/redis-server * 
tcp6       0      0 :::7004                 :::*                    LISTEN      2224/redis-server * 
tcp6       0      0 :::7005                 :::*                    LISTEN      2232/redis-server * 
tcp6       0      0 :::7006                 :::*                    LISTEN      3867/redis-server * 
  1. 將新節(jié)點(diǎn)加入到集群

執(zhí)行 redis-trib.rb add-node host:port host1:port1

host:port:為新節(jié)點(diǎn)的主機(jī)和端口

host1:port1:為集群里面的某個(gè)節(jié)點(diǎn)主機(jī)和端口

[root@iZj6c7eeosj2t5vjw8rf4xZ 7006]# redis-trib.rb add-node 47.52.41.245:7006 47.52.41.245:7003
>>> Adding node 47.52.41.245:7006 to cluster 47.52.41.245:7003
>>> Performing Cluster Check (using node 47.52.41.245:7003)
M: cc86a24f3896ad7530e2687cf52582912f74b661 47.52.41.245:7003
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
M: 668397aba571ece85532b1eb1fccb42e4e33b1f2 116.196.65.198:7001
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
S: 908430b2bf63669898e9eaef79dd6c1b33c8c57a 116.196.65.198:7002
   slots: (0 slots) slave
   replicates cc86a24f3896ad7530e2687cf52582912f74b661
M: 33d50636b5235de9970de2da75901b642d2b14d2 116.196.65.198:7000
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: 3a0b27e2e34e72430ce41bb78f6d207579175306 47.52.41.245:7004
   slots: (0 slots) slave
   replicates 33d50636b5235de9970de2da75901b642d2b14d2
S: ca60de73e15c19a9aa45da508d270a5781a76724 47.52.41.245:7005
   slots: (0 slots) slave
   replicates 668397aba571ece85532b1eb1fccb42e4e33b1f2
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
[WARNING] Node 116.196.65.198:7001 has slots in importing state (5598,8235).
[WARNING] Node 116.196.65.198:7000 has slots in importing state (5598,8235).
[WARNING] The following slots are open: 5598,8235
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 47.52.41.245:7006 to make it join the cluster.
[OK] New node added correctly.

  1. 查看新增節(jié)點(diǎn)
[root@iZj6c7eeosj2t5vjw8rf4xZ 7006]# redis-cli -c -p 7003 cluster nodes
668397aba571ece85532b1eb1fccb42e4e33b1f2 116.196.65.198:7001 master - 0 1506345812199 2 connected 10923-16383
908430b2bf63669898e9eaef79dd6c1b33c8c57a 116.196.65.198:7002 slave cc86a24f3896ad7530e2687cf52582912f74b661 0 1506345808190 4 connected
33d50636b5235de9970de2da75901b642d2b14d2 116.196.65.198:7000 master - 0 1506345811199 1 connected 0-5460
cc86a24f3896ad7530e2687cf52582912f74b661 172.31.195.1:7003 myself,master - 0 0 4 connected 5461-10922
f38c5163523a5040372f58b95cd184c601fd9388 47.52.41.245:7006 master - 0 1506345807145 0 connected
3a0b27e2e34e72430ce41bb78f6d207579175306 47.52.41.245:7004 slave 33d50636b5235de9970de2da75901b642d2b14d2 0 1506345809150 5 connected
ca60de73e15c19a9aa45da508d270a5781a76724 47.52.41.245:7005 slave 668397aba571ece85532b1eb1fccb42e4e33b1f2 0 1506345809651 6 connected

  1. 增加了新的節(jié)點(diǎn)之后,這個(gè)新的節(jié)點(diǎn)可以成為主節(jié)點(diǎn)或者是從節(jié)點(diǎn)

把這個(gè)節(jié)點(diǎn)變成主節(jié)點(diǎn),使用redis-trib程序,將集群中的某些哈希槽移動(dòng)到新節(jié)點(diǎn)里面, 這個(gè)新節(jié)點(diǎn)就成為真正的主節(jié)點(diǎn)了。
執(zhí)行下面的命令對(duì)集群中的哈希槽進(jìn)行移動(dòng)

cd /usr/local/redis3.0/src
./redis-trib.rb reshard 47.52.41.245:7003

執(zhí)行過程中系統(tǒng)會(huì)提示我們要移動(dòng)多少哈希槽,這里移動(dòng)1000個(gè),然后我們就輸入1000.接著會(huì)問你需要指定把這些哈希槽轉(zhuǎn)移到哪個(gè)節(jié)點(diǎn)上,然后輸入我們新增的節(jié)點(diǎn)id f38c5163523a5040372f58b95cd184c601fd9388,緊接著會(huì)問需要從哪幾個(gè)節(jié)點(diǎn)轉(zhuǎn)移,輸入all就行了,由redis集群自己分配,然后再輸入yes就OK了。然后查看一下節(jié)點(diǎn)狀態(tài)

[root@iZj6c7eeosj2t5vjw8rf4xZ 7006]# redis-cli -c -p 7003 cluster nodes
668397aba571ece85532b1eb1fccb42e4e33b1f2 116.196.65.198:7001 master - 0 1506349557418 2 connected 10923-16383
908430b2bf63669898e9eaef79dd6c1b33c8c57a 116.196.65.198:7002 slave cc86a24f3896ad7530e2687cf52582912f74b661 0 1506349558418 4 connected
33d50636b5235de9970de2da75901b642d2b14d2 116.196.65.198:7000 master - 0 1506349555415 1 connected 0-5460
cc86a24f3896ad7530e2687cf52582912f74b661 172.31.195.1:7003 myself,master - 0 0 4 connected 5598-10922 [5598->-f38c5163523a5040372f58b95cd184c601fd9388]
f38c5163523a5040372f58b95cd184c601fd9388 47.52.41.245:7006 master - 0 1506349556372 7 connected 5461-5597
3a0b27e2e34e72430ce41bb78f6d207579175306 47.52.41.245:7004 slave 33d50636b5235de9970de2da75901b642d2b14d2 0 1506349553367 5 connected
ca60de73e15c19a9aa45da508d270a5781a76724 47.52.41.245:7005 slave 668397aba571ece85532b1eb1fccb42e4e33b1f2 0 1506349558876 6 connected

已經(jīng)有了插槽

  1. 如果想要把新節(jié)點(diǎn)變成某個(gè)節(jié)點(diǎn)的從節(jié)點(diǎn)執(zhí)行如下命令,前提新節(jié)點(diǎn)還沒有分配哈希槽
redis-cli -c -p 7006 cluster replicate 33d50636b5235de9970de2da75901b642d2b14d2 

33d50636b5235de9970de2da75901b642d2b14d2
為某個(gè)主節(jié)點(diǎn)的id。

通過如下命令查看是否成功

redis-cli -p 7000 cluster nodes | grep slave | grep 33d50636b5235de9970de2da75901b642d2b14d2

7000為主節(jié)點(diǎn)的端口,33d50636b5235de9970de2da75901b642d2b14d2為主節(jié)點(diǎn)的id

  1. 可能出現(xiàn)問題
ERR] Nodes don't agree about configuration!
>>> Check for open slots...
[WARNING] Node 116.196.65.198:7000 has slots in importing state (5608).
[WARNING] The following slots are open: 5608

可以通過如下命令解決

#先連接集群
redis-cli -h 116.196.65.198 -c -p 7000
#然后輸入
cluster setslot 5608 stable

#或者通過
redis-trib.rb fix 116.196.65.198:7000

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容