当redis集群中的节点出现故障时,重新加密密钥

当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

假设我有一个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
这会导致使用“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(在任何主机上)

无需手动操作。此外,如果集群中有更多的从机,它们也可能被提升为其他主机的新主机。(例如,您有一个3主3从的设置。主1关闭,从1变为新主。从1关闭,从1可以作为主1成为新主。)