本篇文章給大家?guī)砹岁P于redis的相關知識,其中主要介紹了集群部署的相關問題,包括了主從架構、哨兵高可用架構以及高可用集群等等,希望對大家有幫助。
推薦學習:Redis教程
1、redis主從架構
1.1、主從復制原理
-
從服務器連接主服務器,發(fā)送PSYNC命令;
-
主服務器接收到PSYNC命名后,開始執(zhí)行BGSAVE命令生成RDB文件并使用緩沖區(qū)記錄此后執(zhí)行的所有寫命令;
-
主服務器BGSAVE執(zhí)行完后,向所有從服務器發(fā)送快照文件,并在發(fā)送期間繼續(xù)記錄被執(zhí)行的寫命令;
-
從服務器收到快照文件后丟棄所有舊數(shù)據(jù),載入收到的快照;
-
主服務器快照發(fā)送完畢后開始向從服務器發(fā)送緩沖區(qū)中的寫命令;
-
從服務器完成對快照的載入,開始接收命令請求,并執(zhí)行來自主服務器緩沖區(qū)的寫命令;(從服務器初始化完成)
-
主服務器每執(zhí)行一個寫命令就會向從服務器發(fā)送相同的寫命令,從服務器接收并執(zhí)行收到的寫命令(從服務器初始化完成后的操作)
-
當master與slave之間的連接由于某些原因而斷開時,slave能夠自動重連Master,如果master收到了多個slave并發(fā)連接請求,它只會進行一次持久化,而不是一個連接一次,然后再把這一份持久化的數(shù)據(jù)發(fā)送給多個并發(fā)連接的slave。
1.2、主從復制優(yōu)缺點
優(yōu)點:
-
支持主從復制,主機會自動將數(shù)據(jù)同步到從機,可以進行讀寫分離
-
為了分載Master的讀操作壓力,Slave服務器可以為客戶端提供只讀操作的服務,寫服務仍然必須由Master來完成
-
Slave同樣可以接受其它Slaves的連接和同步請求,這樣可以有效的分載Master的同步壓力。
-
Master Server是以非阻塞的方式為Slaves提供服務。所以在Master-Slave同步期間,客戶端仍然可以提交查詢或修改請求。
-
Slave Server同樣是以非阻塞的方式完成數(shù)據(jù)同步。在同步期間,如果有客戶端提交查詢請求,Redis則返回同步之前的數(shù)據(jù)
缺點:
-
Redis不具備自動容錯和恢復功能,主機從機的宕機都會導致前端部分讀寫請求失敗,需要等待機器重啟或者手動切換前端的IP才能恢復。
-
主機宕機,宕機前有部分數(shù)據(jù)未能及時同步到從機,切換IP后還會引入數(shù)據(jù)不一致的問題,降低了系統(tǒng)的可用性。
-
Redis較難支持在線擴容,在集群容量達到上限時在線擴容會變得很復雜。
1.3、redis主從架構搭建,配置從節(jié)點步驟
此處使用6380作為master節(jié)點 6381和6382作為slave節(jié)點
#1、 創(chuàng)建目錄 conf/master-slave-cluster 存放對應集群的配置信息mkdir -p conf/master-slave-cluster# 創(chuàng)建目錄 data 存放對應集群對應的數(shù)據(jù)信息(數(shù)據(jù)目錄)mkdir -p /usr/local/redis/data/6380 mkdir -p /usr/local/redis/data/6381 mkdir -p /usr/local/redis/data/6382 #復制一份redis.conf文件 重命名redis-6381.conf# 2、將相關配置修改為如下值:# 修改端口號port 6381# 把pid進程號寫入pidfile配置的文件pidfile /var/run/redis_6381.pid # 指定日志存放目錄logfile "6381.log"# 指定數(shù)據(jù)存放目錄dir /usr/local/redis-5.0.3/data/6381 # 需要注釋掉bind# bind 127.0.0.1(bind綁定的是自己機器網(wǎng)卡的ip,如果有多塊網(wǎng)卡可以配多個ip,代表允許客戶端通過機器的哪些網(wǎng)卡ip去訪問,內網(wǎng)一般可以不配置bind,注釋掉即可)# 3、配置主從復制(6380是master不需要配置如下 只需給6381和6382配置如下屬性)# 從本機6379的redis實例復制數(shù)據(jù),Redis 5.0之前使用slaveofreplicaof xxx.xxx.xxx.xxx 6380 # 配置從節(jié)點只讀replica-read-only yes #4、啟動從節(jié)點redis-server redis-6381.conf5、連接從節(jié)點 redis-cli -p 63816、測試在6380實例上寫數(shù)據(jù),6381實例是否能及時同步新修改數(shù)據(jù)7、同樣的方法再配置一個6382的從節(jié)點
1.4、校驗結果
查看redis的主從集群
master操作
# 連接master[root@ip redis]# src/redis-cli -p 6380127.0.0.1:6380> auth xiu123 OK127.0.0.1:6380> set name "zhangsan"OK127.0.0.1:6380> get name "zhangsan"
slave操作
# 連接slavesrc/redis-cli -p 6381127.0.0.1:6381> get name "zhangsan"#從節(jié)點只能進行讀操作127.0.0.1:6381> set name lisi(error) READONLY You can't write against a read only replica.127.0.0.1:6381> 
1.5、數(shù)據(jù)部分復制
當master和slave斷開重連后,一般都會對整份數(shù)據(jù)進行復制。但從redis2.8版本開始,redis改用可以支持部分數(shù)據(jù)復制的命令PSYNC去master同步數(shù)據(jù),slave與master能夠在網(wǎng)絡連接斷開重連后只進行部分數(shù)據(jù)復制(斷點續(xù)傳)。
master會在其內存中創(chuàng)建一個復制數(shù)據(jù)用的緩存隊列,緩存最近一段時間的數(shù)據(jù),master和它所有的slave都維護了復制的數(shù)據(jù)下標offset和master的進程id,因此,當網(wǎng)絡連接斷開后,slave會請求master繼續(xù)進行未完成的復制,從所記錄的數(shù)據(jù)下標開始。如果master進程id變化了,或者從節(jié)點數(shù)據(jù)下標offset太舊,已經(jīng)不在master的緩存隊列里了,那么將會進行一次全量數(shù)據(jù)的復制。
主從復制(部分復制,斷點續(xù)傳)流程圖:
如果有很多從節(jié)點,為了緩解主從復制風暴**(多個從節(jié)點同時復制主節(jié)點導致主節(jié)點壓力過大),可以做如下架構,讓部分從節(jié)點與從節(jié)點(與主節(jié)點同步)同步數(shù)據(jù)
2、Redis哨兵高可用架構
sentinel哨兵是特殊的redis服務,不提供讀寫服務,主要用來監(jiān)控redis實例節(jié)點。哨兵的作用就是監(jiān)控Redis系統(tǒng)的運行狀況。它的功能包括以下兩個
(1)監(jiān)控主服務器和從服務器是否正常運行。
(2)主服務器出現(xiàn)故障時自動將從服務器轉換為主服務器。
2.1、哨兵的工作方式
- 哨兵架構下client端第一次從哨兵找出redis的主節(jié)點,后續(xù)就直接訪問redis的主節(jié)點,當redis的主節(jié)點發(fā)生變化,哨兵會第一時間感知到,并且將新的redis主節(jié)點通知給client端。
- Sentinel 會定時的對自己監(jiān)控的 master 執(zhí)行 info 命令,獲取最新的主從關系,還會定時的給所有的 redis 節(jié)點發(fā)送 ping 心跳檢測命令,如果檢測到某個 master 無法響應了,就會在給其他 Sentinel 發(fā)送消息,主觀認為該 master 宕機,如果 Sentinel 集群認同該 master 下線的人數(shù)達到一個值,那么大家統(tǒng)一意見,下線該 master。
- 下線之前需要做的是找 Sentinel 集群中的某一個來執(zhí)行下線操作,這個步驟叫領導者選舉,選出來以后會從該 master 所有的 slave 節(jié)點中挑一個合適的作為新的 master,并讓其他 slave 重新同步新的 master
- 若沒有足夠數(shù)量的 Sentinel(哨兵)進程同意 Master主服務器下線, Master主服務器的客觀下線狀態(tài)就會被移除。若 Master主服務器重新向 Sentinel(哨兵)進程發(fā)送 PING 命令返回有效回復,Master主服務器的主觀下線狀態(tài)就會被移除。
三個定時任務
sentinel在內部有3個定時任務
1)每10秒每個sentinel會對master和slave執(zhí)行info命令,這個任務達到兩個目的:
a)發(fā)現(xiàn)slave節(jié)點
b)確認主從關系
2)每2秒每個sentinel通過master節(jié)點的channel交換信息(pub/sub)。master節(jié)點上有一個發(fā)布訂閱的頻道(sentinel:hello)。sentinel節(jié)點通過__sentinel__:hello頻道進行信息交換(對節(jié)點的”看法”和自身的信息),達成共識。
3)每1秒每個sentinel對其他sentinel和redis節(jié)點執(zhí)行ping操作(相互監(jiān)控),這個其實是一個心跳檢測,是失敗判定的依據(jù)。
2.2、哨兵模式的優(yōu)缺點
優(yōu)點:
哨兵模式是基于主從模式的,所有主從的優(yōu)點,哨兵模式都具有。
主從可以自動切換,系統(tǒng)更健壯,可用性更高。
缺點:
Redis較難支持在線擴容,在集群容量達到上限時在線擴容會變得很復雜。
2.3、redis哨兵架構搭建步驟
2.3.1、配置sentinel.conf文件
# 1、復制一份sentinel.conf文件mkdir sentinelcp sentinel.conf sentinel-26380.conf # 保護模式protected-mode no # 端口號port 26380# 是否靜默啟動daemonize yes # pid進程號pidfile "/var/run/redis-sentinel-26380.pid" # 日志文件logfile "/usr/local/redis/data/6380/sentinel.log" # 哨兵服務數(shù)據(jù)存儲dir "/usr/local/redis/data" # 哨兵監(jiān)控 sentinel monitor <masterName> <maste節(jié)點redis ip> <num 哨兵認可主觀下線數(shù)量> # 故障轉移后 master節(jié)點ip會發(fā)生變化sentinel monitor mymaster 182.92.189.235 6380 2 # 連接master節(jié)點 密碼# 設置連接master和slave時的密碼,注意的是sentinel不能分別為master和slave設置不同的密碼,因此master和slave的密碼應該設置相同。sentinel auth-pass mymaster xiu123#sentinel config-epoch mymaster 9#sentinel leader-epoch mymaster 9# 自動生成 從節(jié)點信息 但是此處沒有自動生成sentinel known-slave mymaster 182.92.189.235 6381sentinel known-slave mymaster 182.92.189.235 6382 # 自動生成配置 啟動回自動生成一些配置
2.3.2、啟動哨兵服務實例
#啟動sentinel哨兵實例src/redis-sentinel sentinel-26380.conf #查看sentinel的info信息src/redis-cli -p 26379127.0.0.1:26379>info #可以看到Sentinel的info里已經(jīng)識別出了redis的主從 #同理再次添加兩個sentinel,端口26381和26382 并同理啟動,注意上述配置文件里的對應數(shù)字都要修改
sentinel集群都啟動完畢后,會將哨兵集群的元數(shù)據(jù)信息寫入所有sentinel的配置文件里去(追加在文件的最下面),我們查看下如下配置文件sentinel-26380.conf,如下所示:
2.3.3、redis哨兵模式故障遷移
"shell # 1、查看當前redis 集群服務 一主兩從三哨兵 [root@iZ2ze505h9bgsa1t9twojyZ redis]# ps -ef | grep redis root 1166 30926 0 22:43 pts/2 00:00:00 grep --color=auto redis root 28998 1 0 21:12 ? 00:00:06 src/redis-server *:6380 root 29010 1 0 21:12 ? 00:00:06 src/redis-server *:6381 root 29020 1 0 21:12 ? 00:00:06 src/redis-server *:6382 root 31686 1 0 22:05 ? 00:00:05 src/redis-sentinel *:26380 [sentinel] root 32553 1 0 22:22 ? 00:00:03 src/redis-sentinel *:26381 [sentinel] root 32562 1 0 22:22 ? 00:00:03 src/redis-sentinel *:26382 [sentinel] [root@iZ2ze505h9bgsa1t9twojyZ redis]# src/redis-cli -p 6380 127.0.0.1:6380> auth xiu123 OK 127.0.0.1:6380> info replication # Replication role:master connected_slaves:2 slave0:ip=182.92.189.235,port=6381,state=online,offset=261525,lag=0 slave1:ip=182.92.189.235,port=6382,state=online,offset=261525,lag=1 ... 省略部分代碼 127.0.0.1:6380> quit # 殺掉 redis [root@iZ2ze505h9bgsa1t9twojyZ redis]# kill -9 28998 # 查看日志 [root@iZ2ze505h9bgsa1t9twojyZ redis]# tail -f data/6380/sentinel.log # 該哨兵認為主觀下線 31686:X 12 Nov 2021 22:45:40.110 # +sdown master mymaster 182.92.189.235 6382 # 到達主觀下線闕值 則客觀下線 31686:X 12 Nov 2021 22:45:40.181 # +odown master mymaster 182.92.189.235 6382 #quorum 2/2 31686:X 12 Nov 2021 22:45:40.181 # +new-epoch 18 # 嘗試故障轉移 31686:X 12 Nov 2021 22:45:40.181 # +try-failover master mymaster 182.92.189.235 6382 # 投票選舉主節(jié)點 31686:X 12 Nov 2021 22:45:40.189 # +vote-for-leader ba9eed52de8664c3fd8d76d9728b42a309c3401b 18 # 選擇主節(jié)點 6381 31686:X 12 Nov 2021 22:45:41.362 # +switch-master mymaster 182.92.189.235 6382 182.92.189.235 6381 #查看新的主從節(jié)點信息 主節(jié)點6381 從節(jié)點6382 [root@iZ2ze505h9bgsa1t9twojyZ redis]# src/redis-cli -p 6381 127.0.0.1:6381> auth xiu123 OK 127.0.0.1:6381> info replication # Replication role:master connected_slaves:1 slave0:ip=182.92.189.235,port=6382,state=online,offset=469749,lag=0 "
3、Redis 高可用集群
3.1、高可用集群模式
3.2、Redis-Cluster集群
redis的哨兵模式基本已經(jīng)可以實現(xiàn)高可用,讀寫分離 ,但是在這種模式下每臺redis服務器都存儲相同的數(shù)據(jù),很浪費內存,所以在redis3.0上加入了cluster模式,實現(xiàn)的redis的分布式存儲,也就是說每臺redis節(jié)點上存儲不同的內容。
Redis-Cluster采用無中心結構,它的特點如下:
所有的redis節(jié)點彼此互聯(lián)(PING-PONG機制),內部使用二進制協(xié)議優(yōu)化傳輸速度和帶寬。
節(jié)點的fail是通過集群中超過半數(shù)的節(jié)點檢測失效時才生效。
客戶端與redis節(jié)點直連,不需要中間代理層.客戶端不需要連接集群所有節(jié)點,連接集群中任何一個可用節(jié)點即可。
工作方式:
-
在redis的每一個節(jié)點上,都有這么兩個東西,一個是插槽(slot),它的的取值范圍是:0-16383。還有一個就是cluster,可以理解為是一個集群管理的插件。當我們的存取的key到達的時候,redis會根據(jù)crc16的算法得出一個結果(hash函數(shù)),然后把結果對 16384 求余數(shù),這樣每個 key 都會對應一個編號在 0-16383 之間的哈希槽,通過這個值,去找到對應的插槽所對應的節(jié)點,然后直接自動跳轉到這個對應的節(jié)點上進行存取操作。
-
為了保證高可用,redis-cluster集群引入了主從模式,一個主節(jié)點對應一個或者多個從節(jié)點,當主節(jié)點宕機的時候,就會啟用從節(jié)點。當其它主節(jié)點ping一個主節(jié)點A時,如果半數(shù)以上的主節(jié)點與A通信超時,那么認為主節(jié)點A宕機了。如果主節(jié)點A和它的從節(jié)點A1都宕機了,那么該集群就無法再提供服務了。
-
redis集群是一個由多個主從節(jié)點群組成的分布式服務器群,它具有復制、高可用和分片特性。Redis集群不需要sentinel哨兵·也能完成節(jié)點移除和故障轉移的功能。需要將每個節(jié)點設置成集群模式,這種集群模式?jīng)]有中心節(jié)點,可水平擴展,據(jù)官方文檔稱可以線性擴展到上萬個節(jié)點(官方推薦不超過1000個節(jié)點)。redis集群的性能和高可用性均優(yōu)于之前版本的哨兵模式,且集群配置非常簡單
3.3、Redis高可用集群搭建
3.3.1、redis集群搭建
redis集群需要至少三個master節(jié)點,我們這里搭建三個master節(jié)點,并且給每個master再搭建一個slave節(jié)點,總共6個redis節(jié)點,這里用三臺機器部署6個redis實例,每臺機器一主一從,搭建集群的步驟如下:
6383(主) 6384(從)
6385(主) 6386(從)
6387(主) 6388(從)
節(jié)點配置
# 是否靜默啟動 daemonize yes #端口號 port 6383 # pid進程文件 pidfile /var/run/redis_6383.pid #數(shù)據(jù)存儲 dir /usr/local/redis/data/redis-cluster/6383/ # 指定日志存放目錄 logfile "/usr/local/redis/data/cluster-6383.log" #是否啟動集群模式 cluster-enabled yes #(集群節(jié)點信息文件,這里最好和port對應上) cluster-config-file nodes-6383.conf cluster-node-timeout 10000 # 關閉保護模式 protected-mode no
創(chuàng)建集群
redis集群配置好后,在5.X版本之前需要需要使用ruby腳本去創(chuàng)建集群,但是5.x之后可以通過redis-cli 執(zhí)行創(chuàng)建集群命令即可
# 分別啟動redis實例 src/redis-server conf/cluster/638*/redis.conf # 下面命令里的1代表為每個創(chuàng)建的主服務器節(jié)點創(chuàng)建一個從服務器節(jié)點 # 執(zhí)行這條命令需要確認三臺機器之間的redis實例要能相互訪問,可以先簡單把所有機器防火墻關掉,如果不關閉防火墻則需要打開redis服務端口和集群節(jié)點gossip通信端口16379(默認是在redis端口號上加1W) # 關閉防火墻 # systemctl stop firewalld # 臨時關閉防火墻 # systemctl disable firewalld # 禁止開機啟動 # 注意:下面這條創(chuàng)建集群的命令大家不要直接復制,里面的空格編碼可能有問題導致創(chuàng)建集群不成功 # 本次測試不遠程連接 使用127.0.0.1 如果涉及遠程連接需要設置真實公網(wǎng)ip # -a 密碼。 -- cluster create創(chuàng)建集群 --cluster-replicas 1 每一個master建立一個從節(jié)點 6個實例 中選擇3個作為另外3個主節(jié)點的從節(jié)點,最終變成3主3從 src/redis-cli -a password --cluster create --cluster-replicas 1 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 127.0.0.1:6386 127.0.0.1:6387 127.0.0.1:6388
問題:
#1、這是由于創(chuàng)建集群中的某一個服務中曾經(jīng)插入過數(shù)據(jù),并且已經(jīng)產(chǎn)生了持久化文件,重新再進行創(chuàng)建集群 此時需要flushall命令清空所有數(shù)據(jù) [ERR] Node 127.0.0.1:6383 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0 #測試使用flush不好使用 只要找到配置文件對應數(shù)據(jù)存儲目錄 暴力rm刪除 # 2、登陸某個集群出現(xiàn) 出現(xiàn)CLUSTERDOWN Hash slot not served 原因 啟動集群實例后沒有執(zhí)行集群創(chuàng)建
驗證集群
讀寫key需要 對key進行hash 不使用集群模式登陸客戶端,則我們只訪問單獨會提示讓我們去對應的節(jié)點上進行操作
集群登陸
# 連接任意一個客戶端即可:./redis-cli -c -h -p (-a訪問服務端密碼,-c表示集群模式,指定ip地址和端口號) # -a 密碼 -c 集群模式 -h ip -p port src/redis-cli -a password -c -h 127.0.0.1 -p 6383
#進行驗證: cluster info(查看集群信息)、cluster nodes(查看節(jié)點列表) #進行數(shù)據(jù)操作驗證 #關閉集群則需要逐個進行關閉,使用命令: src/redis-cli -a password -c -h 127.0.0.1 -p 638* shutdown
3.3.2、集群故障轉移
上述集群三主三從 。6386、6387、6388分別對應主節(jié)點6383、6384、6385的從,如果某個主節(jié)點宕機,則從節(jié)點會自動被選舉為主節(jié)點繼續(xù)對外提供服務,一定的容錯機制保證高可用。注意存在從節(jié)點的情況下,主從節(jié)點不具備讀寫分離,讀寫都使用主節(jié)點
# 模擬redis的故障轉移 #登陸節(jié)點 發(fā)現(xiàn) name這個key在6384上 age這個key在6383上 wdih這個key在6385上 [root@iZ2ze505h9bgsa1t9twojyZ redis]# src/redis-cli -a xiu123 -c -h 127.0.0.1 -p 6383 127.0.0.1:6384> get name -> Redirected to slot [5798] located at 127.0.0.1:6384 (nil) 127.0.0.1:6384> get age -> Redirected to slot [741] located at 127.0.0.1:6383 "12" 127.0.0.1:6383> get width -> Redirected to slot [15983] located at 127.0.0.1:6385 "110" 127.0.0.1:6385> quit ## 殺掉 6385這個主節(jié)點 [root@iZ2ze505h9bgsa1t9twojyZ redis]# kill -9 14187 # 重新登陸集群 獲取 age、name 還是原來的節(jié)點 獲取width 由6385轉移到了6388 查看6380節(jié)點信息發(fā)現(xiàn)其變?yōu)榱酥鞴?jié)點 [root@iZ2ze505h9bgsa1t9twojyZ redis]# src/redis-cli -a xiu123 -c -h 127.0.0.1 -p 6383 127.0.0.1:6383> get age "12" # 這里因該是在選舉master節(jié)點 導致集群短暫不可用(猜測) 127.0.0.1:6383> get name (error) CLUSTERDOWN The cluster is down 127.0.0.1:6383> get name -> Redirected to slot [5798] located at 127.0.0.1:6384 "xieqx" 127.0.0.1:6384> get width -> Redirected to slot [15983] located at 127.0.0.1:6388 "110" 127.0.0.1:6388> info replication # Replication role:master # 殺掉 6388 則整個集群服務都不可用 127.0.0.1:6383> get name (error) CLUSTERDOWN The cluster is down
3.3.3、集群動態(tài)擴縮容
#復制之前6383節(jié)點配置 創(chuàng)建6389、6390節(jié)點 并啟動實例 --- 集群擴容 ---- #1、 添加master節(jié)點 ## add-node: 后面的分別跟著新加入的***master和集群的某個節(jié)點 NODE_ID*** src/redis-cli --cluster add-node 127.0.0.1:6389 127.0.0.1:6383 -a password # 2、為增加的主節(jié)點添加從節(jié)點 #--cluster-slave 表明添加的是slave節(jié)點 ## add-node: 后面的分別跟著新加入的****slave和slave對應的master NODE_ID*** #--cluster-master-id:表示slave對應的master的node ID src/redis-cli --cluster add-node 127.0.0.1:6390 127.0.0.1:6389 --cluster-slave --cluster-master-id 353662f6868b187ad15bad9b7271b8f0848adf10 -a password # 3、 重新分片slot #-cluster-from:表示slot目前所在的節(jié)點的node ID,多個ID用逗號分隔 #--cluster-to:表示需要新分配節(jié)點的node ID(貌似每次只能分配一個) # --cluster-slots:分配的slot數(shù)量 src/redis-cli --cluster reshard 127.0.0.1:6389 --cluster-from 47318cef1195f4281b7815bf66a41e31d68b6d16,0dbea2fff1554a3bbca70d28b81911e60c5bee6d,2fd29d61e867cb85e2e368ee62aebef33e7aaeb3 --cluster-to 353662f6868b187ad15bad9b7271b8f0848adf10 --cluster-slots 1024 -a password #查看集群信息
--- 集群縮容 ---- #下線節(jié)點127.0.0.1:6389(master)/127.0.0.1:6390(slave) #(1)首先刪除master對應的slave #del-node后面跟著slave節(jié)點的 ip:port 和node ID src/redis-cli --cluster del-node 127.0.0.1:6390 353662f6868b187ad15bad9b7271b8f0848adf10 -a password #(2)清空master的slot 將一個下線的節(jié)點的slot重新分配到其他三個節(jié)點中 #reshard子命令前面已經(jīng)介紹過了,這里需要注意的一點是,由于我們的集群一共有四個主節(jié)點,而每次reshard只能寫一個目的節(jié)點,因此以上命令需要執(zhí)行三次(--cluster-to對應不同的目的節(jié)點)。 #--cluster-yes:不回顯需要遷移的slot,直接遷移。 src/redis-cli --cluster reshard 127.0.0.1:6389 --cluster-from 353662f6868b187ad15bad9b7271b8f0848adf10 --cluster-to 0dbea2fff1554a3bbca70d28b81911e60c5bee6d --cluster-slots 1024 --cluster-yes #(3)下線(刪除)節(jié)點 主節(jié)點 src/redis-cli --cluster del-node 127.0.0.1:6389 353662f6868b187ad15bad9b7271b8f0848adf10
推薦學習:Redis教程