Zookeeper为什么不重新选举Apache Nifi Cluster中的新领导者?

时间:2019-10-22 18:53:58

标签: apache-zookeeper apache-nifi

以下是我的体系结构

// This switch must be set before creating the GrpcChannel/HttpClient.
AppContext.SetSwitch(
    "System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);

要测试故障转移,请关闭已选择为2 Servers: Server 1: running Apache Nifi + Zookeeper (Not embedded) Server 2: running Apache Nifi + Zookeeper (Not embedded) 的服务器

在这种情况下,zookeeper应该自动选择其余一台服务器作为领导者。但是它不断失败,并进入尝试连接到第一台服务器的连续循环

当领导者(服务器1)掉线时,Zookeeper登录服务器2:

Cluster Coordinator

服务器2的配置文件:

2019-10-22 18:44:01,135 [myid:2] - WARN  [NIOWorkerThread-2:NIOServerCnxn@370] - Exception causing close of session 0x0: ZooKeeperServer not running
2019-10-22 18:44:02,925 [myid:2] - WARN  [NIOWorkerThread-3:NIOServerCnxn@370] - Exception causing close of session 0x0: ZooKeeperServer not running
2019-10-22 18:44:03,320 [myid:2] - WARN  [QuorumPeer[myid=2](plain=/0:0:0:0:0:0:0:0:2181)(secure=disabled):QuorumCnxManager@677] - 
Cannot open channel to 1 at election address ec2-server-1.compute-1.amazonaws.com/172.xx.x.x:3888
    java.net.ConnectException: Connection refused (Connection refused)
            at java.net.PlainSocketImpl.socketConnect(Native Method)
            at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)

服务器1的配置文件:

zoo.cfg

tickTime=2000
initLimit=5
syncLimit=2
dataDir=/home/ec2-user/zookeeper
clientPort=2181
server.1=ec2-server-1.compute-1.amazonaws.com:2888:3888
server.2=0.0.0.0:2888:3888

nifi.properties

nifi.cluster.is.node=true
nifi.cluster.node.address=ec2-server-2.compute-1.amazonaws.com
nifi.cluster.node.protocol.port=8082
nifi.cluster.flow.election.max.wait.time=2 mins
nifi.cluster.flow.election.max.candidates=1

# zookeeper properties, used for cluster management #
nifi.zookeeper.connect.string=localhost:2181
nifi.zookeeper.root.node=/nifi

我在做什么错了?

1 个答案:

答案 0 :(得分:2)

您至少需要三个节点才能处理一个节点的故障。

检查广告min guide

  

集群(多服务器)设置为获得可靠的ZooKeeper服务,您可以   应该在称为集合的集群中部署ZooKeeper。只要   大多数合奏都可以使用,该服务将可用。   因为Zookeeper需要多数,所以最好使用奇数   机器。例如,有四台机器,ZooKeeper只能处理   一台机器的故障;如果两台机器发生故障,其余的   两台机器不占多数。但是,用五台机器   ZooKeeper可以处理两台计算机的故障。

更简单的解释here