【发布时间】:2020-10-05 02:43:36
【问题描述】:
我的理解是,Zookeeper 常用于解决分布式系统中“跟踪哪个节点扮演特定角色”的问题(例如,数据库中的主节点或 MapReduce 集群中的主节点)等)。
为简单起见,假设我们有一个具有一个主节点和多个副本的数据库,并且数据库中的当前主节点出现故障。在这种情况下,原则上可以使其中一个副本节点成为新的主节点。此时我的理解是:
如果我们没有 Zookeeper
应用服务器可能不知道我们有一个新的主节点,因此它们将不知道将写入发送到哪里,除非我们在应用服务器本身上有一些自定义逻辑来检测/纠正这个问题.
如果我们有 Zookeeper
Zookeeper 会以某种方式检测此故障,并更新相应主密钥的值。此外,应用服务器可以(可选?)在 Zookeeper 中注册钩子,因此 Zookeeper 可以通知他们这个失败,以便应用服务器可以更新(例如在内存中),哪个 DB 节点是新的主节点。
我的问题是:
- Zookeper 如何知道要让哪个节点成为主节点? Zookeper 是否对该选择负责?
- 如何将此信息传播到需要与 Zookeeper 交互的节点?例如。如果其中一个 Zookeeper 节点 出现故障,应用服务器如何知道在这种情况下要命中哪个 Zookeeper 节点? Zookeeper 的管理方式是否与竞争解决方案不同,例如etcd?
【问题讨论】:
-
从我的角度来看 1 和 2
-
@ShalithaJayamal 嗯?不确定我是否关注
标签: configuration apache-zookeeper distributed-computing