当redis集群中的节点出现故障时,重新加密密钥
假设我有一个redis集群,节点为10.0.0.1、10.0.0.2、10.0.0.3和10.0.0.4,我将其用作缓存 然后,无论出于何种原因,节点10.0.0.4出现故障并停机。这会导致整个集群崩溃:当redis集群中的节点出现故障时,重新加密密钥,redis,Redis,假设我有一个redis集群,节点为10.0.0.1、10.0.0.2、10.0.0.3和10.0.0.4,我将其用作缓存 然后,无论出于何种原因,节点10.0.0.4出现故障并停机。这会导致整个集群崩溃: 2713:M 13 Apr 21:07:52.415 * FAIL message received from [id1] about [id2] 2713:M 13 Apr 21:07:52.415 # Cluster state changed: fail 这会导致使用“CLUSTERD
2713:M 13 Apr 21:07:52.415 * FAIL message received from [id1] about [id2]
2713:M 13 Apr 21:07:52.415 # Cluster state changed: fail
这会导致使用“CLUSTERDOWN The cluster is down”关闭任何查询
但是,由于我将集群用作缓存,因此我并不真正关心节点是否停机。密钥可以被重新硬装到不同的节点并丢失其内容,而不会影响我的应用程序
有没有办法设置这样的自动重装呢?我找到了一个足够接近我需要的东西 通过将
cluster require full coverage
设置为“否”,集群的其余部分将继续响应查询,尽管客户端需要处理重定向到故障节点的可能性
然后,我可以通过运行以下命令替换损坏的节点:
redis-trib.rb call 10.0.0.1:6379 cluster forget [broken_node_id]
redis-trib.rb add-node 10.0.0.5:6379 10.0.0.1:6379
redis-trib.rb fix 10.0.0.1:6379
其中,
10.0.0.5:6379
是将替换损坏节点的节点。假设当前集群中只有主节点,则肯定会出现集群关闭错误,因为没有关闭主节点的副本,Redis认为集群不安全并触发错误
解决方案
- 创建一个新节点(使用所需参数创建redis.conf)
- 将该节点加入集群
redis-trib.rb添加节点127.0.0.1:6379现有\u主机\u IP:现有\u主机\u端口
- 使节点成为10.0.0.4的从属节点
redis cli-p 6379群集复制节点\u ID\u的\u目标\u主节点
- 首先确保集群状态良好(所有插槽都已覆盖,节点的配置也已达成一致)
redis-trib.rb检查127.0.0.1:6379(在任何主机上)
- 10.0.0.4的压井工艺
- 等待从机成为新的主机。(这会很快发生。分配给10.0.0.4的插槽将自动重新硬装到从机。)
- 检查群集并确保所有插槽都已移动到新主机
redis-trib.rb检查127.0.0.1:6379(在任何主机上)