Skip to main content

Резервирование ArangoDB

  1. Создать каталог для хранения резервной копии сервиса ArangoDB с помощью команды:
mkdir /opt/Pythagoras/backups/arangodb
  1. Запуcтить скрипт mount_s3.sh на сервере с ролью infra для бакета arangodump
./mount_s3.sh arangodump /opt/Pythagoras/backups/arangodb/

Пример скрипта:

#!/bin/bash
# Script for mounting an S3-compatible bucket using s3fs
# Usage:
# ./mount_s3.sh my-bucket
# ./mount_s3.sh --help
show_help() {
cat <<EOF
Usage: $0 BUCKET_NAME [MOUNT_POINT]
Mounts the specified S3 bucket into a local directory using s3fs.
Arguments:
BUCKET_NAME Name of the S3 bucket (required)
MOUNT_POINT Local directory to mount into (default: ~/s3mount)
Environment variables:
S3_ACCESS_KEY Access Key
S3_SECRET_KEY Secret Key
S3_ENDPOINT S3 endpoint URL (default: http://localhost:9000)
Example:
export S3_ACCESS_KEY=minioadmin
export S3_SECRET_KEY=minioadmin
./mount_s3.sh my-bucket
EOF
}
# Show help and exit
if [[ "$1" == "--help" || "$1" == "-h" ]]; then
show_help
exit 0
fi
# Check if bucket name is provided
if [[ -z "$1" ]]; then
echo "Error: Bucket name not specified"
show_help
exit 1
fi
BUCKET_NAME="$1"
MOUNT_POINT="${2:-$HOME/s3mount}"
S3_ENDPOINT="${S3_ENDPOINT:-http://localhost:9000}"
# Check if credentials are set
if [[ -z "$S3_ACCESS_KEY" || -z "$S3_SECRET_KEY" ]]; then
echo "Error: Set S3_ACCESS_KEY and S3_SECRET_KEY environment variables"
exit 1
fi
# Create password file
PASSWD_FILE="$HOME/.passwd-s3fs"
echo "${S3_ACCESS_KEY}:${S3_SECRET_KEY}" > "$PASSWD_FILE"
chmod 600 "$PASSWD_FILE"
# Create mount point directory
mkdir -p "$MOUNT_POINT"
# Mount the bucket
s3fs "$BUCKET_NAME" "$MOUNT_POINT" \
-o passwd_file="$PASSWD_FILE" \
-o url="$S3_ENDPOINT" \
-o use_path_request_style \
-o allow_other \
-o umask=000
echo "Bucket $BUCKET_NAME mounted to $MOUNT_POINT"
  1. Запустить скрипт, представленный в разделе «2.2.1 Резервное копирование данных».
./arangodump2fs.sh

Пример скрипта:

#!/bin/bash
# Backup ArangoDB database into a daily file.
#
set -e
BACKUP_DIR="/opt/Pythagoras/backups/arangodb"
CURRENT_DATETIME="$(date +%Y_%m_%d_%H%M)"
KEEP_BACKUPS=<RETENTION_TIME>
ARANGODB_IMAGE="pythagoras/pgs-arangodb"
ARANGODB_VERSION="<VERSION>"
ARANGODB_HOST="<HOST>"
ARANGODB_PORT="<PORT>"
ARANGODB_PASS="<PASSWORD>"
RC=0
docker run \
--name arangodb_backup \
--network pgs-network \
--rm \
-v "${BACKUP_DIR}:${BACKUP_DIR}" \
pgs-private-registry:5001/${ARANGODB_IMAGE}:${ARANGODB_VERSION} \
arangodump \
--all-databases true \
--compress-output false \
--include-system-collections true \
--output-directory \
"${BACKUP_DIR}/arangodb_$(date +%Y_%m_%d_%H%M)" \
--server.authentication true \
--server.endpoint "tcp://${ARANGODB_HOST}:${ARANGODB_PORT}" \
--server.password ${ARANGODB_PASS} \
--server.username 'root' || RC=1
# Do tar.gz of backup folder
cd "${BACKUP_DIR}" || RC=1
tar -czf "arangodb_${CURRENT_DATETIME}.tar.gz" \
"arangodb_${CURRENT_DATETIME}" || RC=1
rm -rf "${BACKUP_DIR}/arangodb_${CURRENT_DATETIME}" || RC=1
# Delete archives older then KEEP_BACKUPS value
echo "find \"${BACKUP_DIR:?}\"/ -mtime +\"${KEEP_BACKUPS}\" -name \"*.tar.gz\" -
delete || RC=1"
find "${BACKUP_DIR:?}"/ -mtime +"${KEEP_BACKUPS}" -name "*.tar.gz" -delete ||
RC=1
if [ ${RC} = 0 ]
then
echo "Successfully backup"
else
echo "Backup Failed"
fi
  1. Задать переменные:
BACKUP_DIR="<BACKUP_DIR>"
MINIO_BUCKET="<MINIO_BUCKET>"
  1. Запустить скрипт:
#!/bin/bash
set -e
BACKUP_DIR="<BACKUP_DIR>"
MINIO_IMAGE="<MINIO_IMAGE_NAME>"
MINIO_VERSION="<VERSION>"
MINIO_URL="<MINIO_URL>"
MINIO_ACCESS_KEY="<ACCESS_KEY>"
MINIO_SECRET_KEY="<SECRET_KEY>"
MINIO_ALIAS_NAME="<MINIO_ALIAS_NAME>"
MINIO_BUCKET="<MINIO_BUCKET>"
RC=0
docker run --net=host -it --entrypoint=bash -v ${BACKUP_DIR}:${BACKUP_DIR} \
pgs-private-registry:5001/${MINIO_IMAGE}:${MINIO_VERSION} -c \
"mc alias set ${MINIO_ALIAS_NAME} ${MINIO_URL} ${MINIO_ACCESS_KEY} \
${MINIO_SECRET_KEY};
mc mirror --remove --preserve ${MINIO_ALIAS_NAME}/${MINIO_BUCKET} $BACKUP_DIR/" \
|| RC=1
if [ ${RC} = 0 ]
then
echo "Successfully backup"
else
echo "Backup Failed"
fi