redis集羣搭建
作者:陳土鋒
時間:2020年6月2日
目錄
二、Redis Cluster(Redis集羣)簡介... 2
4.1 原來175是slave,92是master:... 8
5.2 appendonly.aof(數據持久化)... 11
5、說明:redis-cli --cluster help. 13
一、環境介紹
1、機器準備
ip |
系統類型 |
主從關係 |
CPU/內存 |
數據盤目錄大小 |
192.168.20.44 |
redhat 7.6 |
主 |
4核16G |
100G /data |
192.168.20.92 |
redhat 7.6 |
主 |
4核16G |
100G /data |
192.168.20.102 |
redhat 7.6 |
主 |
4核16G |
100G /data |
192.168.20.106 |
redhat 7.6 |
從 |
4核16G |
100G /data |
192.168.20.175 |
redhat 7.6 |
從 |
4核16G |
100G /data |
192.168.20.189 |
redhat 7.6 |
從 |
4核16G |
100G /data |
CPU型號:Intel(R) Xeon(R) CPU E7-4820 v2 @ 2.00GHz
機器分配wiki地址:
http://cmic.tools.bigcloudsys.cn/wiki/pages/viewpage.action?pageId=46084618
2、關閉防護牆和selinux
所有機器執行:
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld
臨時關閉:
setenforce 0
永久關閉:
vim /etc/selinux/config
SELINUX=disabled
3、時間同步
二、Redis Cluster(Redis集羣)簡介
redis是一個開源的key value存儲系統,受到了廣大互聯網公司的青睞。redis3.0版本之前只支持單例模式,在3.0版本及以後才支持集羣,我這裏用的是redis3.0.0版本;
redis集羣採用P2P模式,是完全去中心化的,不存在中心節點或者代理節點;
redis集羣是沒有統一的入口的,客戶端(client)連接集羣的時候連接集羣中的任意節點(node)即可,集羣內部的節點是相互通信的(PING-PONG機制),每個節點都是一個redis實例;
爲了實現集羣的高可用,即判斷節點是否健康(能否正常使用),redis-cluster有這麼一個投票容錯機制:如果集羣中超過半數的節點投票認爲某個節點掛了,那麼這個節點就掛了(fail)。這是判斷節點是否掛了的方法;
那麼如何判斷集羣是否掛了呢? -> 如果集羣中任意一個節點掛了,而且該節點沒有從節點(備份節點),那麼這個集羣就掛了。這是判斷集羣是否掛了的方法;
那麼爲什麼任意一個節點掛了(沒有從節點)這個集羣就掛了呢? -> 因爲集羣內置了16384個slot(哈希槽),並且把所有的物理節點映射到了這16384[0-16383]個slot上,或者說把這些slot均等的分配給了各個節點。當需要在Redis集羣存放一個數據(key-value)時,redis會先對這個key進行crc16算法,然後得到一個結果。再把這個結果對16384進行求餘,這個餘數會對應[0-16383]其中一個槽,進而決定key-value存儲到哪個節點中。所以一旦某個節點掛了,該節點對應的slot就無法使用,那麼就會導致集羣無法正常工作。
綜上所述,每個Redis集羣理論上最多可以有16384個節點。
三、集羣搭建需要的環境
2.1 Redis集羣至少需要3個節點,因爲投票容錯機制要求超過半數節點認爲某個節點掛了該節點纔是掛了,所以2個節點無法構成集羣。
2.2 要保證集羣的高可用,需要每個節點都有從節點,也就是備份節點,所以Redis集羣至少需要6臺服務器。
2.3 redis5.0以後,安裝集羣不在依賴ruby環境。直接使用集羣配置的命令即可搭建。
四、集羣搭建
1、所有服務器安裝redis單點
1.獲取redis資源
cd /usr/local
wget http://download.redis.io/releases/redis-5.0.0.tar.gz
2.解壓
tar xzvf redis-5.0.0.tar.gz
3.安裝
cd redis-5.0.0
make
cd src
make install PREFIX=/usr/local/redis
4.移動配置文件到安裝目錄下
cd /usr/local/redis
mkdir /usr/local/redis/etc
grep -Ev "^#|^$" /usr/local/redis-5.0.0/redis.conf >> /usr/local/redis/etc/redis.conf
5.配置redis爲後臺啓動
vi /usr/local/redis/etc/redis.conf
將daemonize no 改成daemonize yes
設置密碼:requirepass 123456
允許所有機器連接:bind 0.0.0.0
6、添加redis命令到系統中
vim /etc/profile
export REDIS_HOME="/usr/local/redis"
export REDIS_BIN=${REDIS_HOME}/bin
export PATH=${REDIS_BIN}:${PATH}
source /etc/profile
7.將redis加入到開機啓動
vi /etc/rc.local //在裏面添加內容:/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf (意思就是開機調用這段開啓redis的命令)
8.開啓redis
redis-server /usr/local/redis/etc/redis.conf
或者
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
9、停止redis
redis-cli -p 6379 shutdown
/usr/local/redis/bin/redis-cli -a 123456 -p 6379 shutdown
2、修改redis配置
以192.168.20.44爲例:
vim /usr/local/redis/etc/redis.conf
bind 0.0.0.0
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis_6379.pid
#打開集羣
cluster-enabled yes
cluster-config-file /usr/local/redis/etc/redis_node.conf
#節點互連超時時間,毫秒爲單位
cluster-node-timeout 5000
#開啓主從切換,50s超時主從切換。
cluster-require-full-coverage no
cluster-slave-validity-factor 10
#設置密碼
requirepass 123456
#設置主從同步密碼
masterauth 123456
loglevel notice
logfile "/var/log/redis.log"
databases 16
always-show-logo yes
#關閉rdb
#save 900 1
#save 300 10
#save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
#dbfilename dump.rdb
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
#開啓aof模式
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
其他節點的配置和上面一樣即可。
配置文件簡要解析:
我們即將創建示例集羣部署。在繼續之前,讓我們介紹一下Redis Cluster在redis.conf文件中引入的配置參數。有些命令的意思是顯而易見的,有些命令在你閱讀下面的解釋後纔會更加清晰。
1、cluster-enabled <yes/no>:如果想在特定的Redis實例中啓用Redis羣集支持就設置爲yes。 否則,實例通常作爲獨立實例啓動。
2、cluster-config-file <filename>:請注意,儘管有此選項的名稱,但這不是用戶可編輯的配置文件,而是Redis羣集節點每次發生更改時自動保留羣集配置(基本上爲狀態)的文件,以便能夠 在啓動時重新讀取它。 該文件列出了羣集中其他節點,它們的狀態,持久變量等等。 由於某些消息的接收,通常會將此文件重寫並刷新到磁盤上。注意:該配置文件不是redis的原始配置文件!而是集羣配置文件,名字自定義,創建集羣會自動創建該配置文件。
3、cluster-node-timeout <milliseconds>:Redis羣集節點可以不可用的最長時間,而不會將其視爲失敗。 如果主節點超過指定的時間不可達,它將由其從屬設備進行故障切換。 此參數控制Redis羣集中的其他重要事項。 值得注意的是,每個無法在指定時間內到達大多數主節點的節點將停止接受查詢。
4、cluster-slave-validity-factor <factor>:如果設置爲0,無論主設備和從設備之間的鏈路保持斷開連接的時間長短,從設備都將嘗試故障切換主設備。 如果該值爲正值,則計算最大斷開時間作爲節點超時值乘以此選項提供的係數,如果該節點是從節點,則在主鏈路斷開連接的時間超過指定的超時值時,它不會嘗試啓動故障切換。 例如,如果節點超時設置爲5秒,並且有效因子設置爲10,則與主設備斷開連接超過50秒的從設備將不會嘗試對其主設備進行故障切換。 請注意,如果沒有從服務器節點能夠對其進行故障轉移,則任何非零值都可能導致Redis羣集在主服務器出現故障後不可用。 在這種情況下,只有原始主節點重新加入集羣時,集羣纔會返回可用。
5、cluster-migration-barrier <count>:主設備將保持連接的最小從設備數量,以便另一個從設備遷移到不受任何從設備覆蓋的主設備。有關更多信息,請參閱本教程中有關副本遷移的相應部分。
6、cluster-require-full-coverage <yes / no>:如果將其設置爲yes,則默認情況下,如果key的空間的某個百分比未被任何節點覆蓋,則集羣停止接受寫入。 如果該選項設置爲no,則即使只處理關於keys子集的請求,羣集仍將提供查詢。
3、搭建集羣
只需要在其中一個節點執行創建命令,我選擇在192.168.20.44執行:
redis-cli -a "123456" --cluster create 192.168.20.44:6379 192.168.20.92:6379 192.168.20.102:6379 192.168.20.106:6379 192.168.20.175:6379 192.168.20.189:6379 --cluster-replicas 1
五、驗證集羣
1、檢查集羣狀態
redis-cli -a "123456" cluster info
redis-cli -a "123456" cluster nodes
可以通過node-id看出master192.168.20.92節點的redis slave是192.168.20.175。
2、檢查主從節點
redis-cli -a "123456" cluster nodes
可以看到主節點是:
51b5182464948142211fd9181db83c0c99bf3efe 192.168.20.92:6379@16379 master - 0 1591005631568 2 connected 5461-10922
179939f264ed3b46c4764a21e4231d9b882751be 192.168.20.44:6379@16379 myself,master - 0 1591005631000 1 connected 0-5460
e51edb0d70cd0c60a2b12be12b4b13b46263ee57 192.168.20.102:6379@16379 master - 0 1591005630967 3 connected 10923-16383
從節點:
43840f24c975c17d9fdcaeb3caa537d086679202 192.168.20.106:6379@16379 slave 179939f264ed3b46c4764a21e4231d9b882751be 0 1591006232546 4 connected
f57716d5cf46782e70f653540585ee6ff79b3ce9 192.168.20.189:6379@16379 slave e51edb0d70cd0c60a2b12be12b4b13b46263ee57 0 1591006234050 6 connected
30f45c1c4b3fdade7b32a4ca4cbd24ae20786759 192.168.20.175:6379@16379 slave 51b5182464948142211fd9181db83c0c99bf3efe 0 1591006233548 5 connected
3、啓動集羣驗證增刪改查
redis-cli -a "123456" -c --必須加-c才能啓動集羣
或者:
redis-cli -a "123456" -c -h 192.168.20.44 -p 6379
127.0.0.1:6379> set test 1
-> Redirected to slot [6918] located at 192.168.20.92:6379
OK
192.168.20.92:6379>
解析:
-> Redirected to slot [6918] located at 192.168.20.92:6379 --redis集羣會根據key來重定向到其他的節點
在其他節點get的時候會從對應的節點查出這個key值:
192.168.20.44:6379> get test
-> Redirected to slot [6918] located at 192.168.20.92:6379
"1"
測試正常刪除:
192.168.20.92:6379> del test
(integer) 1
192.168.20.92:6379> get test
(nil)
4、驗證故障轉移主從切換
redis-cli -a "123456" cluster nodes
4.1 原來175是slave,92是master:
黃色是nodeid
ce6d458e136cd887cef631c062c1c66203dda396 192.168.20.175:6379@16379 slave 04fd20500fcf96f077394640e0e8554d795f6284 0 1591026117513 5 connected
ed25d3f5aafcd0dd3ca7f76287b5dd017ecf99dd 192.168.20.44:6379@16379 myself,master - 0 1591026117000 1 connected 0-5460
696f5d31840d9b5acdf895cd7bee3d8fde759b38 192.168.20.102:6379@16379 master - 0 1591026116000 3 connected 10923-16383
04fd20500fcf96f077394640e0e8554d795f6284 192.168.20.92:6379@16379 master - 0 1591026116511 2 connected 5461-10922
f28ee3463614d3c5fb37a859ac074c3384e91ab4 192.168.20.106:6379@16379 slave ed25d3f5aafcd0dd3ca7f76287b5dd017ecf99dd 0 1591026117513 4 connected
5c71a8d35d30b495713ff9fee9d7cfd44d8157ea 192.168.20.189:6379@16379 slave 696f5d31840d9b5acdf895cd7bee3d8fde759b38 0 1591026117000 6 connected
4.2 停了192.168.20.92的master
看着192.168.20.175的redis日誌會看到有日誌輸出,如果切換成功也會有日誌輸出:
故障轉移成功提示:
6009:S 01 Jun 2020 23:42:17.486 # Error condition on socket for SYNC: Connection refused
6009:S 01 Jun 2020 23:42:17.560 * Marking node 04fd20500fcf96f077394640e0e8554d795f6284 as failing (quorum reached).
6009:S 01 Jun 2020 23:42:17.586 # Start of election delayed for 543 milliseconds (rank #0, offset 207).
6009:S 01 Jun 2020 23:42:18.188 # Starting a failover election for epoch 7
6009:S 01 Jun 2020 23:42:27.540 * Connecting to MASTER 192.168.20.92:6379
6009:S 01 Jun 2020 23:42:27.540 * MASTER <-> REPLICA sync started
6009:S 01 Jun 2020 23:42:27.540 # Error condition on socket for SYNC: Connection refused
6009:S 01 Jun 2020 23:42:27.641 # Currently unable to failover: Waiting for votes, but majority still not reached.
6009:S 01 Jun 2020 23:42:28.144 # Currently unable to failover: Failover attempt expired.
6009:S 01 Jun 2020 23:42:28.546 * Connecting to MASTER 192.168.20.92:6379
6009:S 01 Jun 2020 23:42:38.195 # Start of election delayed for 511 milliseconds (rank #0, offset 207).
6009:S 01 Jun 2020 23:42:38.296 # Currently unable to failover: Waiting the delay before I can start a new failover.
6009:S 01 Jun 2020 23:42:38.598 * MASTER <-> REPLICA sync started
6009:S 01 Jun 2020 23:42:38.598 # Error condition on socket for SYNC: Connection refused
6009:S 01 Jun 2020 23:42:38.799 # Starting a failover election for epoch 8.
6009:S 01 Jun 2020 23:42:38.803 # Currently unable to failover: Waiting for votes, but majority still not reached.
6009:S 01 Jun 2020 23:42:38.804 # Failover election won: I'm the new master.
6009:S 01 Jun 2020 23:42:38.804 # configEpoch set to 8 after successful failover
6009:M 01 Jun 2020 23:42:38.804 # Setting secondary replication ID to 13472b6e2c05dd941917971c5c7a11bf30e2f9f7, valid up to offset: 208. New replication ID is fcae76ac0d571744e4f4f5ef1d8b6186147c49bf
6009:M 01 Jun 2020 23:42:38.804 * Discarding previously cached master state.
4.3 查看切換後的節點狀態
再去查看redis集羣狀態發現,175已經是成功成爲master,再重啓192.168.20.92的redis,則會變成salve,92後面跟着175的nodeid,說明正在同步175的數據。
redis-cli -a "123456" cluster nodes
ce6d458e136cd887cef631c062c1c66203dda396 192.168.20.175:6379@16379 master - 0 1591026308567 8 connected 5461-10922
ed25d3f5aafcd0dd3ca7f76287b5dd017ecf99dd 192.168.20.44:6379@16379 myself,master - 0 1591026308000 1 connected 0-5460
696f5d31840d9b5acdf895cd7bee3d8fde759b38 192.168.20.102:6379@16379 master - 0 1591026309567 3 connected 10923-16383
04fd20500fcf96f077394640e0e8554d795f6284 192.168.20.92:6379@16379 slave ce6d458e136cd887cef631c062c1c66203dda396 0 1591026308165 8 connected
f28ee3463614d3c5fb37a859ac074c3384e91ab4 192.168.20.106:6379@16379 slave ed25d3f5aafcd0dd3ca7f76287b5dd017ecf99dd 0 1591026309968 4 connected
5c71a8d35d30b495713ff9fee9d7cfd44d8157ea 192.168.20.189:6379@16379 slave 696f5d31840d9b5acdf895cd7bee3d8fde759b38 0 1591026308967 6 connected
六、重建集羣
1、停了所有節點
ansible rediscluster --sudo -m shell -a ' /usr/local/redis/bin/redis-cli -a "123456" shutdown'
2、刪除相關配置
將每個節點下aof、rdb、nodes.conf本地備份文件刪除;
3、啓動集羣各個節點
4、重新執行創建集羣命令
redis-cli -a "123456" --cluster create 192.168.20.44:6379 192.168.20.92:6379 192.168.20.102:6379 192.168.20.106:6379 192.168.20.175:6379 192.168.20.189:6379 --cluster-replicas 1
5、注意事項
爲什麼要刪除aof、rdb、nodes.conf本地備份文件?
5.1 dump.rdb
dump.rdb是由Redis服務器自動生成的 默認情況下 每隔一段時間redis服務器程序會自動對數據庫做一次遍歷,把內存快照寫在一個叫做“dump.rdb”的文件裏,這個持久化機制叫做SNAPSHOT。有了SNAPSHOT後,如果服務器宕機,重新啓動redis服務器程序時redis會自動加載dump.rdb,將數據庫狀態恢復到上一次做SNAPSHOT時的狀態。
5.2 appendonly.aof(數據持久化)
默認情況下Redis會異步的將數據導出到磁盤上。這種模式對許多應用程序已經足夠了,但是如果斷電或者redis進程出問題就會導致一段時間內的更新數據丟失(取決與配置項);
這種只增文件是可選的能夠提供更好的體驗的數據持久化策略。
舉個例子,如果使用默認的配置數據fsync策略,在服務器意外斷電的情況下redis只會丟失一秒中內的更新數據,或者當redis進程出問題但操作系統運轉正常時,redis只會丟失一個數據更新操作。
AOF 和 RDB 持久化方式可以同時啓動並且無衝突。
如果AOF開啓,啓動redis時會加載aof文件,這些文件能夠提供更好的保證。
5.3 nodes.conf
每個集羣節點都有一個集羣配置文件。它是由Redis節點自動創建和更新的。每個Redis集羣節點都需要一個不同的集羣配置文件。
注:確保在同一系統中運行的實例沒有重疊的集羣配置文件名。集羣的配置,配置文件首次啓動自動生成。
七、redis-cluster常用命令
1、查看集羣:
CLUSTER INFO 打印集羣的信息
CLUSTER NODES 列出集羣當前已知的所有節點(node),以及這些節點的相關信息。
redis-cli -c -p 6379 cluster nodes
redis-cli -c -p 6379 cluster info
redis-trib.rb check 10.26.25.115:6379
redis-trib.rb info 10.26.25.115:6379
2、節點(node) 命令
1、加入節點:將 ip 和 port 所指定的節點添加到集羣當中,讓它成爲集羣的一份子。
1)CLUSTER MEET <ip> <port>
2)redis-trib.rb add-node <ip> <port> 10.25.157.78:7022
例如:新增節點:10.80.82.74:7029
redis-trib.rb add-node 10.80.82.74:7029 10.25.157.78:7022
2、移除節點:
1)、登陸集羣任意節點:執行:CLUSTER FORGET <node_id>
2)、redis-trib.rb del-node <ip> <port> <node_id>
例如
redis-trib.rb del-node 10.80.82.74:7030 923e869b3fda8add429fb200ea00ce94bdbc84e6
CLUSTER FORGET 923e869b3fda8add429fb200ea00ce94bdbc84e6
3、設置主從節點:
CLUSTER REPLICATE <node_id> 將當前節點設置爲 node_id 指定的節點的從節點。
4、節點數據備份到硬盤:
CLUSTER SAVECONFIG 將節點的配置文件保存到硬盤裏面。
3、槽(slot命令
CLUSTER ADDSLOTS <slot> [slot ...] 將一個或多個槽(slot)指派(assign)給當前節點。
CLUSTER DELSLOTS <slot> [slot ...] 移除一個或多個槽對當前節點的指派。
CLUSTER FLUSHSLOTS 移除指派給當前節點的所有槽,讓當前節點變成一個沒有指派任何槽的節點。
CLUSTER SETSLOT <slot> NODE <node_id> 將槽 slot 指派給 node_id 指定的節點,如果槽已經指派給另一個節點,那麼先讓另一個節點刪除該槽>,然後再進行指派。
CLUSTER SETSLOT <slot> MIGRATING <node_id> 將本節點的槽 slot 遷移到 node_id 指定的節點中。
CLUSTER SETSLOT <slot> IMPORTING <node_id> 從 node_id 指定的節點中導入槽 slot 到本節點。
CLUSTER SETSLOT <slot> STABLE 取消對槽 slot 的導入(import)或者遷移(migrate)。
4、鍵 (key) 命令
CLUSTER KEYSLOT <key> 計算鍵 key 應該被放置在哪個槽上。
CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的鍵值對數量。
CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 個 slot 槽中的鍵。
5、說明:redis-cli --cluster help
redis-cli --cluster help
Cluster Manager Commands:
create host1:port1 ... hostN:portN #創建集羣
--cluster-replicas <arg> #從節點個數
check host:port #檢查集羣
--cluster-search-multiple-owners #檢查是否有槽同時被分配給了多個節點
info host:port #查看集羣狀態
fix host:port #修復集羣
--cluster-search-multiple-owners #修復槽的重複分配問題
reshard host:port #指定集羣的任意一節點進行遷移slot,重新分slots
--cluster-from <arg> #需要從哪些源節點上遷移slot,可從多個源節點完成遷移,以逗號隔開,傳遞的是節點的node id,還可以直接傳遞--from all,這樣源節點就是集羣的所有節點,不傳遞該參數的話,則會在遷移過程中提示用戶輸入
--cluster-to <arg> #slot需要遷移的目的節點的node id,目的節點只能填寫一個,不傳遞該參數的話,則會在遷移過程中提示用戶輸入
--cluster-slots <arg> #需要遷移的slot數量,不傳遞該參數的話,則會在遷移過程中提示用戶輸入。
--cluster-yes #指定遷移時的確認輸入
--cluster-timeout <arg> #設置migrate命令的超時時間
--cluster-pipeline <arg> #定義cluster getkeysinslot命令一次取出的key數量,不傳的話使用默認值爲10
--cluster-replace #是否直接replace到目標節點
rebalance host:port #指定集羣的任意一節點進行平衡集羣節點slot數量
--cluster-weight <node1=w1...nodeN=wN> #指定集羣節點的權重
--cluster-use-empty-masters #設置可以讓沒有分配slot的主節點參與,默認不允許
--cluster-timeout <arg> #設置migrate命令的超時時間
--cluster-simulate #模擬rebalance操作,不會真正執行遷移操作
--cluster-pipeline <arg> #定義cluster getkeysinslot命令一次取出的key數量,默認值爲10
--cluster-threshold <arg> #遷移的slot閾值超過threshold,執行rebalance操作
--cluster-replace #是否直接replace到目標節點
add-node new_host:new_port existing_host:existing_port #添加節點,把新節點加入到指定的集羣,默認添加主節點
--cluster-slave #新節點作爲從節點,默認隨機一個主節點
--cluster-master-id <arg> #給新節點指定主節點
del-node host:port node_id #刪除給定的一個節點,成功後關閉該節點服務
call host:port command arg arg .. arg #在集羣的所有節點執行相關命令
set-timeout host:port milliseconds #設置cluster-node-timeout
import host:port #將外部redis數據導入集羣
--cluster-from <arg> #將指定實例的數據導入到集羣
--cluster-copy #migrate時指定copy
--cluster-replace #migrate時指定replace
help
For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.
八、可能會遇到的報錯
1、[root@yyxx-vvm-node01 ~]# redis-cli -a "123456" --cluster create 192.168.20.44:6379 192.168.20.92:6379 192.168.20.102:6379 192.168.20.106:6379 192.168.20.175:6379 192.168.20.189:6379 --cluster-replicas 1
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
Could not connect to Redis at 192.168.20.189:6379: No route to host
原因:192.168.20.189的防火牆沒關,導致端口連不上。
九、出現什麼情況導致集羣不可用
通常出現以下2種情況:
1、如果cluster中任意master掛掉,且當前master沒有slave,集羣進入fail狀態情況下。即集羣的slot映射[0-16383]不完成時進入fail態。
2、如果cluster中超過半數以上master掛掉,無論是否有slave,集羣進入fail狀態。