Почему Zookeeper не переизбирает нового лидера в Apache Nifi Cluster? - PullRequest
0 голосов
/ 22 октября 2019

Моя архитектура:

2 Servers:
Server 1: running Apache Nifi + Zookeeper (Not embedded)
Server 2: running Apache Nifi + Zookeeper (Not embedded)

. Для проверки отработки отказа я закрываю сервер, который был выбран как Cluster Coordinator

. В этом случае zookeeper должен автоматически выбрать оставшийсяСервер как лидер. Но он продолжает давать сбой и постоянно пытается подключиться к первому серверу

Zookeeper регистрирует на сервере 2, когда лидер (сервер 1) выходит из строя:

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)

Файлы конфигурации сервера 2:

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:

zoo.cfg

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

nifi.properties

nifi.cluster.is.node=true
nifi.cluster.node.address=ec2-server-1.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 Ответ

2 голосов
/ 23 октября 2019

Вам нужно как минимум три узла, чтобы справиться с отказом одного узла.

Проверьте руководство по объявлению мин. :

Clustered (Multi-Server) Настройка Для надежной службы ZooKeeper вы должны развернуть ZooKeeper в кластере, известном как ансамбль. Пока большинство ансамбля работают, услуга будет доступна. Поскольку Zookeeper требует большинства, лучше использовать нечетное количество машин. Например, с четырьмя машинами ZooKeeper может справиться только с отказом одной машины;в случае отказа двух машин оставшиеся две машины не составляют большинства. Однако с пятью машинами ZooKeeper может справиться со сбоями двух машин.

Более простое объяснение здесь также

...