Redis-5.0.0叢集配置
版本:redis-5.0.0
參考:http://redis.io/topics/cluster-tutorial。
叢集部署互動式命令列工具:https://github.com/eyjian/redis-tools/tree/master/deploy
叢集運維命令列工具:https://github.com/eyjian/redis-tools/tree/master
批量操作工具:https://github.com/eyjian/libmooon/releases
目錄
4.3. OOM相關:vm.overcommit_memory 4
4.4. /sys/kernel/mm/transparent_hugepage/enabled 4
10.3. jedis(java cluster client) 13
10.4. r3c(C++ cluster client) 13
1. 前言
本文件基於以前寫的《Redis-3.0.5叢集配置》和《Redis-4.0.11叢集配置》。
redis-3.0.0開始支援叢集,redis-4.0.0開始支援module,redis-5.0.0開始支援類似於kafka那樣的訊息佇列。
本文參考官方文件而成:http://redis.io/topics/cluster-tutorial,不適用redis-5.0.0以下版本,原因是從redis-5.0.0版本開始,redis-trib.rb的功能被redis-cli替代了。
redis-5.0.0以下版本的安裝和部署,可參考:https://blog.csdn.net/Aquester/article/details/50150163。
redis運維工具和部署工具:https://github.com/eyjian/redis-tools。
2. 名詞解釋
名詞 |
解釋 |
ASAP |
As Soon As Possible,儘可能 |
RESP |
Redis Serialization Protocol,redis的序列化協議 |
3. 部署計劃
redis要求至少三主三從共6個節點才能組成redis叢集,測試環境可一臺物理上啟動6個redis節點,但生產環境至少要準備3臺物理機。
服務埠 |
IP地址 |
配置檔名 |
6381 |
192.168.0.251 |
redis-6381.conf |
6382 |
192.168.0.251 |
redis-6382.conf |
6383 |
192.168.0.251 |
redis-6383.conf |
6384 |
192.168.0.251 |
redis-6384.conf |
6385 |
192.168.0.251 |
redis-6385.conf |
6386 |
192.168.0.251 |
redis-6386.conf |
疑問:如果是3臺物理機,會不會主和從節點分佈在同一個物理機上?
4. 修改系統引數
4.1. 修改最大可開啟檔案數
修改檔案/etc/security/limits.conf,加入以下兩行:
* soft nofile 102400 * hard nofile 102400
# End of file |
其中102400為一個程序最大可以開啟的檔案個數,當與RedisServer的連線數多時,需要設定為合適的值。
有些環境修改後,root使用者需要重啟機器才生效,而普通使用者重新登入後即生效。如果是crontab,則需要重啟crontab,如:service crond restart,有些平臺可能是service cron restart。
有些環境下列設定即可讓root重新登入即生效,而不用重啟機器:
root soft nofile 102400 root hard nofile 102400
# End of file |
但是要小心,有些環境上面這樣做,可能導致無法ssh登入,所以在修改時最好開啟兩個視窗,萬一登入不了還可自救。
如何確認更改對一個程序生效?按下列方法(其中$PID為被查的程序ID):
$ cat /proc/$PID/limits |
系統關於/etc/security/limits.conf檔案的說明:
#This file sets the resource limits for the users logged in via PAM. #It does not affect resource limits of the system services. |
PAM:全稱“Pluggable Authentication Modules”,中文名“插入式認證模組”。/etc/security/limits.conf實際為pam_limits.so(位置:/lib/security/pam_limits.so)的配置檔案,只針對單個會話。要使用limits.conf生效,必須保證pam_limits.so被加入到了啟動檔案中。
註釋說明只對通過PAM登入的使用者生效,與PAM相關的檔案(均位於/etc/pam.d目錄下):
/etc/pam.d/login /etc/pam.d/sshd /etc/pam.d/crond |
如果需要設定Linux使用者的密碼策略,可以修改檔案/etc/login.defs,但這個只對新增的使用者有效,如果要影響已有使用者,可使用命令chage。
4.2. TCP監聽佇列大小
即TCP listen的backlog大小,“/proc/sys/net/core/somaxconn”的預設值一般較小如128,需要修改大一點,比如改成32767。立即生效還可以使用命令:sysctl -w net.core.somaxconn=32767。
要想永久生效,需要在檔案/etc/sysctl.conf中增加一行:net.core.somaxconn = 32767,然後執行命令“sysctl -p”以生效。
Redis配置項tcp-backlog的值不能超過somaxconn的大小。
4.3. OOM相關:vm.overcommit_memory
如果“/proc/sys/vm/overcommit_memory”的值為0,則會表示開啟了OOM。可以設定為1關閉OOM,設定方法請參照net.core.somaxconn完成。
4.4. /sys/kernel/mm/transparent_hugepage/enabled
預設值為“[always] madvise never”,建議設定為never,以開啟核心的“Transparent Huge Pages (THP)”特性,設定後redis程序需要重啟。為了永久生效,請將“echo never > /sys/kernel/mm/transparent_hugepage/enabled”加入到檔案/etc/rc.local中。
什麼是Transparent Huge Pages?為提升效能,通過大記憶體頁來替代傳統的4K頁,使用得管理虛擬地址數變少,加快從虛擬地址到實體地址的對映,以及摒棄記憶體頁面的換入換出以提高記憶體的整體效能。核心Kernel將程式快取記憶體中,每頁記憶體以2M為單位。相應的系統程序為khugepaged。
在Linux中,有兩種方式使用Huge Pages,一種是2.6核心引入的HugeTLBFS,另一種是2.6.36核心引入的THP。HugeTLBFS主要用於資料庫,THP廣泛應用於應用程式。
一般可以在rc.local或/etc/default/grub中對Huge Pages進行設定。
5. 目錄結構
redis.conf為從https://raw.githubusercontent.com/antirez/redis/5.0/redis.conf下載的配置檔案,帶埠號的配置檔案基於redis.conf修改。實際只需要完成公共的redis.conf和一個埠號的,如redis-6381.conf,其它埠號的配置檔案基於一個修改後的埠號配置檔案即可。
本文將redis安裝在/data/redis,建議將bin目錄加入到環境變數PATH中,以簡化後續的使用。
如果拿到的是redis原始碼,在make成功後,推薦按下列目錄結構部署各程式檔案:
/data/redis |-- bin | |-- redis-benchmark | |-- redis-check-aof | |-- redis-check-rdb | |-- mkreleasehdr.sh | |-- redis-cli | |-- redis-sentinel -> redis-server | `-- redis-server |-- conf | |-- redis-6381.conf | |-- redis-6382.conf | |-- redis-6383.conf | |-- redis-6384.conf | |-- redis-6385.conf | |-- redis-6386.conf | `-- redis.conf `-- log
3 directories, 14 files |
注意,redis-check-dump和redis-check-rdb是同一個程式,在redis-3.0.0之前叫redis-check-dump,之後更名為redis-check-rdb。
6. 編譯安裝
開啟redis的Makefile檔案,可以看到如下內容:
PREFIX?=/usr/local INSTALL_BIN=$(PREFIX)/bin INSTALL=install |
Makefile中的“?=”表示,如果該變數之前沒有定義過,則賦值為/usr/local,否則什麼也不做。
如果不設定環境變數PREFIX或不修改Makefile中的值,則預設安裝到/usr/local/bin目錄下。建議不要使用預設配置,而是指定安裝目錄,如/data/redis-5.0.0:
$ make $ make install PREFIX=/data/redis-5.0.0 $ ln -s /data/redis-5.0.0 /data/redis $ mkdir /data/redis/conf $ mkdir /data/redis/log $ mkdir /data/redis/data |
7. 配置redis
推薦配置分成兩部分:一是公共配置,另一個與埠相關的配置。公共配置檔名可命令為redis.conf,而埠相關的配置檔名可命令為redis-PORT.conf或redis_PORT.conf。假設埠為6379,則埠相關的配置檔名為redis-6379.conf。redis-PORT.conf通過include的方式包含redis.conf,如:include /data/redis/conf/redis.conf。
從https://raw.githubusercontent.com/antirez/redis/5.0/redis.conf下載配置檔案(也可直接複製原始碼包中的redis.conf,然後在它的基礎上進行修改),在這個基礎上,進行如下表所示的修改(配置檔名redis-PORT.conf中的PORT替換為實際使用的埠號,如6381等)。
高效完成多個埠配置的一個方法是先完成一個指定埠的配置檔案,然後替換埠方式生成另一個埠的配置檔案。如通過埠6381的配置檔案redis-6381.conf生成埠號6382的配置檔案redis-6382.conf,只需要這樣:sed 's/6381/6382/g' redis-6381.conf > redis-6382.conf。
下表配置項,加粗部分是必須和建議修改的,其它可根據實際需求修改:
配置項 (加粗部分必須或建議修改) |
值 |
配置檔案 |
說明 |
include |
redis.conf |
指定埠的配置檔案 redis-PORT.conf (該檔案定義所有與埠相關的配置項,PORT需要替換為具體的埠,如6381) |
引用公共的配置檔案,建議為全路徑值 |
port |
PORT |
客戶端連線埠,並且總有一個剛好大於10000的埠,這個大的埠用於主從複製和叢集內部通訊。 |
|
cluster-config-file |
nodes-PORT.conf |
預設放在dir指定的目錄,注意不能包含目錄,純檔名,為redis-server程序自動維護,不能手工修改 |
|
pidfile |
/var/run/redis-PORT.pid |
只有當daemonize值為yes時,才有意義;並且這個要求對目錄/var/run有寫許可權,否則可以考慮設定為/tmp/redis-PORT.pid,或者放在bin或log目錄下,如:/data/redis/log/redis-PORT.pid。只有當配置項daemonize的值為yes時,才會產生這個檔案。 |
|
dir |
/data/redis/data/PORT |
|
|
dbfilename |
dump-PORT.rdb |
純檔名,位於dir指定的目錄下,不能包含目錄,否則報錯“appendfilename can't be a path, just a filename” |
|
appendfilename |
"appendonly-PORT.aof" |
純檔名,位於dir指定的目錄下,不能包含目錄,否則報錯“appendfilename can't be a path, just a filename” |
|
logfile |
/data/redis/log/redis-PORT.log |
日誌檔案,包含目錄和檔名,注意redis不會自動滾動日誌檔案 |
|
cluster-enabled |
yes |
redis.conf (公共配置檔案,定義所有與埠無關的配置項) |
yes表示以叢集方式執行,為no表示以非叢集方式執行 |
loglevel |
verbose |
日誌級別,建議為notice,另外注意redis是不會滾動日誌檔案的,每次寫日誌都是先開啟日誌檔案再寫日誌再關閉方式 |
|
maxclients |
10000 |
最大連線數 |
|
timeout |
0 |
客戶端多長(秒)時間沒發包過來關閉它,0表示永不關閉 |
|
cluster-node-timeout |
15000 |
單位為毫秒: repl-ping-slave-period+ (cluster-node-timeout* cluster-slave-validity-factor) 判斷節點失效(fail)之前,允許不可用的最大時長(毫秒),如果master不可用時長超過此值,則會被failover。不能太小,建議預設值15000 |
|
cluster-slave-validity-factor |
0 |
如果要最大的可用性,值設定為0。定義slave和master失聯時長的倍數,如果值為0,則只要失聯slave總是嘗試failover,而不管與master失聯多久。失聯最大時長:(cluster-slave-validity-factor*cluster-node-timeout) |
|
repl-timeout |
10 |
該配置項的值要求大於repl-ping-slave-period的值 |
|
repl-ping-slave-period |
1 |
定義slave多久(秒)ping一次master,如果超過repl-timeout指定的時長都沒有收到響應,則認為master掛了 |
|
slave-read-only |
yes |
slave是否只讀 |
|
slave-serve-stale-data |
yes |
當slave與master斷開連線,slave是否繼續提供服務 |
|
slave-priority |
100 |
slave權重值,當master掛掉,只有權重最大的slave接替master |
|
aof-use-rdb-preamble |
|
4.0新增配置項,用於控制是否啟用RDB-AOF混用,值為no表示關閉 |
|
appendonly |
yes |
當同時寫AOF或RDB,則redis啟動時只會載入AOF,AOF包含了全量資料。如果當佇列使用,入隊壓力又很大,建議設定為no |
|
appendfsync |
no |
可取值everysec,其中no表示由系統自動,當寫壓力很大時,建議設定為no,否則容易造成整個叢集不可用 |
|
daemonize |
yes |
相關配置項pidfile |
|
protected-mode |
no |
3.2.0新增的配置項,預設值為yes,限制從其它機器登入Redis server,而只能從127.0.0.1登入。 |
|
tcp-backlog |
32767 |
取值不能超過系統的/proc/sys/net/core/somaxconn |
|
auto-aof-rewrite-percentage |
100 |
設定自動rewite AOF檔案(手工rewrite只需要呼叫命令BGREWRITEAOF) |
|
auto-aof-rewrite-min-size |
64mb |
觸發rewrite的AOF檔案大小,只有大於此大小時才會觸發rewrite |
|
no-appendfsync-on-rewrite |
yes |
子程序在做rewrite時,主程序不呼叫fsync(由核心預設排程) |
|
stop-writes-on-bgsave-error |
yes |
如果因為磁碟故障等導致儲存rdb失敗,停止寫操作,可設定為NO。 |
|
cluster-require-full-coverage |
no |
為no表示有slots不可服務時其它slots仍然繼續服務,建議值為no,以提供最高的可用性 |
|
maxmemory |
26843545600 |
設定最大的記憶體,單位為位元組 |
|
maxmemory-policy |
volatile-lru |
設定達到最大記憶體時的淘汰策略 |
|
client-output-buffer-limit |
|
設定master端的客戶端快取,三種:normal、slave和pubsub |
|
cluster-migration-barrier |
1 |
最少slave數,用來保證叢集中不會有裸奔的master。當某個master節點的slave節點掛掉裸奔後,會從其他富餘的master節點分配一個slave節點過來,確保每個master節點都有至少一個slave節點,不至於因為master節點掛掉而沒有相應slave節點替換為master節點導致叢集崩潰不可用。 |
|
repl-backlog-size |
1mb |
當slave失聯時的,環形複製緩區大小,值越大可容忍更長的slave失聯時長 |
|
repl-backlog-ttl |
|
slave失聯的時長達到該值時,釋放backlog緩衝區 |
|
save |
save 900 1 save 300 10 save 60 10000 |
重新整理快照(RDB)到磁碟的策略,根據實際調整值,“save 900 1”表示900秒後至少有1個key被修改才觸發save操作,其它類推。 注意執行flushall命令也會產生RDB檔案,不過是空檔案。 如果不想生成RDB檔案,可以將save全註釋掉。 |
8. 啟動redis例項
在啟動之前,需要建立好配置中的各目錄。然後啟動好所有的redis例項,如以本文中定義的6個節點為例(帶個目錄是個良好和規範的習慣):
/data/redis/bin/redis-server /data/redis/conf/redis-6381.conf /data/redis/bin/redis-server /data/redis/conf/redis-6382.conf /data/redis/bin/redis-server /data/redis/conf/redis-6383.conf /data/redis/bin/redis-server /data/redis/conf/redis-6384.conf /data/redis/bin/redis-server /data/redis/conf/redis-6385.conf /data/redis/bin/redis-server /data/redis/conf/redis-6386.conf |
可以寫一個啟動指令碼start-redis-cluster.sh:
#!/bin/sh
REDIS_HOME=/data/redis $REDIS_HOME/bin/redis-server $REDIS_HOME/conf/redis-6379.conf $REDIS_HOME/bin/redis-server $REDIS_HOME/conf/redis-6380.conf |
一般需要加上程序監控,可直接使用process_monitor.sh,監控示例(放在crontab中,下載網址:https://github.com/eyjian/libmooon/blob/master/shell/process_monitor.sh):
REDIS_HOME=/data/redis * * * * * /usr/local/bin/process_monitor.sh "$REDIS_HOME/bin/redis-server 6381" "$REDIS_HOME/bin/redis-server $REDIS_HOME/conf/redis_6381.conf" * * * * * log=$REDIS_HOME/log/redis_6381.log;if test `ls -l $log|cut -d' ' -f5` -gt 104857600; then mv $log $log.old; fi |
注意:redis的日誌檔案不會自動滾動,redis-server每次在寫日誌時,均會以追加方式呼叫fopen寫日誌,而不處理滾動。也可藉助linux自帶的logrotate來滾動redis日誌,命令logrotate一般位於目錄/usr/sbin下。
9. 建立和啟動redis叢集
如果只是想快速建立和啟動redis叢集,而不關心過程,可使用redis官方提供的指令碼create-cluster,兩步完成:
create-cluster start create-cluster create |
第二步“create-cluster create”是一個互動式過程,當提示時,請輸入“yes”再回車繼續,第一個節點的埠號為30001,一共會啟動六個redis節點。
create-cluster在哪兒?它位於redis原始碼的utils/create-cluster目錄下,是一個bash指令碼檔案。停止叢集:create-cluster stop。
但如果是為學習和運營,建議按下列步驟操作,以加深對redis叢集的理解,提升掌控能力:
9.1. 建立redis cluster
建立redis叢集命令(三主三從,每個主一個從,注意redis-5.0.0版本開始才支援“--cluster”,之前的版本會報錯“Unrecognized option or bad number of args for: '--cluster'”):
redis-cli --cluster create 192.168.0.251:6381 192.168.0.251:6382 192.168.0.251:6383 192.168.0.251:6384 192.168.0.251:6385 192.168.0.251:6386 --cluster-replicas 1 |
如果配置項cluster-enabled的值不為yes,則執行時會報錯“[ERR] Node 192.168.0.251:6381 is not configured as a cluster node.”。這個時候需要先將cluster-enabled的值改為yes,然後重啟redis-server程序,之後才可以重新執行redis-cli建立叢集。
Ø redis-cli的引數說明:
1) create
表示建立一個redis叢集。
2) --cluster-replicas 1
表示為叢集中的每一個主節點指定一個從節點,即一比一的複製。\
執行過程中,會有個提示,輸入yes回車即可。從螢幕輸出,可以很容易地看出哪些是主(master)節點,哪些是從(slave)節點:
$ ./redis-cli --cluster create 192.168.0.251:6381 192.168.0.251:6382 192.168.0.251:6383 192.168.0.251:6384 192.168.0.251:6385 192.168.0.251:6386 --cluster-replicas 1 >>> Performing hash slots allocation on 6 nodes... Master[0] -> Slots 0 - 5460 Master[1] -> Slots 5461 - 10922 Master[2] -> Slots 10923 - 16383 Adding replica 192.168.0.251:6384 to 192.168.0.251:6381 Adding replica 192.168.0.251:6385 to 192.168.0.251:6382 Adding replica 192.168.0.251:6386 to 192.168.0.251:6383 >>> Trying to optimize slaves allocation for anti-affinity [WARNING] Some slaves are in the same host as their master M: f805e652ff8abe151393430cb3bcbf514b8a7399 192.168.0.251:6381 slots:[0-5460] (5461 slots) master M: bfad383775421b1090eaa7e0b2dcfb3b38455079 192.168.0.251:6382 slots:[5461-10922] (5462 slots) master M: 44eb43e50c101c5f44f48295c42dda878b6cb3e9 192.168.0.251:6383 slots:[10923-16383] (5461 slots) master S: 29fcce29837d3e5266b6178a15aecfa938ff241a 192.168.0.251:6384 replicates bfad383775421b1090eaa7e0b2dcfb3b38455079 S: 0ae8b5400d566907a3d8b425d983ac3b7cbd8412 192.168.0.251:6385 replicates 44eb43e50c101c5f44f48295c42dda878b6cb3e9 S: c67dc9e02e25f2e6321df8ac2eb4d99789917783 192.168.0.251:6386 replicates f805e652ff8abe151393430cb3bcbf514b8a7399 Can I set the above configuration? (type 'yes' to accept): yes >>> Nodes configuration updated >>> Assign a different config epoch to each node >>> Sending CLUSTER MEET messages to join the cluster Waiting for the cluster to join ... >>> Performing Cluster Check (using node 192.168.0.251:6381) M: f805e652ff8abe151393430cb3bcbf514b8a7399 192.168.0.251:6381 slots:[0-5460] (5461 slots) master 1 additional replica(s) S: c67dc9e02e25f2e6321df8ac2eb4d99789917783 192.168.0.251:6386 slots: (0 slots) slave replicates f805e652ff8abe151393430cb3bcbf514b8a7399 S: 29fcce29837d3e5266b6178a15aecfa938ff241a 192.168.0.251:6384 slots: (0 slots) slave replicates bfad383775421b1090eaa7e0b2dcfb3b38455079 M: bfad383775421b1090eaa7e0b2dcfb3b38455079 192.168.0.251:6382 slots:[5461-10922] (5462 slots) master 1 additional replica(s) S: 0ae8b5400d566907a3d8b425d983ac3b7cbd8412 192.168.0.251:6385 slots: (0 slots) slave replicates 44eb43e50c101c5f44f48295c42dda878b6cb3e9 M: 44eb43e50c101c5f44f48295c42dda878b6cb3e9 192.168.0.251:6383 slots:[10923-16383] (5461 slots) master 1 additional replica(s) [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. |
9.2. ps aux|grep redis
檢視redis程序是否已切換為叢集狀態(cluster):
[[email protected] ~]$ ps aux|grep redis-server redis 3824 0.7 5.9 6742404 3885144 ? Ssl 2018 1639:13 /data/redis/bin/redis-server *:6381 [cluster] redis 3825 0.5 3.9 6709636 2618536 ? Ssl 2018 1235:43 /data/redis/bin/redis-server *:6382 [cluster] redis 3826 0.5 3.9 6709636 2618536 ? Ssl 2018 1235:43 /data/redis/bin/redis-server *:6383 [cluster] redis 3827 0.5 3.9 6709636 2618536 ? Ssl 2018 1235:43 /data/redis/bin/redis-server *:6384 [cluster] redis 3828 0.5 3.9 6709636 2618536 ? Ssl 2018 1235:43 /data/redis/bin/redis-server *:6385 [cluster] redis 3829 0.5 3.9 6709636 2618536 ? Ssl 2018 1235:43 /data/redis/bin/redis-server *:6386 [cluster] |
停止redis例項,直接使用kill命令即可,如:kill 3825,重啟和單機版相同。
10. redis cluster client
10.1. 命令列工具redis-cli
官方提供的命令列客戶端工具,在單機版redis基礎上指定引數“-c”即可。以下是在192.168.0.251上執行redis-cli的記錄:
$ ./redis-cli -c -p 6379 127.0.0.1:6379> set foo bar -> Redirected to slot [12182] located at 192.168.0.251:6379 OK 192.168.0.251:6379> set hello world -> Redirected to slot [866] located at 192.168.0.251:6379 OK 192.168.0.251:6379> get foo -> Redirected to slot [12182] located at 192.168.0.251:6379 "bar" 192.168.0.251:6379> get hello -> Redirected to slot [866] located at 192.168.0.251:6379 "world"
檢視叢集中的節點: 192.168.0.251:6379> cluster nodes |
10.2. 從slaves讀資料
預設不能從slaves讀取資料,但建立連線後,執行一次命令READONLY ,即可從slaves讀取資料。如果想再次恢復不能從slaves讀取資料,可以執行下命令READWRITE。
10.3. jedis(java cluster client)
官網:https://github.com/xetorthio/jedis,程式設計示例:
Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>(); //Jedis Cluster will attempt to discover cluster nodes automatically jedisClusterNodes.add(new HostAndPort("127.0.0.1", 7379)); JedisCluster jc = new JedisCluster(jedisClusterNodes); jc.set("foo", "bar"); String value = jc.get("foo"); |
10.4. r3c(C++ cluster client)
官網:https://github.com/eyjian/r3c
11. 新增節點
11.1. 新增一個新主(master)節點
假設要新增新的節點“192.168.0.251:6390”,先以單機版配置和啟動好6387,然後執行命令(“192.168.0.251:6381”為叢集中任一可用的節點):
redis-cli --cluster add-node 192.168.0.251:6390 192.168.0.251:6381 |
如果執行順利,看到的輸出如下:
$ ./redis-cli --cluster add-node 192.168.0.251:6390 192.168.0.251:6381 >>> Adding node 192.168.0.251:6390 to cluster 192.168.0.251:6381 >>> Performing Cluster Check (using node 192.168.0.251:6381) M: f805e652ff8abe151393430cb3bcbf514b8a7399 192.168.0.251:6381 slots:[0-5460] (5461 slots) master 1 additional replica(s) S: c67dc9e02e25f2e6321df8ac2eb4d99789917783 192.168.0.251:6386 slots: (0 slots) slave replicates f805e652ff8abe151393430cb3bcbf514b8a7399 S: 29fcce29837d3e5266b6178a15aecfa938ff241a 192.168.0.251:6384 slots: (0 slots) slave replicates bfad383775421b1090eaa7e0b2dcfb3b38455079 M: bfad383775421b1090eaa7e0b2dcfb3b38455079 192.168.0.251:6382 slots:[5461-10922] (5462 slots) master 1 additional replica(s) S: 0ae8b5400d566907a3d8b425d983ac3b7cbd8412 192.168.0.251:6385 slots: (0 slots) slave replicates 44eb43e50c101c5f44f48295c42dda878b6cb3e9 M: 44eb43e50c101c5f44f48295c42dda878b6cb3e9 192.168.0.251:6383 slots:[10923-16383] (5461 slots)&nb |