知识库

在本地使用 Docker 运行多个因果集群

在同一台服务器或机器上运行多个因果集群非常容易。您需要确保

  • 每个集群都需要在自己的 Docker 网络上运行

  • 必须防止端口映射重叠

  • causal_clustering.initial_discovery_members 需要包含其集群中所有机器的列表

  • 需要显式设置 bolt 的广告主机名和端口

以下示例运行 2 个独立的集群,每个集群包含 3 个核心实例

#!/bin/sh

# cluster 1
docker network create --driver=bridge cluster1

docker run --name=core1 --detach --network=cluster1 \
    --publish=7474:7474 --publish=7473:7473 --publish=7687:7687 \
    --env=NEO4J_dbms_mode=CORE \
    --env=NEO4J_causal__clustering_expected__core__cluster__size=3 \
    --env=NEO4J_causal__clustering_initial__discovery__members=core1:5000,core2:5000,core3:5000 \
    --env=NEO4J_ACCEPT_LICENSE_AGREEMENT=yes \
    --env=NEO4J_dbms_connector_bolt_advertised__address=localhost:7687 \
    --env=NEO4J_AUTH=none \
    neo4j:3.3-enterprise

docker run --name=core2 --detach --network=cluster1 \
    --publish=8474:7474 --publish=8473:7473 --publish=8687:7687 \
    --env=NEO4J_dbms_mode=CORE \
    --env=NEO4J_causal__clustering_expected__core__cluster__size=3 \
    --env=NEO4J_causal__clustering_initial__discovery__members=core1:5000,core2:5000,core3:5000 \
    --env=NEO4J_ACCEPT_LICENSE_AGREEMENT=yes \
    --env=NEO4J_dbms_connector_bolt_advertised__address=localhost:8687 \
    --env=NEO4J_AUTH=none \
    neo4j:3.3-enterprise

docker run --name=core3 --detach --network=cluster1 \
    --publish=9474:7474 --publish=9473:7473 --publish=9687:7687 \
    --env=NEO4J_dbms_mode=CORE \
    --env=NEO4J_causal__clustering_expected__core__cluster__size=3 \
    --env=NEO4J_causal__clustering_initial__discovery__members=core1:5000,core2:5000,core3:5000 \
    --env=NEO4J_ACCEPT_LICENSE_AGREEMENT=yes \
    --env=NEO4J_dbms_connector_bolt_advertised__address=localhost:9687 \
    --env=NEO4J_AUTH=none \
    neo4j:3.3-enterprise

# cluster 2
docker network create --driver=bridge cluster2

docker run --name=core21 --detach --network=cluster2 \
    --publish=17474:7474 --publish=17473:7473 --publish=17687:7687 \
    --env=NEO4J_dbms_mode=CORE \
    --env=NEO4J_causal__clustering_expected__core__cluster__size=3 \
    --env=NEO4J_causal__clustering_initial__discovery__members=core21:5000,core22:5000,core23:5000 \
    --env=NEO4J_ACCEPT_LICENSE_AGREEMENT=yes \
    --env=NEO4J_dbms_connector_bolt_advertised__address=localhost:17687 \
    --env=NEO4J_AUTH=none \
    neo4j:3.3-enterprise

docker run --name=core22 --detach --network=cluster2 \
    --publish=18474:7474 --publish=18473:7473 --publish=18687:7687 \
    --env=NEO4J_dbms_mode=CORE \
    --env=NEO4J_causal__clustering_expected__core__cluster__size=3 \
    --env=NEO4J_causal__clustering_initial__discovery__members=core21:5000,core22:5000,core23:5000 \
    --env=NEO4J_ACCEPT_LICENSE_AGREEMENT=yes \
    --env=NEO4J_dbms_connector_bolt_advertised__address=localhost:18687 \
    --env=NEO4J_AUTH=none \
    neo4j:3.3-enterprise

docker run --name=core23 --detach --network=cluster2 \
    --publish=19474:7474 --publish=19473:7473 --publish=19687:7687 \
    --env=NEO4J_dbms_mode=CORE \
    --env=NEO4J_causal__clustering_expected__core__cluster__size=3 \
    --env=NEO4J_causal__clustering_initial__discovery__members=core21:5000,core22:5000,core23:5000 \
    --env=NEO4J_ACCEPT_LICENSE_AGREEMENT=yes \
    --env=NEO4J_dbms_connector_bolt_advertised__address=localhost:19687 \
    --env=NEO4J_AUTH=none \
    neo4j:3.3-enterprise