1)Redis集羣是一個能夠在多個Redis節點之間進行數據共享的設施(installation)。node
2)Redis集羣不支持那些須要同時處理多個鍵的Redis命令,由於執行這些命令須要在多個Redis節點之間移動數據,而且在高負載的狀況下,這些命令將下降Redis集羣的性能,並致使不可預測的行爲。redis
3)Redis集羣經過分區(partition)來提供必定程度的可用性(availability):即便集羣中有一部分節點失效或者沒法進行通信,集羣也能夠繼續處理命令請求。數據庫
4)Redis集羣有將數據自動切分(split)到多個節點的能力。vim
高性能ruby
1.在多酚片節點中,將16384個槽位,均勻分佈到多個分片節點中
2.存數據時,將key作crc16(key),而後和16384進行取模,得出槽位值(0-16384之間)
3.根據計算得出的槽位值,找到相對應的分片節點的主節點,存儲到相應槽位上
4.若是客戶端當時鏈接的節點不是未來要存儲的分片節點,分片集羣會將客戶端鏈接切換至真正存儲節點進行數據存儲服務器
高可用
在搭建集羣時,會爲每個分片的主節點,對應一個從節點,實現slaveof功能,同時當主節點down,實現相似於sentinel的自動failover的功能。
app
如圖所示,當咱們用客戶端鏈接A分片時,若是按照數據的取模,咱們想要訪問的數據,不在A分片中,那麼集羣會自動將請求進行轉發。tcp
Redis 集羣使用數據分片(sharding)而非一致性哈希(consistency hashing)來實現: 一個 Redis 集羣包含 16384 個哈希槽(hash slot), 數據庫中的每一個鍵都屬於這 16384 個哈希槽的其中一個, 集羣使用公式 CRC16(key) % 16384 來計算鍵 key 屬於哪一個槽, 其中 CRC16(key) 語句用於計算鍵 key 的 CRC16 校驗和 。分佈式
1.節點 A 負責處理 0 號至 5500 號哈希槽。
2.節點 B 負責處理 5501 號至 11000 號哈希槽。
3.節點 C 負責處理 11001 號至 16384 號哈希槽。
性能
全部的redis節點彼此互聯(PING-PONG機制),內部使用二進制協議優化傳輸速度和帶寬.
節點的fail是經過集羣中超過半數的master節點檢測失效時才生效.
客戶端與redis節點直連,不須要中間proxy層.客戶端不須要鏈接集羣全部節點,鏈接集羣中任何一個可用節點便可
把全部的物理節點映射到[0-16383]slot上,cluster 負責維護node<->slot<->key
爲了使得集羣在一部分節點下線或者沒法與集羣的大多數(majority)節點進行通信的狀況下, 仍然能夠正常運做, Redis 集羣對節點使用了主從複製功能: 集羣中的每一個節點都有 1 個至 N 個複製品(replica), 其中一個複製品爲主節點(master), 而其他的 N-1 個複製品爲從節點(slave)。
在以前列舉的節點 A 、B 、C 的例子中, 若是節點 B 下線了, 那麼集羣將沒法正常運行, 由於集羣找不到節點來處理 5501 號至 11000 號的哈希槽。
假如在建立集羣的時候(或者至少在節點 B 下線以前), 咱們爲主節點 B 添加了從節點 B1 , 那麼當主節點 B 下線的時候, 集羣就會將 B1 設置爲新的主節點, 並讓它代替下線的主節點 B , 繼續處理 5501 號至 11000 號的哈希槽, 這樣集羣就不會由於主節點 B 的下線而沒法正常運做了。
不過若是節點 B 和 B1 都下線的話, Redis 集羣仍是會中止運做。
集羣的複製特性重用了 SLAVEOF 命令的代碼,因此集羣節點的複製行爲和 SLAVEOF 命令的複製行爲徹底相同。
1)在集羣裏面,節點會對其餘節點進行下線檢測。
2)當一個主節點下線時,集羣裏面的其餘主節點負責對下線主節點進行故障移。
3)換句話說,集羣的節點集成了下線檢測和故障轉移等相似 Sentinel 的功能。
4)由於 Sentinel 是一個獨立運行的監控程序,而集羣的下線檢測和故障轉移等功能是集成在節點裏面的,它們的運行模式很是地不一樣,因此儘管這二者的功能很類似,但集羣的實現沒有重用 Sentinel 的代碼。
1)命令發送到了正確的節點:命令要處理的鍵所在的槽正好是由接收命令的節點負責,那麼該節點執行命令,就像單機 Redis 服務器同樣。
2)命令發送到了錯誤的節點:接收到命令的節點並不是處理鍵所在槽的節點,那麼節點將向客戶端返回一個轉向(redirection)錯誤,告知客戶端應該到哪一個節點去執行這個命令,客戶端會根據錯誤提示的信息,從新向正確的節點發送命令。
6個redis實例,通常會放到3臺硬件服務器
注:在企業規劃中,一個分片的兩個分到不一樣的物理機,防止硬件主機宕機形成的整個分片數據丟失。
環境規劃
外網IP | 內網IP | 端口 | 安裝包 |
---|---|---|---|
10.0.0.51 | 172.16.1.51 | 7000,7001 | redis-3.2.12.tar.gz |
10.0.0.52 | 172.16.1.52 | 7002,7003 | redis-3.2.12.tar.gz |
10.0.0.53 | 172.16.1.53 | 7004,7005 | redis-3.2.12.tar.gz |
安裝集羣插件
#EPEL源安裝ruby支持 [root@db01 ~]# yum install ruby rubygems -y #查看gem源 [root@db01 ~]# gem sources -l *** CURRENT SOURCES *** http://rubygems.org/ #添加阿里雲的gem源 [root@db01 ~]# gem sources -a http://mirrors.aliyun.com/rubygems/ http://mirrors.aliyun.com/rubygems/ added to sources #刪除國外gem源 [root@db01 ~]# gem sources --remove https://rubygems.org/ http://rubygems.org/ removed from sources #再次查看gem源 [root@db01 ~]# gem sources -l #使用gem安裝redis的ruby插件 [root@db01 ~]# gem install redis -v 3.3.3 Successfully installed redis-3.3.3 1 gem installed Installing ri documentation for redis-3.3.3... Installing RDoc documentation for redis-3.3.3...
準備6個實例
#下載 [root@db01 ~]# wget http://download.redis.io/releases/redis-3.2.12.tar.gz #解壓 [root@db01 ~]# tar xf redis-3.2.12.tar.gz #移動到指定目錄 [root@db01 ~]# mv redis-3.2.12 /application/ #作軟連接 [root@db01 ~]# ln -s /application/redis-3.2.12 /application/redis #進入redis目錄 [root@db01 ~]# cd /application/redis #編譯 [root@db01 redis]# make #添加環境變量 [root@db01 redis]# vim /etc/profile.d/redis.sh export PATH="/application/redis/src:$PATH" #啓動redis [root@db01 redis]# src/redis-server &
配置多實例
#建立多實例目錄 [root@db01 ~]# mkdir -p /data/700{0..5} #編輯多實例配置文件 [root@db01 ~]# vim /data/7000/redis.conf port 7000 daemonize yes pidfile /data/7000/redis.pid loglevel notice logfile "/data/7000/redis.log" dbfilename dump.rdb dir /data/7000 protected-mode no cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes [root@db01 ~]# vim /data/7001/redis.conf port 7001 daemonize yes pidfile /data/7001/redis.pid loglevel notice logfile "/data/7001/redis.log" dbfilename dump.rdb dir /data/7001 protected-mode no cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes [root@db01 ~]# vim /data/7002/redis.conf port 7002 daemonize yes pidfile /data/7002/redis.pid loglevel notice logfile "/data/7002/redis.log" dbfilename dump.rdb dir /data/7002 protected-mode no cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes [root@db01 ~]# vim /data/7003/redis.conf port 7003 daemonize yes pidfile /data/7003/redis.pid loglevel notice logfile "/data/7003/redis.log" dbfilename dump.rdb dir /data/7003 protected-mode no cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes [root@db01 ~]# vim /data/7004/redis.conf port 7004 daemonize yes pidfile /data/7004/redis.pid loglevel notice logfile "/data/7004/redis.log" dbfilename dump.rdb dir /data/7004 protected-mode no cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes [root@db01 ~]# vim /data/7005/redis.conf port 7005 daemonize yes pidfile /data/7005/redis.pid loglevel notice logfile "/data/7005/redis.log" dbfilename dump.rdb dir /data/7005 protected-mode no cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes #啓動節點 [root@db01 ~]# redis-server /data/7000/redis.conf [root@db01 ~]# redis-server /data/7001/redis.conf [root@db01 ~]# redis-server /data/7002/redis.conf [root@db01 ~]# redis-server /data/7003/redis.conf [root@db01 ~]# redis-server /data/7004/redis.conf [root@db01 ~]# redis-server /data/7005/redis.conf #檢查端口 [root@db01 ~]# netstat -lntup|grep 700* tcp 0 0 0.0.0.0:17003 0.0.0.0:* LISTEN 7433/redis-server * tcp 0 0 0.0.0.0:17004 0.0.0.0:* LISTEN 7437/redis-server * tcp 0 0 0.0.0.0:17005 0.0.0.0:* LISTEN 7443/redis-server * tcp 0 0 0.0.0.0:7000 0.0.0.0:* LISTEN 7423/redis-server * tcp 0 0 0.0.0.0:7001 0.0.0.0:* LISTEN 7425/redis-server * tcp 0 0 0.0.0.0:7002 0.0.0.0:* LISTEN 7429/redis-server * tcp 0 0 0.0.0.0:7003 0.0.0.0:* LISTEN 7433/redis-server * tcp 0 0 0.0.0.0:7004 0.0.0.0:* LISTEN 7437/redis-server * tcp 0 0 0.0.0.0:7005 0.0.0.0:* LISTEN 7443/redis-server * tcp 0 0 0.0.0.0:17000 0.0.0.0:* LISTEN 7423/redis-server * tcp 0 0 0.0.0.0:17001 0.0.0.0:* LISTEN 7425/redis-server * tcp 0 0 0.0.0.0:17002 0.0.0.0:* LISTEN 7429/redis-server * tcp 0 0 :::17003 :::* LISTEN 7433/redis-server * tcp 0 0 :::17004 :::* LISTEN 7437/redis-server * tcp 0 0 :::17005 :::* LISTEN 7443/redis-server * tcp 0 0 :::7000 :::* LISTEN 7423/redis-server * tcp 0 0 :::7001 :::* LISTEN 7425/redis-server * tcp 0 0 :::7002 :::* LISTEN 7429/redis-server * tcp 0 0 :::7003 :::* LISTEN 7433/redis-server * tcp 0 0 :::7004 :::* LISTEN 7437/redis-server * tcp 0 0 :::7005 :::* LISTEN 7443/redis-server * tcp 0 0 :::17000 :::* LISTEN 7423/redis-server * tcp 0 0 :::17001 :::* LISTEN 7425/redis-server * tcp 0 0 :::17002 :::* LISTEN 7429/redis-server * #檢查進程 [root@db01 ~]# ps -ef|grep redis root 7423 1 0 18:30 ? 00:00:00 redis-server *:7000 [cluster] root 7425 1 0 18:30 ? 00:00:00 redis-server *:7001 [cluster] root 7429 1 0 18:30 ? 00:00:00 redis-server *:7002 [cluster] root 7433 1 0 18:30 ? 00:00:00 redis-server *:7003 [cluster] root 7437 1 0 18:30 ? 00:00:00 redis-server *:7004 [cluster] root 7443 1 0 18:30 ? 00:00:00 redis-server *:7005 [cluster]
將全部節點加入集羣
#前三個爲主節點,後三個爲從節點 [root@db01 ~]# redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 #顯示信息 >>> Creating cluster >>> Performing hash slots allocation on 6 nodes... #前三個爲主節點 Using 3 masters: 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 #主從關係 Adding replica 127.0.0.1:7003 to 127.0.0.1:7000 Adding replica 127.0.0.1:7004 to 127.0.0.1:7001 Adding replica 127.0.0.1:7005 to 127.0.0.1:7002 #槽位分配 M: c1838701432c77418850dcab8fbc6edd8c15c697 127.0.0.1:7000 slots:0-5460 (5461 slots) master M: 80d141fdf0af0a90c98ab911812e810ac073940f 127.0.0.1:7001 slots:5461-10922 (5462 slots) master M: c74da3c4b8250425fa3626fd486364371188b1ee 127.0.0.1:7002 slots:10923-16383 (5461 slots) master S: 15bb1efcbddf404ed079651b34cc4d8a56e769e8 127.0.0.1:7003 replicates c1838701432c77418850dcab8fbc6edd8c15c697 S: 797516c376ab94eb8211414efd5cf5e4074945d7 127.0.0.1:7004 replicates 80d141fdf0af0a90c98ab911812e810ac073940f S: 49de58635d02ee66ce950e44bf06d055faf44131 127.0.0.1:7005 replicates c74da3c4b8250425fa3626fd486364371188b1ee Can I set the above configuration? (type 'yes' to accept):yes
查看集羣狀態
#查看集羣主節點狀態 [root@db01 ~]# redis-cli -p 7000 cluster nodes |grep master c74da3c4b8250425fa3626fd486364371188b1ee 127.0.0.1:7002 master - 0 1554633602486 3 connected 10923-16383 80d141fdf0af0a90c98ab911812e810ac073940f 127.0.0.1:7001 master - 0 1554633602990 2 connected 5461-10922 c1838701432c77418850dcab8fbc6edd8c15c697 127.0.0.1:7000 master - 0 1554633603493 1 connected 0-5460 #查看集羣從節點狀態 [root@db01 ~]# redis-cli -p 7004 cluster nodes |grep slave 15bb1efcbddf404ed079651b34cc4d8a56e769e8 127.0.0.1:7003 slave c1838701432c77418850dcab8fbc6edd8c15c697 0 1554633682768 4 connected 49de58635d02ee66ce950e44bf06d055faf44131 127.0.0.1:7005 slave c74da3c4b8250425fa3626fd486364371188b1ee 0 1554633683273 6 connected 797516c376ab94eb8211414efd5cf5e4074945d7 127.0.0.1:7004 myself,slave 80d141fdf0af0a90c98ab911812e810ac073940f 0 0 5 connected
在另一臺機器上,準備兩個實例,或者在本機也能夠。
#建立多實例目錄 [root@db02 ~]# mkdir -p /data/700{6,7} #添加多實例配置文件 [root@db02 ~]# vim /data/7006/redis.conf port 7006 daemonize yes pidfile /data/7006/redis.pid loglevel notice logfile "/data/7006/redis.log" dbfilename dump.rdb dir /data/7006 protected-mode no cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes [root@db02 ~]# vim /data/7007/redis.conf port 7007 daemonize yes pidfile /data/7007/redis.pid loglevel notice logfile "/data/7007/redis.log" dbfilename dump.rdb dir /data/7007 protected-mode no cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes #啓動多實例 [root@db02 ~]# redis-server /data/7006/redis.conf [root@db02 ~]# redis-server /data/7007/redis.conf #檢測端口 [root@db02 ~]# netstat -lntup|grep 700 tcp 0 0 0.0.0.0:17006 0.0.0.0:* LISTEN 4896/redis-server * tcp 0 0 0.0.0.0:17007 0.0.0.0:* LISTEN 4900/redis-server * tcp 0 0 0.0.0.0:7006 0.0.0.0:* LISTEN 4896/redis-server * tcp 0 0 0.0.0.0:7007 0.0.0.0:* LISTEN 4900/redis-server * tcp 0 0 :::17006 :::* LISTEN 4896/redis-server * tcp 0 0 :::17007 :::* LISTEN 4900/redis-server * tcp 0 0 :::7006 :::* LISTEN 4896/redis-server * tcp 0 0 :::7007 :::* LISTEN 4900/redis-server * #檢測進程 [root@db02 ~]# ps -ef|grep redis root 4896 1 0 19:35 ? 00:00:00 redis-server *:7006 [cluster] root 4900 1 0 19:35 ? 00:00:00 redis-server *:7007 [cluster]
#在主節點上執行,將db02上的redis添加到7000端口所在主節點 [root@db01 ~]# redis-trib.rb add-node 172.16.1.52:7006 172.16.1.51:7000 >>> Adding node 172.16.1.52:7006 to cluster 172.16.1.51:7000 >>> Performing Cluster Check (using node 172.16.1.51:7000) M: c1838701432c77418850dcab8fbc6edd8c15c697 172.16.1.51:7000 slots:0-5460 (5461 slots) master 1 additional replica(s) M: c74da3c4b8250425fa3626fd486364371188b1ee 127.0.0.1:7002 slots:10923-16383 (5461 slots) master 1 additional replica(s) S: 15bb1efcbddf404ed079651b34cc4d8a56e769e8 127.0.0.1:7003 slots: (0 slots) slave replicates c1838701432c77418850dcab8fbc6edd8c15c697 M: 80d141fdf0af0a90c98ab911812e810ac073940f 127.0.0.1:7001 slots:5461-10922 (5462 slots) master 1 additional replica(s) S: 797516c376ab94eb8211414efd5cf5e4074945d7 127.0.0.1:7004 slots: (0 slots) slave replicates 80d141fdf0af0a90c98ab911812e810ac073940f S: 49de58635d02ee66ce950e44bf06d055faf44131 127.0.0.1:7005 slots: (0 slots) slave replicates c74da3c4b8250425fa3626fd486364371188b1ee [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. >>> Send CLUSTER MEET to node 172.16.1.52:7006 to make it join the cluster. [OK] New node added correctly. #查看master狀態 [root@db01 ~]# redis-cli -p 7000 cluster nodes |grep master c74da3c4b8250425fa3626fd486364371188b1ee 127.0.0.1:7002 master - 0 1554637395372 3 connected 10923-16383 c1838701432c77418850dcab8fbc6edd8c15c697 172.16.1.51:7000 myself,master - 0 0 1 connected 0-5460 #能夠看到7006節點上並無槽位 f4e3ce12a9aa1fe741634e74b88bb8b70b414f51 172.16.1.52:7006 master - 0 1554637395476 0 connected 80d141fdf0af0a90c98ab911812e810ac073940f 127.0.0.1:7001 master - 0 1554637394866 2 connected 5461-1092
#從新分片 [root@db01 ~]# redis-trib.rb reshard 127.0.0.1:7000 >>> Performing Cluster Check (using node 127.0.0.1:7000) M: c1838701432c77418850dcab8fbc6edd8c15c697 127.0.0.1:7000 slots:0-5460 (5461 slots) master 1 additional replica(s) M: c74da3c4b8250425fa3626fd486364371188b1ee 127.0.0.1:7002 slots:10923-16383 (5461 slots) master 1 additional replica(s) M: f4e3ce12a9aa1fe741634e74b88bb8b70b414f51 172.16.1.52:7006 slots: (0 slots) master 0 additional replica(s) S: 15bb1efcbddf404ed079651b34cc4d8a56e769e8 127.0.0.1:7003 slots: (0 slots) slave replicates c1838701432c77418850dcab8fbc6edd8c15c697 M: 80d141fdf0af0a90c98ab911812e810ac073940f 127.0.0.1:7001 slots:5461-10922 (5462 slots) master 1 additional replica(s) S: 797516c376ab94eb8211414efd5cf5e4074945d7 127.0.0.1:7004 slots: (0 slots) slave replicates 80d141fdf0af0a90c98ab911812e810ac073940f S: 49de58635d02ee66ce950e44bf06d055faf44131 127.0.0.1:7005 slots: (0 slots) slave replicates c74da3c4b8250425fa3626fd486364371188b1ee [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. #你想要轉移多少slot(槽位)到新節點 How many slots do you want to move (from 1 to 16384)?4096 #哪一個節點接收這些槽位?ID What is the receiving node ID? f4e3ce12a9aa1fe741634e74b88bb8b70b414f51 Please enter all the source node IDs. Type 'all' to use all the nodes as source nodes for the hash slots. Type 'done' once you entered all the source nodes IDs. #源節點的ID Source node #1:all #是否確認分片計劃 Do you want to proceed with the proposed reshard plan (yes/no)? yes
#查詢主節點ID [root@db01 ~]# redis-cli -p 7000 cluster nodes |grep master c74da3c4b8250425fa3626fd486364371188b1ee 127.0.0.1:7002 master - 0 1554638379595 3 connected 12288-16383 c1838701432c77418850dcab8fbc6edd8c15c697 172.16.1.51:7000 myself,master - 0 0 1 connected 1365-5460 f4e3ce12a9aa1fe741634e74b88bb8b70b414f51 172.16.1.52:7006 master - 0 1554638379089 7 connected 0-1364 5461-6826 10923-12287 80d141fdf0af0a90c98ab911812e810ac073940f 127.0.0.1:7001 master - 0 1554638378584 2 connected 6827-10922 #添加從節點 [root@db01 ~]# redis-trib.rb add-node --slave --master-id f4e3ce12a9aa1fe741634e74b88bb8b70b414f51 172.16.1.52:7007 172.16.1.51:7000 >>> Adding node 172.16.1.52:7007 to cluster 172.16.1.51:7000 >>> Performing Cluster Check (using node 172.16.1.51:7000) M: c1838701432c77418850dcab8fbc6edd8c15c697 172.16.1.51:7000 slots:1365-5460 (4096 slots) master 1 additional replica(s) M: c74da3c4b8250425fa3626fd486364371188b1ee 127.0.0.1:7002 slots:12288-16383 (4096 slots) master 1 additional replica(s) M: f4e3ce12a9aa1fe741634e74b88bb8b70b414f51 172.16.1.52:7006 slots:0-1364,5461-6826,10923-12287 (4096 slots) master 0 additional replica(s) S: 15bb1efcbddf404ed079651b34cc4d8a56e769e8 127.0.0.1:7003 slots: (0 slots) slave replicates c1838701432c77418850dcab8fbc6edd8c15c697 M: 80d141fdf0af0a90c98ab911812e810ac073940f 127.0.0.1:7001 slots:6827-10922 (4096 slots) master 1 additional replica(s) S: 797516c376ab94eb8211414efd5cf5e4074945d7 127.0.0.1:7004 slots: (0 slots) slave replicates 80d141fdf0af0a90c98ab911812e810ac073940f S: 49de58635d02ee66ce950e44bf06d055faf44131 127.0.0.1:7005 slots: (0 slots) slave replicates c74da3c4b8250425fa3626fd486364371188b1ee [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. >>> Send CLUSTER MEET to node 172.16.1.52:7007 to make it join the cluster. Waiting for the cluster to join.... >>> Configure node as replica of 172.16.1.52:7006. [OK] New node added correctly. #查看主節點狀態 [root@db01 ~]# redis-cli -p 7000 cluster nodes |grep master c74da3c4b8250425fa3626fd486364371188b1ee 127.0.0.1:7002 master - 0 1554638533957 3 connected 12288-16383 c1838701432c77418850dcab8fbc6edd8c15c697 172.16.1.51:7000 myself,master - 0 0 1 connected 1365-5460 f4e3ce12a9aa1fe741634e74b88bb8b70b414f51 172.16.1.52:7006 master - 0 1554638535468 7 connected 0-1364 5461-6826 10923-12287 80d141fdf0af0a90c98ab911812e810ac073940f 127.0.0.1:7001 master - 0 1554638535971 2 connected 6827-10922 #查看從節點狀態 [root@db01 ~]# redis-cli -p 7000 cluster nodes |grep slave 15bb1efcbddf404ed079651b34cc4d8a56e769e8 127.0.0.1:7003 slave c1838701432c77418850dcab8fbc6edd8c15c697 0 1554638570751 4 connected 797516c376ab94eb8211414efd5cf5e4074945d7 127.0.0.1:7004 slave 80d141fdf0af0a90c98ab911812e810ac073940f 0 1554638571257 5 connected 62952416217385e535fdceb68a9a6825c752714c 172.16.1.52:7007 slave f4e3ce12a9aa1fe741634e74b88bb8b70b414f51 0 1554638572266 7 connected 49de58635d02ee66ce950e44bf06d055faf44131 127.0.0.1:7005 slave c74da3c4b8250425fa3626fd486364371188b1ee 0 1554638572266 6 connected
#從新分片 [root@db01 ~]# redis-trib.rb reshard 127.0.0.1:7000 >>> Performing Cluster Check (using node 127.0.0.1:7000) M: c1838701432c77418850dcab8fbc6edd8c15c697 127.0.0.1:7000 slots:1365-5460 (4096 slots) master 1 additional replica(s) M: c74da3c4b8250425fa3626fd486364371188b1ee 127.0.0.1:7002 slots:12288-16383 (4096 slots) master 1 additional replica(s) M: f4e3ce12a9aa1fe741634e74b88bb8b70b414f51 172.16.1.52:7006 slots:0-1364,5461-6826,10923-12287 (4096 slots) master 1 additional replica(s) S: 15bb1efcbddf404ed079651b34cc4d8a56e769e8 127.0.0.1:7003 slots: (0 slots) slave replicates c1838701432c77418850dcab8fbc6edd8c15c697 M: 80d141fdf0af0a90c98ab911812e810ac073940f 127.0.0.1:7001 slots:6827-10922 (4096 slots) master 1 additional replica(s) S: 797516c376ab94eb8211414efd5cf5e4074945d7 127.0.0.1:7004 slots: (0 slots) slave replicates 80d141fdf0af0a90c98ab911812e810ac073940f S: 62952416217385e535fdceb68a9a6825c752714c 172.16.1.52:7007 slots: (0 slots) slave replicates f4e3ce12a9aa1fe741634e74b88bb8b70b414f51 S: 49de58635d02ee66ce950e44bf06d055faf44131 127.0.0.1:7005 slots: (0 slots) slave replicates c74da3c4b8250425fa3626fd486364371188b1ee [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. #移動多少槽位 How many slots do you want to move (from 1 to 16384)?4096 #接收槽位的節點ID What is the receiving node ID? c1838701432c77418850dcab8fbc6edd8c15c697 #源節點的ID Source node #1:f4e3ce12a9aa1fe741634e74b88bb8b70b414f51 #結束 Source node #2:done #是否確認分片計劃 Do you want to proceed with the proposed reshard plan (yes/no)? yes #查看主節點狀態獲取ID [root@db01 ~]# redis-cli -p 7000 cluster nodes |grep master c74da3c4b8250425fa3626fd486364371188b1ee 127.0.0.1:7002 master - 0 1554638856125 3 connected 12288-16383 c1838701432c77418850dcab8fbc6edd8c15c697 172.16.1.51:7000 myself,master - 0 0 8 connected 0-6826 10923-12287 f4e3ce12a9aa1fe741634e74b88bb8b70b414f51 172.16.1.52:7006 master - 0 1554638856632 7 connected 80d141fdf0af0a90c98ab911812e810ac073940f 127.0.0.1:7001 master - 0 1554638856632 2 connected 6827-10922 #查看從節點狀態獲取ID [root@db01 ~]# redis-cli -p 7000 cluster nodes |grep slave 15bb1efcbddf404ed079651b34cc4d8a56e769e8 127.0.0.1:7003 slave c1838701432c77418850dcab8fbc6edd8c15c697 0 1554638997865 8 connected 797516c376ab94eb8211414efd5cf5e4074945d7 127.0.0.1:7004 slave 80d141fdf0af0a90c98ab911812e810ac073940f 0 1554638998876 5 connected 62952416217385e535fdceb68a9a6825c752714c 172.16.1.52:7007 slave c1838701432c77418850dcab8fbc6edd8c15c697 0 1554638998371 8 connected 49de58635d02ee66ce950e44bf06d055faf44131 127.0.0.1:7005 slave c74da3c4b8250425fa3626fd486364371188b1ee 0 1554638997865 6 connected #刪除節點 [root@db01 ~]# redis-trib.rb del-node 172.16.1.52:7006 f4e3ce12a9aa1fe741634e74b88bb8b70b414f51 >>> Removing node f4e3ce12a9aa1fe741634e74b88bb8b70b414f51 from cluster 172.16.1.52:7006 >>> Sending CLUSTER FORGET messages to the cluster... >>> SHUTDOWN the node. [root@db01 ~]# redis-trib.rb del-node 172.16.1.52:7007 62952416217385e535fdceb68a9a6825c752714c >>> Removing node 62952416217385e535fdceb68a9a6825c752714c from cluster 172.16.1.52:7007 >>> Sending CLUSTER FORGET messages to the cluster... >>> SHUTDOWN the node. #查看主節點狀態,檢查節點是否刪除 [root@db01 ~]# redis-cli -p 7000 cluster nodes |grep master c74da3c4b8250425fa3626fd486364371188b1ee 127.0.0.1:7002 master - 0 1554639086209 3 connected 12288-16383 c1838701432c77418850dcab8fbc6edd8c15c697 172.16.1.51:7000 myself,master - 0 0 8 connected 0-6826 10923-12287 80d141fdf0af0a90c98ab911812e810ac073940f 127.0.0.1:7001 master - 0 1554639085704 2 connected 6827-10922 #查看從節點狀態,檢查節點是否刪除 [root@db01 ~]# redis-cli -p 7000 cluster nodes |grep slave 15bb1efcbddf404ed079651b34cc4d8a56e769e8 127.0.0.1:7003 slave c1838701432c77418850dcab8fbc6edd8c15c697 0 1554639091757 8 connected 797516c376ab94eb8211414efd5cf5e4074945d7 127.0.0.1:7004 slave 80d141fdf0af0a90c98ab911812e810ac073940f 0 1554639092261 5 connected 49de58635d02ee66ce950e44bf06d055faf44131 127.0.0.1:7005 slave c74da3c4b8250425fa3626fd486364371188b1ee 0 1554639091256 6 connected