From 51f6469119e46ca82c52b6c972880f8f3538f2dd Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 27 Feb 2023 12:49:36 +0100 Subject: [PATCH 1/2] backup script working - initial commit --- deployment/scripts/cluster.backup.sh | 45 ++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100755 deployment/scripts/cluster.backup.sh diff --git a/deployment/scripts/cluster.backup.sh b/deployment/scripts/cluster.backup.sh new file mode 100755 index 000000000..a09b6d65f --- /dev/null +++ b/deployment/scripts/cluster.backup.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +# base setup +SCRIPT_PATH=$(realpath $0) +SCRIPT_DIR=$(dirname $SCRIPT_PATH) + +# configuration +CONFIGURATION=${CONFIGURATION:-"example"} +KUBECONFIG=${KUBECONFIG:-${SCRIPT_DIR}/../configurations/${CONFIGURATION}/kubeconfig.yaml} +BACKUP_DATE=$(date "+%F_%H-%M-%S") +BACKUP_FOLDER=${BACKUP_FOLDER:-${SCRIPT_DIR}/../configurations/${CONFIGURATION}/backup/${BACKUP_DATE}} + +# create backup fodler +mkdir -p ${BACKUP_FOLDER} + +# maintenance mode on +# TODO +# ${SCRIPT_DIR}/cluster.maintenance.sh on + +# shutdown database +kubectl --kubeconfig=${KUBECONFIG} get deployment ocelot-neo4j -o json \ + | jq '.spec.template.spec.containers[] += {"command": ["tail", "-f", "/dev/null"]}' \ + | kubectl --kubeconfig=${KUBECONFIG} apply -f - + +# wait for the container to restart +sleep 60 + +# database backup +kubectl --kubeconfig=${KUBECONFIG} -n default exec -it $(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-neo4j | awk '{ print $1 }') -- neo4j-admin dump --to=/var/lib/neo4j/$BACKUP_DATE-neo4j-dump +# copy neo4j backup to local drive +kubectl --kubeconfig=${KUBECONFIG} cp default/$(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-neo4j |awk '{ print $1 }'):/var/lib/neo4j/$BACKUP_DATE-neo4j-dump $BACKUP_FOLDER/neo4j-dump +# copy image data +kubectl --kubeconfig=${KUBECONFIG} cp default/$(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-backend |awk '{ print $1 }'):/app/public/uploads $BACKUP_FOLDER/public-uploads + +# restart database +kubectl --kubeconfig=${KUBECONFIG} get deployment ocelot-neo4j -o json \ + | jq 'del(.spec.template.spec.containers[].command)' \ + | kubectl --kubeconfig=${KUBECONFIG} apply -f - + +# wait for the container to restart +sleep 60 + +# maintenance mode off +# TODO +# ${SCRIPT_DIR}/cluster.maintenance.sh on \ No newline at end of file From 799ea1fbe64659734d973917f67ce1c84d2543ef Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 27 Feb 2023 13:01:27 +0100 Subject: [PATCH 2/2] finish backup script --- deployment/scripts/cluster.backup.sh | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/deployment/scripts/cluster.backup.sh b/deployment/scripts/cluster.backup.sh index a09b6d65f..b83bab198 100755 --- a/deployment/scripts/cluster.backup.sh +++ b/deployment/scripts/cluster.backup.sh @@ -14,8 +14,7 @@ BACKUP_FOLDER=${BACKUP_FOLDER:-${SCRIPT_DIR}/../configurations/${CONFIGURATION}/ mkdir -p ${BACKUP_FOLDER} # maintenance mode on -# TODO -# ${SCRIPT_DIR}/cluster.maintenance.sh on +${SCRIPT_DIR}/cluster.maintenance.sh on # shutdown database kubectl --kubeconfig=${KUBECONFIG} get deployment ocelot-neo4j -o json \ @@ -26,11 +25,15 @@ kubectl --kubeconfig=${KUBECONFIG} get deployment ocelot-neo4j -o json \ sleep 60 # database backup -kubectl --kubeconfig=${KUBECONFIG} -n default exec -it $(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-neo4j | awk '{ print $1 }') -- neo4j-admin dump --to=/var/lib/neo4j/$BACKUP_DATE-neo4j-dump +kubectl --kubeconfig=${KUBECONFIG} -n default exec -it \ + $(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-neo4j | awk '{ print $1 }') \ + -- neo4j-admin dump --to=/var/lib/neo4j/$BACKUP_DATE-neo4j-dump # copy neo4j backup to local drive -kubectl --kubeconfig=${KUBECONFIG} cp default/$(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-neo4j |awk '{ print $1 }'):/var/lib/neo4j/$BACKUP_DATE-neo4j-dump $BACKUP_FOLDER/neo4j-dump +kubectl --kubeconfig=${KUBECONFIG} cp \ + default/$(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-neo4j |awk '{ print $1 }'):/var/lib/neo4j/$BACKUP_DATE-neo4j-dump $BACKUP_FOLDER/neo4j-dump # copy image data -kubectl --kubeconfig=${KUBECONFIG} cp default/$(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-backend |awk '{ print $1 }'):/app/public/uploads $BACKUP_FOLDER/public-uploads +kubectl --kubeconfig=${KUBECONFIG} cp \ + default/$(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-backend |awk '{ print $1 }'):/app/public/uploads $BACKUP_FOLDER/public-uploads # restart database kubectl --kubeconfig=${KUBECONFIG} get deployment ocelot-neo4j -o json \ @@ -41,5 +44,4 @@ kubectl --kubeconfig=${KUBECONFIG} get deployment ocelot-neo4j -o json \ sleep 60 # maintenance mode off -# TODO -# ${SCRIPT_DIR}/cluster.maintenance.sh on \ No newline at end of file +${SCRIPT_DIR}/cluster.maintenance.sh off \ No newline at end of file