GitHub user paulm17 edited a comment on the discussion: Deploy cluster on 
docker, with 2 clusters

Using the experience that I got with running pulsar with 2 clients via 
parallels on a mac.  I was able to understand where to change the ports in the 
default configuration files.

![docker cluster](https://i.imgur.com/1ZENZHZ.png)

Everything seems to run.  Will update once the cluster is verified to be 
working.

My docker compose:

```
version: '3.1'

services:
  zk-west:
    image: apachepulsar/pulsar:latest
    container_name: zk-west
    restart: on-failure
    volumes:
      - ./data/west/zookeeper:/pulsar/data/zookeeper
    environment:
      - metadataStoreUrl=zk:zk-west:2181
      - clusterName=west
      - managedLedgerDefaultEnsembleSize=1
      - managedLedgerDefaultWriteQuorum=1
      - managedLedgerDefaultAckQuorum=1
      - PULSAR_MEM=-Xms256m -Xmx256m -XX:MaxDirectMemorySize=256m
    command: >
      bash -c "sed -i 's/clusterName=standalone/clusterName=west/' 
conf/standalone.conf && \
        sed -i 's/clientPort=2181/clientPort=2181/' conf/zookeeper.conf && \
        bin/apply-config-from-env.py conf/zookeeper.conf && \
        bin/generate-zookeeper-config.sh conf/zookeeper.conf && \
        exec bin/pulsar zookeeper"
    healthcheck:
      test: ["CMD", "bin/pulsar-zookeeper-ruok.sh"]
      interval: 10s
      timeout: 5s
      retries: 30
    ports:
      - 2181:2181

  # Init cluster metadata
  pulsar-init-west:
    container_name: pulsar-init-west
    hostname: pulsar-init-west
    image: apachepulsar/pulsar:latest
    command: >
      bin/pulsar initialize-cluster-metadata \
        --cluster west \
        --zookeeper zk-west:2181 \
        --configuration-store zk-west:2181 \
        --web-service-url http://broker-west:8080 \
        --broker-service-url pulsar://broker-west:6650
    depends_on:
      zk-west:
        condition: service_healthy
  
  # Start bookie
  bookie-west:
    image: apachepulsar/pulsar:latest
    container_name: bookie-west
    restart: on-failure
    environment:
      - clusterName=west
      - zkServers=zk-west:2181
      - metadataServiceUri=metadata-store:zk:zk-west:2181
      # otherwise every time we run docker compose uo or down we fail to start 
due to Cookie
      # See: 
https://github.com/apache/bookkeeper/blob/405e72acf42bb1104296447ea8840d805094c787/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Cookie.java#L57-68
      - advertisedAddress=bookie-west
      - BOOKIE_MEM=-Xms512m -Xmx512m -XX:MaxDirectMemorySize=256m
    depends_on:
      zk-west:
        condition: service_healthy
      pulsar-init-west:
        condition: service_completed_successfully
    # Map the local directory to the container to avoid bookie startup failure 
due to insufficient container disks.
    volumes:
      - ./data/west/bookkeeper:/pulsar/data/bookkeeper
    command: bash -c "bin/apply-config-from-env.py conf/bookkeeper.conf && exec 
bin/pulsar bookie"

  # Start broker
  broker-west:
    image: apachepulsar/pulsar:latest
    container_name: broker-west
    hostname: broker-west
    restart: on-failure
    environment:
      - metadataStoreUrl=zk:zk-west:2181
      - zookeeperServers=zk-west:2181
      - clusterName=west
      - managedLedgerDefaultEnsembleSize=1
      - managedLedgerDefaultWriteQuorum=1
      - managedLedgerDefaultAckQuorum=1
      - advertisedAddress=broker-west
      - advertisedListeners=external:pulsar://broker-west:6650
      - PULSAR_MEM=-Xms512m -Xmx512m -XX:MaxDirectMemorySize=256m
    depends_on:
      zk-west:
        condition: service_healthy
      bookie-west:
        condition: service_started
    ports:
      - "6650:6650"
      - "8080:8080"
    command: bash -c "
      sed -i 's/brokerServicePort=6650/brokerServicePort=6650/' 
conf/broker.conf && \
      sed -i 
's#webServiceUrl=http://localhost:8080/#webServiceUrl=http://localhost:8080/#' 
conf/client.conf && \
      sed -i 's/webServicePort=8080/webServicePort=8080/' conf/broker.conf && \
      bin/apply-config-from-env.py conf/broker.conf && exec bin/pulsar broker"

  zk-cent:
    image: apachepulsar/pulsar:latest
    container_name: zk-cent
    restart: on-failure
    volumes:
      - ./data/central/zookeeper:/pulsar/data/zookeeper
    environment:
      - metadataStoreUrl=zk:zk-cent:2182
      - clusterName=cent
      - managedLedgerDefaultEnsembleSize=1
      - managedLedgerDefaultWriteQuorum=1
      - managedLedgerDefaultAckQuorum=1
      - PULSAR_MEM=-Xms256m -Xmx256m -XX:MaxDirectMemorySize=256m
    command: >
      bash -c "sed -i 's/clusterName=standalone/clusterName=cent/' 
conf/standalone.conf && \
        sed -i 's/clientPort=2181/clientPort=2182/' conf/zookeeper.conf && \
        bin/apply-config-from-env.py conf/zookeeper.conf && \
        bin/generate-zookeeper-config.sh conf/zookeeper.conf && \
        exec bin/pulsar zookeeper"
    healthcheck:
      test: ["CMD", "bin/pulsar-zookeeper-ruok.sh"]
      interval: 10s
      timeout: 5s
      retries: 30
    ports:
      - 2182:2182

  # Init cluster metadata
  pulsar-init-central:
    container_name: pulsar-init-central
    hostname: pulsar-init-central
    image: apachepulsar/pulsar:latest
    command: >
      bin/pulsar initialize-cluster-metadata \
        --cluster cent \
        --zookeeper zk-cent:2182 \
        --configuration-store zk-cent:2182 \
        --web-service-url http://broker-cent:8081 \
        --broker-service-url pulsar://broker-cent:6651
    depends_on:
      zk-cent:
        condition: service_healthy
  
  # Start bookie
  bookie-cent:
    image: apachepulsar/pulsar:latest
    container_name: bookie-cent
    restart: on-failure
    environment:
      - clusterName=cent
      - zkServers=zk-cent:2182
      - metadataServiceUri=metadata-store:zk:zk-cent:2182
      # otherwise every time we run docker compose uo or down we fail to start 
due to Cookie
      # See: 
https://github.com/apache/bookkeeper/blob/405e72acf42bb1104296447ea8840d805094c787/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Cookie.java#L57-68
      - advertisedAddress=bookie-cent
      - BOOKIE_MEM=-Xms512m -Xmx512m -XX:MaxDirectMemorySize=256m
    depends_on:
      zk-cent:
        condition: service_healthy
      pulsar-init-central:
        condition: service_completed_successfully
    # Map the local directory to the container to avoid bookie startup failure 
due to insufficient container disks.
    volumes:
      - ./data/central/bookkeeper:/pulsar/data/bookkeeper
    command: bash -c "bin/apply-config-from-env.py conf/bookkeeper.conf && exec 
bin/pulsar bookie"

  # Start broker
  broker-cent:
    image: apachepulsar/pulsar:latest
    container_name: broker-cent
    hostname: broker-cent
    restart: on-failure
    environment:
      - metadataStoreUrl=zk:zk-cent:2182
      - zookeeperServers=zk-cent:2182
      - clusterName=cent
      - managedLedgerDefaultEnsembleSize=1
      - managedLedgerDefaultWriteQuorum=1
      - managedLedgerDefaultAckQuorum=1
      - advertisedAddress=broker-cent
      - advertisedListeners=external:pulsar://broker-cent:6651
      - PULSAR_MEM=-Xms512m -Xmx512m -XX:MaxDirectMemorySize=256m
    depends_on:
      zk-cent:
        condition: service_healthy
      bookie-cent:
        condition: service_started
    ports:
      - "6651:6651"
      - "8081:8081"
    command: bash -c "
      sed -i 's/brokerServicePort=6650/brokerServicePort=6651/' 
conf/broker.conf && \
      sed -i 
's#webServiceUrl=http://localhost:8080/#webServiceUrl=http://localhost:8081/#' 
conf/client.conf && \
      sed -i 's/webServicePort=8080/webServicePort=8081/' conf/broker.conf && \
      bin/apply-config-from-env.py conf/broker.conf && exec bin/pulsar broker"
  
  zk-east:
    image: apachepulsar/pulsar:latest
    container_name: zk-east
    restart: on-failure
    volumes:
      - ./data/east/zookeeper:/pulsar/data/zookeeper
    environment:
      - metadataStoreUrl=zk:zk-east:2183
      - clusterName=east
      - managedLedgerDefaultEnsembleSize=1
      - managedLedgerDefaultWriteQuorum=1
      - managedLedgerDefaultAckQuorum=1
      - PULSAR_MEM=-Xms256m -Xmx256m -XX:MaxDirectMemorySize=256m
    command: >
      bash -c "sed -i 's/clusterName=standalone/clusterName=east/' 
conf/standalone.conf && \
        sed -i 's/clientPort=2181/clientPort=2183/' conf/zookeeper.conf && \
        bin/apply-config-from-env.py conf/zookeeper.conf && \
        bin/generate-zookeeper-config.sh conf/zookeeper.conf && \
        exec bin/pulsar zookeeper"
    healthcheck:
      test: ["CMD", "bin/pulsar-zookeeper-ruok.sh"]
      interval: 10s
      timeout: 5s
      retries: 30
    ports:
      - 2183:2183

  # Init cluster metadata
  pulsar-init-east:
    container_name: pulsar-init-east
    hostname: pulsar-init-east
    image: apachepulsar/pulsar:latest
    command: >
      bin/pulsar initialize-cluster-metadata \
        --cluster east \
        --zookeeper zk-east:2183 \
        --configuration-store zk-east:2183 \
        --web-service-url http://broker-east:8082 \
        --broker-service-url pulsar://broker-east:6652
    depends_on:
      zk-east:
        condition: service_healthy
  
  # Start bookie
  bookie-east:
    image: apachepulsar/pulsar:latest
    container_name: bookie-east
    restart: on-failure
    environment:
      - clusterName=east
      - zkServers=zk-east:2183
      - metadataServiceUri=metadata-store:zk:zk-east:2183
      # otherwise every time we run docker compose uo or down we fail to start 
due to Cookie
      # See: 
https://github.com/apache/bookkeeper/blob/405e72acf42bb1104296447ea8840d805094c787/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Cookie.java#L57-68
      - advertisedAddress=bookie-east
      - BOOKIE_MEM=-Xms512m -Xmx512m -XX:MaxDirectMemorySize=256m
    depends_on:
      zk-east:
        condition: service_healthy
      pulsar-init-east:
        condition: service_completed_successfully
    # Map the local directory to the container to avoid bookie startup failure 
due to insufficient container disks.
    volumes:
      - ./data/east/bookkeeper:/pulsar/data/bookkeeper
    command: bash -c "bin/apply-config-from-env.py conf/bookkeeper.conf && exec 
bin/pulsar bookie"

  # Start broker
  broker-east:
    image: apachepulsar/pulsar:latest
    container_name: broker-east
    hostname: broker-east
    restart: on-failure
    environment:
      - metadataStoreUrl=zk:zk-east:2183
      - zookeeperServers=zk-east:2183
      - clusterName=east
      - managedLedgerDefaultEnsembleSize=1
      - managedLedgerDefaultWriteQuorum=1
      - managedLedgerDefaultAckQuorum=1
      - advertisedAddress=broker-east
      - advertisedListeners=external:pulsar://broker-east:6652
      - PULSAR_MEM=-Xms512m -Xmx512m -XX:MaxDirectMemorySize=256m
    depends_on:
      zk-east:
        condition: service_healthy
      bookie-east:
        condition: service_started
    ports:
      - "6652:6652"
      - "8082:8082"
    command: bash -c "
      sed -i 's/brokerServicePort=6650/brokerServicePort=6652/' 
conf/broker.conf && \
      sed -i 
's#webServiceUrl=http://localhost:8080/#webServiceUrl=http://localhost:8082/#' 
conf/client.conf && \
      sed -i 's/webServicePort=8080/webServicePort=8082/' conf/broker.conf && \
      bin/apply-config-from-env.py conf/broker.conf && exec bin/pulsar broker"
```

GitHub link: 
https://github.com/apache/pulsar/discussions/22228#discussioncomment-8762222

----
This is an automatically sent email for [email protected].
To unsubscribe, please send an email to: [email protected]

Reply via email to