Hi there,
I am running a three-node Zookeeper cluster based on the official
zookeeper Docker image (currently at v3.6.1). I have been seeing
sporadic problems during a rolling restart where the ensemble often
loses its integrity requiring all nodes to be stopped and restarted to
recover.
The containers are connected to the bridge network, so I need to
replace each node's own IP with 0.0.0.0 in the server declaration, as
in (for server #1):
ZOO_MY_ID=1
ZOO_SERVERS=server.1=0.0.0.0:2888:3888:participant;2181 \
server.2=x.x.x.2:2888:3888:participant;2181 \
server.3=x.x.x.3:2888:3888:participant;2181
Server #2, #3 have their IP replaced with 0.0.0.0, respectively.
>From this configuration Zookeeper seems to generate the following
zoo.cfg.dynamic.next config file (identical on all three servers),
which is somewhat surprising as it contains 0.0.0.0 as address of
server #2:
-- 8< --
server.1=x.x.x.1:2888:3888:participant;0.0.0.0:2181
server.2=0.0.0.0:2888:3888:participant;0.0.0.0:2181
server.3=x.x.x.3:2888:3888:participant;0.0.0.0:2181
version=1f00000000
-- 8< --
Is this how things are supposed to be? Naively, I would have assumed
that server #1/#3 should know the real ip of server #2 and not
0.0.0.0...
Is there a way to configure an advertised address? If not, what is the
recommended setup to operate Zookeeper within Docker (without having
to resort to using the host network)?
Thanks,
Thilo
|