Apache zookeeper ZooKeeper群集包含两个节点-当一个节点以编程方式关闭时,会出现奇怪的行为

Apache zookeeper ZooKeeper群集包含两个节点-当一个节点以编程方式关闭时,会出现奇怪的行为,apache-zookeeper,Apache Zookeeper,当我有两个节点运行时,一切都会按预期运行 [dmitry@zk2-prod]/etc/supervisor.d% sudo /opt/zookeeper/bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /opt/zookeeper/bin/../conf/zoo.cfg Mode: leader 但是,只要我停止其中一个节点zk1 prod(通过supervisord的supervisorctl) 霍韦

当我有两个节点运行时,一切都会按预期运行

[dmitry@zk2-prod]/etc/supervisor.d% sudo /opt/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: leader
但是,只要我停止其中一个节点zk1 prod(通过supervisord的supervisorctl)

霍韦弗

[dmitry@zk2-prod]/etc/supervisor.d% sudo supervisorctl status
zookeeper                        RUNNING   pid 4838, uptime 0:04:01
一旦我把从机带回来,我会立即得到第一个输出(模式:leader)

我是否至少需要3个实例才能选择一个领导者

我认为一个实例将能够选择自己作为领导者并继续服务请求

我遗漏了什么吗?

我至少需要3个实例吗 org.apache.zookeeper.server.quorum.QuorumPeerMain可以选择一个领导者吗

是,容忍丢失一台服务器的事件

在Zookeeper仲裁中,只要大多数服务器可用,Zookeeper服务将可用。服务器不能选择自己作为领导者

在这种情况下,2台服务器构成了一个集成,其中2台是大多数服务器。当一个失去时,多数党成员也随之失去。失去多数被视为法定人数不足

一个更容易解释的3服务器场景,如果一个服务器丢失,仍有2个服务器保持多数,但如果丢失2个服务器,则此3人仲裁中的多数成员将丢失,这将导致zookeeper服务不可用

[dmitry@zk2-prod]/etc/supervisor.d% sudo supervisorctl status
zookeeper                        RUNNING   pid 4838, uptime 0:04:01
[dmitry@zk2-prod]/etc/supervisor.d% ps aufx G zoo
89:zookeep+  4838  0.2  1.4 2970424 56816 ?       Sl   19:32   0:00  \_ java -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -cp /opt/zookeeper/bin/../build/classes:/opt/zookeeper/bin/../build/lib/*.jar:/opt/zookeeper/bin/../lib/slf4j-log4j12-1.6.1.jar:/opt/zookeeper/bin/../lib/slf4j-api-1.6.1.jar:/opt/zookeeper/bin/../lib/netty-3.10.5.Final.jar:/opt/zookeeper/bin/../lib/log4j-1.2.16.jar:/opt/zookeeper/bin/../lib/jline-0.9.94.jar:/opt/zookeeper/bin/../zookeeper-3.4.10.jar:/opt/zookeeper/bin/../src/java/lib/*.jar:/opt/zookeeper/bin/../conf: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.quorum.QuorumPeerMain /opt/zookeeper/bin/../conf/zoo.cfg