*TLDR: Cluster, multiple Coordinators (Setup script provided),
Webinterface, Service (Foxx-App) Installation, what's the envisioned way to
do so?*
Hello, first of all let me state right up front how awesome the
cluster-feature in 3.x is, and that i really enjoyed the ease of setting it
up in my docker environment.
Job well done - kudos to the docker devs!
I'm still left with one substential question, which i can't figure out my
self.
Im running docker 3.0.7 and use the follwoing scripts to bootstrap the
setup on a distaster (HAV) and production (PROD) server instance:
HAV:
#!/bin/bash
## SETUP
## 3 Agencies: 2 HAV, 1 PROD
## 2 Primaries: 1 HAV, 1 PROD
## 2 Coordinators: 1 HAV, 1 PROD
DOCKERIMAGE=arangodb:3.0.7
HAVIP="ip-of-hav-server"
PRODIP="ip-of-prod-server"
ROOTDIR="/home/user/dockertest"
CUSTOMER="test"
echo "INFO: Setting up ArangoDB Cluster: HAV-System ($HAVIP), corresponding
PROD System is configured to be $PRODID"
echo "INFO: ensure reachability of the configured ports!"
echo "INFO: this script sets up the corresponding filestructure for the
volumes"
echo "INFO: preparing filestructure (if not existent) in $ROOTDIR"
mkdir -p "${ROOTDIR}/arango-cluster-${CUSTOMER}/hav/agency1/data"
mkdir -p "${ROOTDIR}/arango-cluster-${CUSTOMER}/hav/agency1/apps"
mkdir -p "${ROOTDIR}/arango-cluster-${CUSTOMER}/hav/agency2/data"
mkdir -p "${ROOTDIR}/arango-cluster-${CUSTOMER}/hav/agency2/apps"
mkdir -p "${ROOTDIR}/arango-cluster-${CUSTOMER}/hav/db1/data"
mkdir -p "${ROOTDIR}/arango-cluster-${CUSTOMER}/hav/db1/apps"
mkdir -p "${ROOTDIR}/arango-cluster-${CUSTOMER}/hav/coord/data"
mkdir -p "${ROOTDIR}/arango-cluster-${CUSTOMER}/hav/coord/apps"
echo INFO: Starting first HAV agency on port 5000 ...
docker run -d -p 5000:4001 -e ARANGO_NO_AUTH=1 --name=agency1hav \
-v
"${ROOTDIR}/arango-cluster-${CUSTOMER}/hav/agency1/data":/var/lib/arangodb3
\
-v
"${ROOTDIR}/arango-cluster-${CUSTOMER}/hav/agency1/apps":/var/lib/arangodb3-apps
\
${DOCKERIMAGE} \
--agency.id 0 \
--agency.size 3 \
--agency.wait-for-sync false \
--agency.supervision true \
--agency.supervision-frequency 5 \
--server.endpoint tcp://0.0.0.0:4001 \
--server.statistics false \
--server.threads 16
sleep 1
echo INFO: Starting second HAV agency on port 5001 ...
docker run -d -p 5001:4001 -e ARANGO_NO_AUTH=1 --name=agency2hav \
-v
"${ROOTDIR}/arango-cluster-${CUSTOMER}/hav/agency2/data":/var/lib/arangodb3
\
-v
"${ROOTDIR}/arango-cluster-${CUSTOMER}/hav/agency2/apps":/var/lib/arangodb3-apps
\
${DOCKERIMAGE} \
--agency.id 1 \
--agency.size 3 \
--agency.wait-for-sync false \
--agency.supervision true \
--agency.supervision-frequency 5 \
--server.endpoint tcp://0.0.0.0:4001 \
--server.statistics false \
--server.threads 16
sleep 1
echo INFO: Starting primary HAV db server on port 5100...
docker run -d -p 5100:4001 -e ARANGO_NO_AUTH=1 --name="dbserver1hav" \
-v
"${ROOTDIR}/arango-cluster-${CUSTOMER}/hav/db1/data":/var/lib/arangodb3 \
-v
"${ROOTDIR}/arango-cluster-${CUSTOMER}/hav/db1/apps":/var/lib/arangodb3-apps
\
${DOCKERIMAGE} \
--cluster.agency-endpoint tcp://${HAVIP}:5000 \
--cluster.agency-endpoint tcp://${HAVIP}:5001 \
--cluster.agency-endpoint tcp://${PRODIP}:5002 \
--cluster.my-address tcp://${HAVIP}:5100 \
--server.endpoint tcp://0.0.0.0:4001 \
--cluster.my-local-info HAVDB1 \
--cluster.my-role PRIMARY \
--log.level debug \
--server.statistics false
echo INFO: Starting HAV coordinator on port 8530...
docker run -d -e ARANGO_NO_AUTH=1 -p 8530:4001 --name="coord1hav" \
-v
"${ROOTDIR}/arango-cluster-${CUSTOMER}/hav/coord/data":/var/lib/arangodb3 \
-v
"${ROOTDIR}/arango-cluster-${CUSTOMER}/hav/coord/apps":/var/lib/arangodb3-apps
\
${DOCKERIMAGE} \
--cluster.agency-endpoint tcp://${HAVIP}:5000 \
--cluster.agency-endpoint tcp://${HAVIP}:5001 \
--cluster.agency-endpoint tcp://${PRODIP}:5002 \
--cluster.my-address tcp://${HAVIP}:8530 \
--server.endpoint tcp://0.0.0.0:4001 \
--cluster.my-local-info HAVCOORD1 \
--cluster.my-role COORDINATOR \
--log.level debug \
--server.statistics false
PROD:
#!/bin/bash
## SETUP
## 3 Agencies: 2 HAV, 1 PROD
## 2 Primaries: 1 HAV, 1 PROD
## 2 Coordinators: 1 HAV, 1 PROD
DOCKERIMAGE=arangodb:3.0.7
HAVIP="ip-of-hav-server"
PRODIP="ip-of-prod-server"
ROOTDIR="/home/user/docker"
CUSTOMER="test"
echo "INFO: Setting up ArangoDB Cluster: PROD-System ($PRODID),
corresponding HAV System is configured to be $HAVIP"
echo "INFO: ensure reachability of the configured ports!"
echo "INFO: this script setsup the corresponding filestructure for the
volumes"
echo "INFO: preparing filestructure (if not existent) in $ROOTDIR"
mkdir -p "${ROOTDIR}/arango-cluster-${CUSTOMER}/prod/agency1/data"
mkdir -p "${ROOTDIR}/arango-cluster-${CUSTOMER}/prod/agency1/apps"
mkdir -p "${ROOTDIR}/arango-cluster-${CUSTOMER}/prod/db1/data"
mkdir -p "${ROOTDIR}/arango-cluster-${CUSTOMER}/prod/db1/apps"
mkdir -p "${ROOTDIR}/arango-cluster-${CUSTOMER}/prod/coord/data"
mkdir -p "${ROOTDIR}/arango-cluster-${CUSTOMER}/prod/coord/apps"
echo Starting first PROD agency on port 5002...
docker run -d -p 5002:4001 -e ARANGO_NO_AUTH=1 --name=agency1prod \
-v
"${ROOTDIR}/arango-cluster-${CUSTOMER}/prod/agency1/data":/var/lib/arangodb3
\
-v
"${ROOTDIR}/arango-cluster-${CUSTOMER}/prod/agency1/apps":/var/lib/arangodb3-apps
\
${DOCKERIMAGE} \
--agency.id 2 \
--agency.size 3 \
--agency.wait-for-sync false \
--agency.supervision true \
--agency.supervision-frequency 5 \
--server.endpoint tcp://0.0.0.0:4001 \
--server.statistics false \
--agency.endpoint tcp://${HAVIP}:5000 \
--agency.endpoint tcp://${HAVIP}:5001 \
--agency.endpoint tcp://${PRODIP}:5002 \
--agency.notify true \
--server.threads 16
sleep 1
echo Starting primary PROD db server on port 5101...
docker run -d -p 5101:4001 -e ARANGO_NO_AUTH=1 --name="dbserver1prod" \
-v
"${ROOTDIR}/arango-cluster-${CUSTOMER}/prod/db1/data":/var/lib/arangodb3 \
-v
"${ROOTDIR}/arango-cluster-${CUSTOMER}/prod/db1/apps":/var/lib/arangodb3-apps
\
${DOCKERIMAGE} \
--cluster.agency-endpoint tcp://${HAVIP}:5000 \
--cluster.agency-endpoint tcp://${HAVIP}:5001 \
--cluster.agency-endpoint tcp://${PRODIP}:5002 \
--cluster.my-address tcp://${PRODIP}:5101 \
--server.endpoint tcp://0.0.0.0:4001 \
--cluster.my-local-info PRODDB1 \
--cluster.my-role PRIMARY \
--log.level debug \
--server.statistics false
echo Starting PROD coordinator on port 8531...
docker run -d -e ARANGO_NO_AUTH=1 -p 8531:4001 --name="coord1prod" \
${DOCKERIMAGE} \
--cluster.agency-endpoint tcp://${HAVIP}:5000 \
--cluster.agency-endpoint tcp://${HAVIP}:5001 \
--cluster.agency-endpoint tcp://${PRODIP}:5002 \
--cluster.my-address tcp://${PRODIP}:8531 \
--server.endpoint tcp://0.0.0.0:4001 \
--cluster.my-local-info PRODCOORD1 \
--cluster.my-role COORDINATOR \
--log.level debug \
--server.statistics false
As you can see, i'm linking all the data and app dirs to my host. I have
successfully added dbs and collections in this setup and tried some recover
scenarios by stopping and restarting different parts of the cluster (read:
primaries and coordinators).
I stoped and removed docker container and run them again with the same
host-volumes, successfully restoring the state of the cluster as well.
So all should be good and im supposed to be happy right? Indeed i am - but:
I struggle to install Foxx-Apps via the Webinterface reliably. Even when
the cluster is up and running with all nodes beeing sound and healthy, i
can't figure out how i'm supposed to install a Service troughout the whole
cluster.
I came across different scenarios so far: Once installing on one coordinato
mirrored the service meta informations to the other coordinator. But on the
second coordinator none of the sources was available and i could neither
open the "API" Tab nor could i communicate with the service via the
WEB-API. On the first coordinator everything worked perfectly.
In another installation attempt all of a sudden it worked on both, but i
since than could not replicate that success.
So long story short - My Question: How is one supposed to install a
Foxx-Service in a Cluster Setup with multiple Coordinators. (i'm under the
Impression that i red something about it somewhere in the docs that stated
you should install the service on every coordinator, but i can't find it
anymore).
Any hint/help would be greatly appreciated!
Thanks in advance
--
You received this message because you are subscribed to the Google Groups
"ArangoDB" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.