redis cluster 叢集故障恢復操作思路
問題: redis cluster 叢集為fail,怎麼樣快速恢復?
假設你現在有一個3主3從的redis cluster,很不幸運,你丟了2個節點。怎麼可能這麼倒黴呢,假設呀。redis cluster叢集
狀態為fail,丟失了一些分片。遇到一個叢集狀態為fail,怎麼修復?
生產線上redis用不了,所有的人已經站在你旁邊,總監來回的小碎步,正在和老闆解釋故障的情況。運營和開發正在一遍一遍
的催問,系統啥時候修復,電話被打爆了。研發的同學已經在你身後,看著你的操作。形勢看起來十萬火急。
叢集壞了原因分析:
(1)master節點能啟動,但是master節點的IP變化了,叢集還是根據舊的IP去連線節點,導致叢集不能自愈。
(2)master節點某種原因不能啟動,slave節點壞掉,有部分槽位slot丟失
(3)master節點因為網路原因不能連線,部分分片丟失,有部分槽位slot丟失
修復步驟:
step1 需要把dump.rdb或者appendonly.aof檔案複製出來,目的是先恢復redis節點資料, 如果資料能恢復,可能不需要fix修復命令,叢集就可能恢復。
step2
連線任意一個叢集節點,cluster forget刪除掉有故障的節點。這個時候建議你用call命令,這個命令很好用,寫一條命令,可以在叢集所有節點執行。
redis-cli --cluster call 192.168.8.101:6381 cluster forget <xxx_node_id>
查詢檢查叢集資訊一致。
redis-cli --cluster call 192.168.8.101:6381 cluster nodes
【提示】如果你用redis-cli --cluster del-node命令刪除丟失的節點,命令執行失敗,錯誤提示為連線拒絕。
step3
meet命令新增節點
redis-cli --cluster call 192.168.8.101:6381 cluster meet 192.168.8.101 6384
查詢檢查叢集資訊是否一致。
redis-cli --cluster call 192.168.8.101:6381 cluster nodes
redis-cli --cluster check 192.168.8.101:6381
如果這個時候足夠幸運,cluster應該是恢復了。如果提示[ERR] Not all 16384 slots are covered by nodes.
接下來需要fix修復命令
在這個步驟你也可以使用命令add-node節點增加叢集節點
redis-cli --cluster add-node 192.168.8.102:6384 192.168.8.101:6381
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 192.168.8.102:6384 to make it join the cluster.
[OK] New node added correctly.
執行命令成功。
【注意】如果提示[ERR] Not all 16384 slots are covered by nodes.表示add-node命令執行不成功。
step4
fix修復節點命令
redis-cli --cluster fix 192.168.8.101 6381
修復節點後發現,很多slots都分散在各個節點,slots不連續,如果你有強迫症的話,你肯定會把想不連續的slots放在一起。
對, 我也是這樣想的,於是我就用下面命令進行線上重分配。
【注意】fix修復命令,不僅可以自動刪除disconnected的節點,而且會遷移沒有分配的slots到正常節點,可以使叢集
狀態fail轉變為ok。我之所以手動先給叢集增加一個節點,手動刪除有故障節點,然後fix修復命令,fix是會遷移的slots,需
要代價的,fix完成後,還需要再平衡rebalance叢集。
step5
再平衡rebalance叢集
redis-cli --cluster rebalance --cluster-use-empty-masters --cluster-pipeline 1000 --cluster-simulate 192.168.8.101 6384
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到目標節點
step6
最後不忘記儲存配置 cluster saveconfig
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30393770/viewspace-2886078/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Redis】Redis Cluster-叢集故障轉移Redis
- Redis cluster 叢集Redis
- Redis Cluster(叢集)Redis
- 搭建redis cluster叢集Redis
- 認識Redis叢集——Redis ClusterRedis
- redis偽叢集配置Cluster叢集模式Redis模式
- Redis Cluster叢集模式部署Redis模式
- 【Redis叢集實戰】Redis Cluster 部署Redis
- 記一次Kafka叢集的故障恢復Kafka
- Docker Redis 5.0 叢集(cluster)搭建DockerRedis
- 玩轉Redis叢集之ClusterRedis
- Redis Cluster叢集模式部署XRedis模式
- Redis Cluster高可用叢集線上遷移操作記錄Redis
- Spring Boot整合Redis叢集(Cluster模式)Spring BootRedis模式
- Redis-cluster叢集搭建部署Redis
- 故障分析 | redis cluster 從庫無法自動恢復同步案例一則Redis
- 搭建分散式 Redis Cluster 叢集與 Redis 入門分散式Redis
- Jedis操作單節點redis,叢集及redisTemplate操作redis叢集(一)Redis
- 【Redis】用python操作redis叢集RedisPython
- 在滴滴雲上搭建 Redis-Cluster 叢集Redis
- redis Cluster模式叢集 多機器 docker 部署Redis模式Docker
- Redis Cluster 叢集搭建與擴容、縮容Redis
- node叢集(cluster)
- Redis叢集介紹及測試思路Redis
- Redis的主從複製,哨兵和Cluster叢集Redis
- Kubernetes(k8s)部署redis-cluster叢集K8SRedis
- java操作Redis3.0.6叢集JavaRedisS3
- 【故障公告】沒有龍捲風,k8s叢集翻船3次,投用雙叢集恢復K8S
- Redis Cluster 叢集部署Redis
- 比Redis-cluster還好的redis分散式叢集(twemproxy代理)Redis分散式
- K8s 叢集高可用 master 節點故障如何恢復? 原創K8SAST
- Node js 叢集(cluster)JS
- 部署Redis Cluster 6.0 叢集並開啟密碼認證 和 Redis-cluster-proxy負載Redis密碼負載
- java操作redis叢集連線池JavaRedis
- Redis Cluster 叢集解決方案Redis
- Elasticsearch叢集的備份與恢復Elasticsearch
- redis cluster 故障後,主從位於不同節點的修復。Redis
- Redis 超詳細的手動搭建Cluster叢集步驟Redis