Skip to content

Instantly share code, notes, and snippets.

@jexp
Last active December 8, 2016 16:08
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jexp/3befbdfe56b1eb44ed399833bde8b7eb to your computer and use it in GitHub Desktop.
Save jexp/3befbdfe56b1eb44ed399833bde8b7eb to your computer and use it in GitHub Desktop.
Run Multi-Instance Causal Cluster of Neo4j 3.1 RC1 (also see the links)
#!/bin/bash
# usage ./cluster.sh start/stop
ROOT=/mnt/ssd/mh
ADDRESS=localhost
#ADDRESS=mattis.malmo.neohq.net
NEO4J_HOME=${NEO4J_HOME-neo4j-enterprise-3.1.0-RC1}
OPERATION=${1-start}
function config {
HOST=$1
MODE=${2-CORE}
INSTANCE=server$HOST
CONF=$ROOT/ce/$INSTANCE/conf
DATA=$ROOT/ce/$INSTANCE/data
mkdir -p $CONF $DATA $DATA/run $DATA/logs $DATA/certificates
cat > $CONF/neo4j.conf << EOF
dbms.directories.data=$DATA
dbms.directories.certificates=$DATA/certificates
dbms.directories.logs=$DATA/logs
dbms.directories.run=$DATA/run
dbms.security.auth_enabled=false
dbms.memory.heap.initial_size=1G
dbms.memory.heap.max_size=1G
dbms.memory.pagecache.size=1G
dbms.tx_log.rotation.retention_policy=false
dbms.threads.worker_count=24
dbms.connector.bolt.type=BOLT
dbms.connector.bolt.enabled=true
dbms.connector.bolt.listen_address=0.0.0.0:$[7687+$HOST]
dbms.connector.http.type=HTTP
dbms.connector.http.enabled=true
dbms.connector.http.listen_address=0.0.0.0:$[7474+$HOST]
dbms.connector.https.enabled=false
unsupported.dbms.edition=enterprise
dbms.mode=$MODE
#dbms.mode=READ_REPLICA
dbms.connectors.default_listen_address=0.0.0.0
dbms.connectors.default_advertised_address=$ADDRESS
#dbms.connectors.default_advertised_hostname=$1
causal_clustering.initial_discovery_members=$ADDRESS:5000,$ADDRESS:5001,$ADDRESS:5002
causal_clustering.expected_core_cluster_size=3
causal_clustering.discovery_advertised_address=$ADDRESS:$[5000+$HOST]
causal_clustering.discovery_listen_address=0.0.0.0:$[5000+$HOST]
causal_clustering.raft_advertised_address=$ADDRESS:$[7000+$HOST]
causal_clustering.raft_listen_address=0.0.0.0:$[7000+$HOST]
causal_clustering.transaction_advertised_address=$ADDRESS:$[6000+$HOST]
causal_clustering.transaction_listen_address=0.0.0.0:$[6000+$HOST]
metrics.enabled=true
metrics.graphite.enabled=true
metrics.graphite.server=localhost:2003
metrics.graphite.interval=20s
metrics.prefix=Neo4j_1
EOF
}
function run {
echo Starting Server$1 Mode $2
config $1 $2
NEO4J_CONF=$ROOT/ce/server$1/conf $NEO4J_HOME/bin/neo4j $OPERATION
}
run 0 CORE
run 1 CORE
run 2 CORE
run 3 READ_REPLICA
run 4 READ_REPLICA
run 5 READ_REPLICA
tail -f $ROOT/ce/server*/data/logs/*.log
version: '2'
networks:
lan:
services:
core1:
image: neo4j/neo4j-experimental:3.1.0-RC1-enterprise
container_name: core1
networks:
- lan
ports:
- 7474:7474
- 7687:7687
environment:
- NEO4J_AUTH=neo4j/neo
- NEO4J_dbms_mode=CORE
- NEO4J_causalClustering_expectedCoreClusterSize=3
- NEO4J_dbms_connectors_defaultAdvertisedAddress=core1
- NEO4J_causalClustering_initialDiscoveryMembers=core1:5000,core2:5000,core3:5000
core2:
image: neo4j/neo4j-experimental:3.1.0-RC1-enterprise
container_name: core2
networks:
- lan
ports:
- 7475:7474
- 7688:7687
environment:
- NEO4J_AUTH=neo4j/neo
- NEO4J_dbms_mode=CORE
- NEO4J_causalClustering_expectedCoreClusterSize=3
- NEO4J_dbms_connectors_defaultAdvertisedAddress=core2
- NEO4J_causalClustering_initialDiscoveryMembers=core1:5000,core2:5000,core3:5000
core3:
image: neo4j/neo4j-experimental:3.1.0-RC1-enterprise
container_name: core3
networks:
- lan
ports:
- 7476:7474
- 7689:7687
environment:
- NEO4J_AUTH=neo4j/neo
- NEO4J_dbms_mode=CORE
- NEO4J_causalClustering_expectedCoreClusterSize=3
- NEO4J_dbms_connectors_defaultAdvertisedAddress=core3
- NEO4J_causalClustering_initialDiscoveryMembers=core1:5000,core2:5000,core3:5000
replica1:
image: neo4j/neo4j-experimental:3.1.0-RC1-enterprise
container_name: replica1
networks:
- lan
ports:
- 7477:7474
- 7690:7687
depends_on:
- core1
- core2
- core3
environment:
- NEO4J_AUTH=neo4j/neo
- NEO4J_dbms_mode=READ_REPLICA
- NEO4J_dbms_connectors_defaultAdvertisedAddress=replica1
- NEO4J_causalClustering_initialDiscoveryMembers=core1:5000,core2:5000,core3:5000
# notes
# https://github.com/neo4j/docker-neo4j/blob/master/test/causal-cluster-compose.yml
# http://neo4j.com/docs/operations-manual/beta/deployment/causal-cluster/settings-summary/
# docker setup new: https://github.com/neo-technology/neo4j-manual-modeling/blob/b93862f04fdd98cae426dce4ef80e50aa670c996/operationsManual/asciidoc/deployment/docker/index.adoc
# docker network create --driver=bridge cluster
#
# docker run --name=core1 --detach --network=cluster \
# --publish=7474:7474 --publish=7687:7687 \
# --env=NEO4J_dbms_mode=CORE \
# --env=NEO4J_causalClustering_expectedCoreClusterSize=3 \
# --env=NEO4J_causalClustering_initialDiscoveryMembers=core1:5000,core2:5000,core3:5000 \
# neo4j:3.1-enterprise
#
# docker run --name=core2 --detach --network=cluster \
# --env=NEO4J_dbms_mode=CORE \
# --env=NEO4J_causalClustering_expectedCoreClusterSize=3 \
# --env=NEO4J_causalClustering_initialDiscoveryMembers=core1:5000,core2:5000,core3:5000 \
# neo4j:3.1-enterprise
#
# docker run --name=core3 --detach --network=cluster \
# --env=NEO4J_dbms_mode=CORE \
# --env=NEO4J_causalClustering_expectedCoreClusterSize=3 \
# --env=NEO4J_causalClustering_initialDiscoveryMembers=core1:5000,core2:5000,core3:5000 \
# neo4j:3.1-enterprise
# annoying to have to put in advertised address into config
# it only works if you put in dbms.connector.http.listen_address=0.0.0.0:7474
# no support for CE yet in our docker image
# docs in config are good
function config {
mkdir -p /tmp/ce/$1/conf
cat > /tmp/ce/$1/conf/neo4j.conf << EOF
dbms.security.auth_enabled=false
dbms.memory.heap.initial_size=512
dbms.memory.heap.max_size=512
dbms.memory.pagecache.size=100M
dbms.tx_log.rotation.retention_policy=false
dbms.connector.bolt.type=BOLT
dbms.connector.bolt.enabled=true
dbms.connector.bolt.listen_address=0.0.0.0:7687
dbms.connector.http.type=HTTP
dbms.connector.http.enabled=true
dbms.connector.http.listen_address=0.0.0.0:7474
unsupported.dbms.edition=enterprise
dbms.mode=${2-CORE}
#dbms.mode=READ_REPLICA
dbms.connectors.default_listen_address=0.0.0.0
dbms.connectors.default_advertised_address=$1
#dbms.connectors.default_advertised_hostname=$1
causal_clustering.initial_discovery_members=instance0:5000,instance1:5000,instance2:5000
causal_clustering.expected_core_cluster_size=3
#causal_clustering.discovery_advertised_address=$1:5000
#causal_clustering.discovery_listen_address=0.0.0.0:5000
#causal_clustering.raft_advertised_address=$1:7000
#causal_clustering.raft_listen_address=0.0.0.0:7000
#causal_clustering.transaction_advertised_address=$1:6000
#causal_clustering.transaction_listen_address=0.0.0.0:6000
EOF
}
function run {
HOST=$1
INSTANCE=instance$HOST
config $INSTANCE $2
# --env=NEO4J_dbms_mode=CORE
docker run --name=$INSTANCE --detach --publish=$[7474+$HOST]:7474 --publish=$[7687+$HOST]:7687 --net=cluster --hostname=$INSTANCE \
--volume /tmp/ce/$INSTANCE/conf:/conf --volume /tmp/ce/$INSTANCE/data:/data \
neo4j/neo4j-experimental:3.1.0-M13-beta3-enterprise
}
docker network create --driver=bridge cluster
run 0
run 1
run 2
run 3 READ_REPLICA
run 4 READ_REPLICA
run 5 READ_REPLICA
run 6 READ_REPLICA
sleep 5
for HOST in `seq 0 6`; do
INSTANCE=instance$HOST
echo "Instance $INSTANCE"
DOCKER=$(docker ps -f name=$INSTANCE -q)
docker exec $DOCKER /bin/sh -c "tail /var/lib/neo4j/logs/debug.log"
#docker logs $DOCKER
done
# docker exec -ti $(docker ps -f name=$INSTANCE -q) bash
# docker rm -f $(docker ps -a -q)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment