【问题标题】:Resharding keys when a node goes down in redis cluster当节点在redis集群中关闭时重新分片密钥
【发布时间】:2015-06-19 08:42:26
【问题描述】:

假设我有一个包含节点 10.0.0.1、10.0.0.2、10.0.0.3 和 10.0.0.4 的 redis 集群,我将其用作缓存。

然后,无论出于何种原因,节点 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”关闭。

但是,由于我将集群用作缓存,所以我并不关心节点是否出现故障。密钥可以重新分片到不同的节点并丢失其内容,而不会影响我的应用程序。

有没有办法设置这种自动重新分片?

【问题讨论】:

    标签: redis


    【解决方案1】:

    我找到了足够接近我需要的东西。

    通过将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 是替换损坏节点的节点。

    【讨论】:

      【解决方案2】:

      假设你当前集群中只有master节点,你肯定会遇到集群宕机错误,因为没有宕机的master副本,Redis认为集群不安全并触发错误。

      解决方案

      • 创建一个新节点(使用所需参数创建 redis.conf。)
      • 将该节点加入集群

        redis-trib.rb add-node 127.0.0.1:6379 EXISTING_MASTER_IP:EXISTING_MASTER_PORT

      • 使节点成为 10.0.0.4 的从节点

        redis-cli -p 6379 cluster replicate NODE_ID_OF_TARGET_MASTER

      测试

      • 首先要确定,集群状态良好。(所有槽都被覆盖,节点就配置达成一致。)

        redis-trib.rb check 127.0.0.1:6379 (On any master)

      • 杀死10.0.0.4的进程

      • 等待 Slave 成为新的 master。(它发生得很快。分配给 10.0.0.4 的插槽将自动重新分片到 Slave。)
      • 检查集群并确保所有插槽都被移动到新的主节点

        redis-trib.rb check 127.0.0.1:6379 (On any master)

      无需手动操作。此外,如果集群中有更多的从属服务器,它们也可能被提升为其他主服务器的新主服务器。 (例如,您设置了 3 个 master,3 个 slave。Master1 宕机,Slave1 成为新的 master。Slave1 宕机,Slave1 可以作为 Master1 成为新的 master。)

      【讨论】:

        猜你喜欢
        • 2018-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多