Pratik Sanghavi
Pratik Sanghavi

Reputation: 3

Bookkeeper fails to connect to replicated zookeeper

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

Answers (0)

Related Questions