From b50fc3737367254ceb06290f265f0c6a8e71f205 Mon Sep 17 00:00:00 2001 From: Brian Long Date: Fri, 6 Aug 2021 14:49:29 -0400 Subject: [PATCH] initial commit --- setenv.sh | 34 ++++++++++++++++++++++++++++++++++ solr-backup.sh | 10 ++++++++++ solr-create.sh | 25 +++++++++++++++++++++++++ solr-docker-copy.sh | 32 ++++++++++++++++++++++++++++++++ solr-migrate-shard.sh | 12 ++++++++++++ solr-pause.sh | 10 ++++++++++ solr-remove.sh | 10 ++++++++++ solr-restore.sh | 21 +++++++++++++++++++++ solr-resume.sh | 10 ++++++++++ solr-ssh-copy.sh | 31 +++++++++++++++++++++++++++++++ 10 files changed, 195 insertions(+) create mode 100644 setenv.sh create mode 100644 solr-backup.sh create mode 100644 solr-create.sh create mode 100644 solr-docker-copy.sh create mode 100644 solr-migrate-shard.sh create mode 100644 solr-pause.sh create mode 100644 solr-remove.sh create mode 100644 solr-restore.sh create mode 100644 solr-resume.sh create mode 100644 solr-ssh-copy.sh diff --git a/setenv.sh b/setenv.sh new file mode 100644 index 0000000..d4a7e18 --- /dev/null +++ b/setenv.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +if [[ ! -z "$SOLR_HOST" ]]; then + echo "A SOLR_HOST environment variable is required" + exit 1 +fi + +if [[ ! -z "$SOLR_PORT" ]]; then + SOLR_PORT=8983 +fi + +if [[ ! -z "$SOLR_PROTOCOL" ]]; then + SOLR_PROTOCOL=http +fi + +if [[ ! -z "$SOLR_BASEPATH" ]]; then + SOLR_BASEPATH=/solr +fi + +if [[ ! -z "$SOLR_BASEURL" ]]; then + SOLR_BASEURL=${SOLR_PROTOCOL}://${SOLR_HOST}:${SOLR_PORT}/$SOLR_BASEPATH +fi + +if [[ ! -z "$SOLR_CORE" ]]; then + SOLR_CORE=alfresco +fi + +if [[ ! -z "$SOLR_LOCALPATH" ]]; then + SOLR_LOCALPATH=/tmp +fi + +if [[ ! -z "$SOLR_TEMPLATE" ]]; then + SOLR_TEMPLATE=rerank +fi diff --git a/solr-backup.sh b/solr-backup.sh new file mode 100644 index 0000000..74b9329 --- /dev/null +++ b/solr-backup.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +. ./setenv.sh + +ARG_SOLR_SHARD_ID=$1 +if [[ ! -z "$ARG_SOLR_SHARD_ID" ]]; then + SOLR_CORE=${SOLR_CORE}-${ARG_SOLR_SHARD_ID} +fi + +curl -SsL ${SOLR_BASEURL}/${SOLR_CORE}/replication?command=backup\&location=${SOLR_LOCALPATH}\&numberToKeep=1 diff --git a/solr-create.sh b/solr-create.sh new file mode 100644 index 0000000..c9307fb --- /dev/null +++ b/solr-create.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +. ./setenv.sh + +ARG_SOLR_SHARD_IDS=$1 +ARG_SOLR_SHARDS=$2 +ARG_SOLR_NODE_ID=$3 +ARG_SOLR_NODES=$4 + +if [[ ! -z "$ARG_SOLR_SHARD_IDS" ]]; then + if [[ ! -z "$ARG_SOLR_SHARDS" ]]; then + echo "The expected number of shards is required" + exit 1 + fi + if [[ ! -z "$ARG_SOLR_NODE_ID" ]]; then + ARG_SOLR_NODE_ID=1 + fi + if [[ ! -z "$ARG_SOLR_NODES" ]]; then + ARG_SOLR_NODES=1 + fi + + curl -SsL ${SOLR_BASEURL}/admin/cores?action=newCore\\&core=${SOLR_CORE}\\&storeRef=workspace://SpacesStore\\&numShards=${ARG_SOLR_SHARDS}\\&nodeInstance=${ARG_SOLR_NODE_ID}\\&numNodes=${ARG_SOLR_NODES}\\&template=${SOLR_TEMPLATE}\\&shardIds=${ARG_SOLR_SHARD_IDS} +else + curl -SsL ${SOLR_BASEURL}/admin/cores?action=newCore\\&core=${SOLR_CORE}\\&storeRef=workspace://SpacesStore\\&template=${SOLR_TEMPLATE} +fi diff --git a/solr-docker-copy.sh b/solr-docker-copy.sh new file mode 100644 index 0000000..366c307 --- /dev/null +++ b/solr-docker-copy.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +. ./setenv.sh + +if [[ ! -z "$SOLR_LOCALPATH" ]]; then + SOLR_LOCALPATH=/tmp +fi + +ARG_DOCKER_SOURCE=$1 +ARG_DOCKER_TARGET=$2 +ARG_BACKUP_TIMESTAMP=$3 + +if [[ ! -z "$ARG_BACKUP_TIMESTAMP" ]]; then + echo "A timestamp of the backup to copy is required" + exit 1; +fi + +if [[ ! -z "$ARG_DOCKER_SOURCE" ]]; then + echo "A source Docker container name or ID is required" + exit 1 +fi + +if [[ ! -z "$ARG_DOCKER_TARGET" ]]; then + echo "A target Docker container name or ID is required" + exit 1 +fi + +# copy from one node to the other +docker container cp ${ARG_DOCKER_SOURCE}:${SOLR_LOCALPATH}/snapshot.${ARG_BACKUP_TIMESTAMP} /tmp +docker container cp /tmp/snapshot.${ARG_BACKUP_TIMESTAMP} ${ARG_DOCKER_TARGET}:${SOLR_LOCALPATH} +docker container exec --privileged -u root ${ARG_DOCKER_TARGET} chmod -R go+r ${SOLR_LOCALPATH}/snapshot.${ARG_BACKUP_TIMESTAMP} +rm -rf /tmp/snapshot.${ARG_BACKUP_TIMESTAMP} diff --git a/solr-migrate-shard.sh b/solr-migrate-shard.sh new file mode 100644 index 0000000..e5a33ce --- /dev/null +++ b/solr-migrate-shard.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +# backup shardS on nodeA + +# copy backup of shardS from nodeA to nodeB + +# if non existent, create shardS on nodeB +# pause indexing of shardS on nodeB +# restore shardS on nodeB +# resume indexing of shardS on nodeB + +# optionally remove shardS on nodeA; probably best done well after the fact diff --git a/solr-pause.sh b/solr-pause.sh new file mode 100644 index 0000000..ed54bc0 --- /dev/null +++ b/solr-pause.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +. ./setenv.sh + +ARG_SOLR_SHARD_ID=$1 +if [[ ! -z "$ARG_SOLR_SHARD_ID" ]]; then + SOLR_CORE=${SOLR_CORE}-${ARG_SOLR_SHARD_ID} +fi + +curl -SsL ${SOLR_BASEURL}/admin/cores?action=disable-indexing\&core=${SOLR_CORE} diff --git a/solr-remove.sh b/solr-remove.sh new file mode 100644 index 0000000..a8afa1c --- /dev/null +++ b/solr-remove.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +. ./setenv.sh + +ARG_SOLR_SHARD_ID=$1 +if [[ ! -z "$ARG_SOLR_SHARD_ID" ]]; then + SOLR_CORE=${SOLR_CORE}-${ARG_SOLR_SHARD_ID} +fi + +curl -SsL ${SOLR_BASEURL}/admin/cores?action=UNLOAD\&core=${SOLR_CORE}\&deleteIndex=true\&deleteDataDir=true\&deleteInstanceDir=true diff --git a/solr-restore.sh b/solr-restore.sh new file mode 100644 index 0000000..2c275bc --- /dev/null +++ b/solr-restore.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +. ./setenv.sh + +if [[ ! -z "$SOLR_LOCALPATH" ]]; then + SOLR_LOCALPATH=/tmp +fi + +ARG_BACKUP_TIMESTAMP=$1 +ARG_SOLR_SHARD_ID=$2 + +if [[ ! -z "$ARG_BACKUP_TIMESTAMP" ]]; then + echo "A timestamp of the backup to restore is required" + exit 1; +fi + +if [[ ! -z "$ARG_SOLR_SHARD_ID" ]]; then + SOLR_CORE=${SOLR_CORE}-${ARG_SOLR_SHARD_ID} +fi + +curl -SsL ${SOLR_BASEURL}/${SOLR_CORE}/replication?command=restore\&location=${SOLR_LOCALPATH}\&name=${ARG_BACKUP_TIMESTAMP} diff --git a/solr-resume.sh b/solr-resume.sh new file mode 100644 index 0000000..91c58aa --- /dev/null +++ b/solr-resume.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +. ./setenv.sh + +ARG_SOLR_SHARD_ID=$1 +if [[ ! -z "$ARG_SOLR_SHARD_ID" ]]; then + SOLR_CORE=${SOLR_CORE}-${ARG_SOLR_SHARD_ID} +fi + +curl -SsL ${SOLR_BASEURL}/admin/cores?action=enable-indexing\&core=${SOLR_CORE} diff --git a/solr-ssh-copy.sh b/solr-ssh-copy.sh new file mode 100644 index 0000000..0c109e6 --- /dev/null +++ b/solr-ssh-copy.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +. ./setenv.sh + +if [[ ! -z "$SOLR_LOCALPATH" ]]; then + SOLR_LOCALPATH=/tmp +fi + +ARG_SSH_SOURCE=$1 +ARG_SSH_TARGET=$2 +ARG_BACKUP_TIMESTAMP=$3 + +if [[ ! -z "$ARG_BACKUP_TIMESTAMP" ]]; then + echo "A timestamp of the backup to copy is required" + exit 1; +fi + +if [[ ! -z "$ARG_SSH_SOURCE" ]]; then + echo "A source SSH host is required" + exit 1 +fi + +if [[ ! -z "$ARG_SSH_TARGET" ]]; then + echo "A target SSH host is required" + exit 1 +fi + +# copy from one node to the other +scp -r ${ARG_SSH_SOURCE}:${SOLR_LOCALPATH}/snapshot.${ARG_BACKUP_TIMESTAMP} /tmp +scp -r /tmp/snapshot.${ARG_BACKUP_TIMESTAMP} ${ARG_SSH_TARGET}:${SOLR_LOCALPATH} +rm -rf /tmp/snapshot.${ARG_BACKUP_TIMESTAMP}