Reputation: 3
I'm using the following docker-compose.yml
simulating a replicated zookeeper and bookkeeper service:
version: '3.3'
networks:
zk-bookie-net:
driver: bridge
services:
zoo1:
image: zookeeper:3.8
hostname: zoo1
container_name: zoo1
restart: always
networks:
- zk-bookie-net
ports:
- "2181:2181" # Client port for node 1
- "2881:2888" # Quorum port for node 1
- "3881:3888" # Leader election port for node 1
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
ZOO_4LW_COMMANDS_WHITELIST: "*"
zoo2:
image: zookeeper:3.8
hostname: zoo2
container_name: zoo2
restart: always
networks:
- zk-bookie-net
ports:
- "2182:2181" # Client port for node 2
- "2882:2888" # Quorum port for node 2
- "3882:3888" # Leader election port for node 2
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
ZOO_4LW_COMMANDS_WHITELIST: "*"
zoo3:
image: zookeeper:3.8
hostname: zoo3
container_name: zoo3
restart: always
networks:
- zk-bookie-net
ports:
- "2183:2181" # Client port for node 3
- "2883:2888" # Quorum port for node 3
- "3883:3888" # Leader election port for node 3
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
ZOO_4LW_COMMANDS_WHITELIST: "*"
bookie1:
image: apache/bookkeeper:4.17.1
hostname: bookie1
container_name: bookie1
restart: always
networks:
- zk-bookie-net
ports:
- "3181:3181" # Client port for bookie 1
- "4181:4181" # HTTP port for bookie 1
environment:
BK_zkServers: zoo1:2181,zoo2:2181,zoo3:2181
BK_httpServerPort: 8080
BK_zkLedgersRootPath: /ledgers
BK_metadataServiceUri: zk://zoo1:2181/ledgers,zk://zoo2:2181/ledgers,zk://zoo3:2181/ledgers
links:
- zoo1
- zoo2
- zoo3
bookie2:
image: apache/bookkeeper:4.17.1
hostname: bookie2
container_name: bookie2
restart: always
networks:
- zk-bookie-net
ports:
- "3182:3181" # Client port for bookie 2
- "4182:4181" # HTTP port for bookie 2
environment:
BK_zkServers: zoo1:2181,zoo2:2181,zoo3:2181
BK_httpServerPort: 8080
BK_zkLedgersRootPath: /ledgers
BK_metadataServiceUri: zk://zoo1:2181/ledgers,zk://zoo2:2181/ledgers,zk://zoo3:2181/ledgers
links:
- zoo1
- zoo2
- zoo3
bookie3:
image: apache/bookkeeper:4.17.1
hostname: bookie3
container_name: bookie3
restart: always
networks:
- zk-bookie-net
ports:
- "3183:3181" # Client port for bookie 3
- "4183:4181" # HTTP port for bookie 3
environment:
BK_zkServers: zoo1:2181,zoo2:2181,zoo3:2181
BK_httpServerPort: 8080
BK_zkLedgersRootPath: /ledgers
BK_metadataServiceUri: zk://zoo1:2181/ledgers,zk://zoo2:2181/ledgers,zk://zoo3:2181/ledgers
links:
- zoo1
- zoo2
- zoo3
However, bookkeeper doesn't seem to be able to connect to zookeeper:
ng reconnect except it is a SessionExpiredException.
java.net.ConnectException: Connection refused
at sun.nio.ch.Net.pollConnect(Native Method) ~[?:?]
at sun.nio.ch.Net.pollConnectNow(Net.java:672) ~[?:?]
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:946) ~[?:?]
at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:344) ~[org.apache.zookeeper-zookeeper-3.8.4.jar:3.8.4]
at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1289) ~[org.apache.zookeeper-zookeeper-3.8.4.jar:3.8.4]
I've tried running a single zookeeper instance with multiple bookies and that seems to work but then what's even a single zookeeper useful for (the whole advantage of a strongly consistent fault tolerant system is wiped off)
Upvotes: 0
Views: 19