【问题标题】:ZooKeeper - adding peers dynamically?ZooKeeper - 动态添加对等点?
【发布时间】:2012-07-07 16:12:30
【问题描述】:

我是 ZooKeeper 的新手。这就是我需要的。

我有一个同行网络。

  1. t=t_1 -> [peer-1 (Leader), peer-2] peer-1 是主节点,所有客户端都连接到该节点。

  2. t=t_2 -> [peer-1 (Leader), peer-2, peer-3] 稍后,peer-3 加入了该组。是否可以“动态地”将 peer-3 添加到 zookeeper 服务器列表中(即,无需在 peer-1 上重新启动 ZooKeeper)?

  3. t=t_3 -> [peer-3 (Leader), peer-4] 一段时间后,peer-1 和 peer-2 都离开了组(例如,死亡或被关闭。)假设有一种方法可以动态地将 peer-3 和 peer-4 添加到组中,peer-3 成为领导者,并且所有客户端请求都发送到 peer-3。

除了使用 ZooKeeper 来做这样的事情之外,我还可以使用其他选项吗?

谢谢。

【问题讨论】:

    标签: dynamic p2p apache-zookeeper master-slave


    【解决方案1】:

    目前,您无法在不重新启动的情况下动态更改 Zookeeper 集群的配置。有一个未解决的问题可以解决这个问题,ZOOKEEPER-107。描述聚类隶属度算法的论文挺有意思的,可以找到here

    您可以通过一次重新启动服务器节点 1 来更改集群的配置。例如,如果您的集群有服务器 A、B、C,并且您想将服务器 C 替换为 D,那么您可以执行以下操作,

    • 关闭 C
    • 调出D,它的peer列表是A,B,D
    • 取下B
    • 将 B 的对等列表更改为 A,B,D
    • 培养 B
    • 删除 A 将 A 的对等列表更改为 A、B、D
    • 提出A
    • 将所有客户端的客户端配置更改为指向 A、B、D

    在 t=t_1,您有一个包含 2 个 zookeeper 节点的集群。这是相当脆弱的,如果任何一个节点宕机,你将无法建立仲裁(floor(N / 2) + 1),集群将不可用。通常 zookeeper 集群是奇数。

    我不确定你说的是什么意思,

    peer-3 成为领导者,所有客户端请求都发送到 peer-3。

    你不能指定zookeeper集群中的哪个节点是leader,节点自己会选举他们的leader,并且leader会随着节点的上升和下降而改变。同样,客户端通常并不总是连接到领导者,但客户端会获得集群中的机器列表,并随机连接到其中一台,如果它们连接的服务器出现故障,则会重新连接。您可以设置leaderServes 选项来指定领导者不服务客户端连接。

    【讨论】:

    【解决方案2】:

    我不建议将上述内容用于任何生产情况。 上述解决方案仅适用于您可以在一段时间内丢失 ZK 仲裁,直到所有更改完成。

    原因如下: 调低 C 调高 D,它的对等列表是 A,B,D"

    -> 此时 A 和 B 不知道 D -> D 知道 A B

    所以此时你只有 A 和 B 在法定人数中运作 接下来你拿下 B,你就失去了法定人数。

    您将无法访问 zk 数据,直到迁移完成并再次恢复仲裁。在这种情况下,大多数设计良好的应用程序使用 zk 故障转移到只读模式,并将正常恢复。

    Zookeeper-107 在 Zookeeper 3.5 下发布之前,您需要明智地选择毒药。

    最好是:

    1. 只需设置一个新的 zk ensemble(zk 集群)
    2. 从快照恢复
    3. 将应用从旧的 zk ensemble 迁移到新的 zk ensemble
    4. 迁移完成后关闭旧的 zk 集成

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-12
      相关资源
      最近更新 更多