diff --git a/bin/execute-service b/bin/execute-service new file mode 100644 index 0000000..1d7ce32 --- /dev/null +++ b/bin/execute-service @@ -0,0 +1,27 @@ +#!/bin/bash +set -e + +SERVICE_NAME=$1; shift +DOCKER_CMD=docker + +TASK_ID=$(${DOCKER_CMD} service ps --filter 'desired-state=running' $SERVICE_NAME -q) +NODE_ID=$(${DOCKER_CMD} inspect --format '{{ .NodeID }}' $TASK_ID) +CONTAINER_ID=$(${DOCKER_CMD} inspect --format '{{ .Status.ContainerStatus.ContainerID }}' $TASK_ID) +TASK_NAME=swarm_exec_${RANDOM} + +TASK_ID=$(${DOCKER_CMD} service create \ + --detach \ + --name=${TASK_NAME} \ + --restart-condition=none \ + --mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \ + --constraint node.id==${NODE_ID} \ + docker:latest docker exec ${CONTAINER_ID} "$@") + +while : ; do + STOPPED_TASK=$(${DOCKER_CMD} service ps --filter 'desired-state=shutdown' ${TASK_ID} -q) + [[ ${STOPPED_TASK} != "" ]] && break + sleep 1 +done + +${DOCKER_CMD} service logs --raw ${TASK_ID} +${DOCKER_CMD} service rm ${TASK_ID} > /dev/null \ No newline at end of file diff --git a/bin/init-eg-swarm b/bin/init-eg-swarm new file mode 100644 index 0000000..7fb909a --- /dev/null +++ b/bin/init-eg-swarm @@ -0,0 +1,34 @@ +#!/bin/bash -u + +RED='\033[0;31m' +BLUE='\033[0;34m' +NC='\033[0m' + +STACK_NAME=$1; shift + +NODES=(db_coord_1 db_coord_2 db_data_1 db_data_2) +SQL_STATMENTS=( +"CREATE NODE coord_1 WITH (TYPE = 'coordinator', HOST = '${STACK_NAME[@]}_db_coord_1', PORT = 5432);" +"CREATE NODE coord_2 WITH (TYPE = 'coordinator', HOST = '${STACK_NAME[@]}_db_coord_2', PORT = 5432);" +"CREATE NODE data_1 WITH (TYPE = 'datanode', HOST = '${STACK_NAME[@]}_db_data_1', PORT = 5432);" +"CREATE NODE data_2 WITH (TYPE = 'datanode', HOST = '${STACK_NAME[@]}_db_data_2', PORT = 5432);" +"ALTER NODE coord_1 WITH (TYPE = 'coordinator', HOST = '${STACK_NAME[@]}_db_coord_1', PORT = 5432);" +"ALTER NODE coord_2 WITH (TYPE = 'coordinator', HOST = '${STACK_NAME[@]}_db_coord_2', PORT = 5432);" +"ALTER NODE data_1 WITH (TYPE = 'datanode', HOST = '${STACK_NAME[@]}_db_data_1', PORT = 5432);" +"ALTER NODE data_2 WITH (TYPE = 'datanode', HOST = '${STACK_NAME[@]}_db_data_2', PORT = 5432);" +"SELECT pgxc_pool_reload();" +"SELECT * FROM pgxc_node;" +) + +for NODE in "${NODES[@]}" +do + + echo -e "${RED} Running SQL For ${STACK_NAME[@]}_${NODE[@]} ${NC}" + + for SQL in "${SQL_STATMENTS[@]}" + do + echo -e "${BLUE} ./execute-service ${STACK_NAME[@]}_${NODE[@]} psql -c \"${SQL[@]}\" ${NC}" + ./execute-service ${STACK_NAME[@]}_${NODE[@]} psql -c "${SQL[@]}" + done + +done \ No newline at end of file diff --git a/docker.compose.image.swarm.yml b/docker.compose.image.swarm.yml new file mode 100644 index 0000000..b1e3d52 --- /dev/null +++ b/docker.compose.image.swarm.yml @@ -0,0 +1,108 @@ +version: "3.7" +services: + db_gtm_1: + environment: + - PG_HOST=0.0.0.0 + - PG_NODE=gtm_1 + - PG_PORT=6666 + image: pavouk0/postgres-xl:latest + command: docker-cmd-gtm + entrypoint: docker-entrypoint-gtm + volumes: + - db_gtm_1:/var/lib/postgresql + networks: + - db + # healthcheck: + # test: ["CMD", "docker-healthcheck-gtm"] + deploy: + mode: global + db_coord_1: + environment: + - PG_GTM_HOST=db_gtm_1 + - PG_GTM_PORT=6666 + - PG_HOST=0.0.0.0 + - PG_NODE=coord_1 + - PG_PORT=5432 + image: pavouk0/postgres-xl:latest + command: docker-cmd-coord + entrypoint: docker-entrypoint-coord + volumes: + - db_coord_1:/var/lib/postgresql + depends_on: + - db_gtm_1 + networks: + - db + # healthcheck: + # test: ["CMD", "docker-healthcheck-coord"] + deploy: + mode: global + db_coord_2: + environment: + - PG_GTM_HOST=db_gtm_1 + - PG_GTM_PORT=6666 + - PG_HOST=0.0.0.0 + - PG_NODE=coord_2 + - PG_PORT=5432 + image: pavouk0/postgres-xl:latest + command: docker-cmd-coord + entrypoint: docker-entrypoint-coord + volumes: + - db_coord_2:/var/lib/postgresql + depends_on: + - db_gtm_1 + networks: + - db + # healthcheck: + # test: ["CMD", "docker-healthcheck-coord"] + deploy: + mode: global + db_data_1: + environment: + - PG_GTM_HOST=db_gtm_1 + - PG_GTM_PORT=6666 + - PG_HOST=0.0.0.0 + - PG_NODE=data_1 + - PG_PORT=5432 + image: pavouk0/postgres-xl:latest + command: docker-cmd-data + entrypoint: docker-entrypoint-data + depends_on: + - db_gtm_1 + volumes: + - db_data_1:/var/lib/postgresql + networks: + - db + # healthcheck: + # test: ["CMD", "docker-healthcheck-data"] + deploy: + mode: global + db_data_2: + environment: + - PG_GTM_HOST=db_gtm_1 + - PG_GTM_PORT=6666 + - PG_HOST=0.0.0.0 + - PG_NODE=data_2 + - PG_PORT=5432 + image: pavouk0/postgres-xl:latest + command: docker-cmd-data + entrypoint: docker-entrypoint-data + depends_on: + - db_gtm_1 + volumes: + - db_data_2:/var/lib/postgresql + networks: + - db + # healthcheck: + # test: ["CMD", "docker-healthcheck-data"] + deploy: + mode: global +volumes: + db_gtm_1: {} + db_coord_1: {} + db_coord_2: {} + db_data_1: {} + db_data_2: {} +networks: + db: + driver: overlay + attachable: true