graylog自動化データバックアップスクリプト

4952 ワード

説明


データのバックアップ、リカバリを容易にするために、es_backup.shes_restore.shの2つのスクリプトが書かれています.es_backup.shスクリプトに含まれる変数backFilePath(バックアップデータを格納する圧縮パッケージディレクトリ)は、このスクリプトを使用する前に作成する必要があります(スクリプトのディレクトリは例であり、必要に応じて変更できます)、storeName(es倉庫名)、storePath(es倉庫パス)は、倉庫名、倉庫パスに変更されます.このバックアップ・スクリプトには、snapshot_ という名前のスナップショットが付けられています.たとえば、snapshot_2018032617は、2018年03月26日17時に作成されたスナップショットを示しています.es_backup.sh
#!/bin/bash
#elasticsearch index backup
dateTime=`date +%Y%m%d%H`
snapshotName="snapshot_${dateTime}"
backFilePath="/home/monitorManager/elasticsearchBackupData/back"
backesFile=es$dateTime.tar.gz
storeName="backup_1"
storePath="/backup"
echo $snapshotName

if [[ $# == 2 ]];then
    case $1 in
        allIndex)
            mkdir $backFilePath/es_dump
            curl -XDELETE $2/_snapshot/$storeName/$snapshotName?pretty
            curl -XPUT "$2/_snapshot/$storeName/$snapshotName?pretty&wait_for_completion=true"
            echo 'Copying files......'
            cp -rf $storePath/* $backFilePath/es_dump
            cd $backFilePath
            tar czf $backesFile es_dump/
            rm -rf $backFilePath/es_dump/
            echo "success"
        ;;
    *)
        echo "Usage:$0 allIndex esHost:esPort"
    ;;
    esac
elif [[ $# == 3 ]];then
    case $1 in
        specialIndex)
            mkdir $backFilePath/es_dump
            curl -XDELETE $2/_snapshot/$storeName/$snapshotName?pretty
            index=$3
            jsonIndex="{\"indices\":\"${index}\"}"
            curl -XPUT "$2/_snapshot/$storeName/$snapshotName?pretty&wait_for_completion=true" -d ${jsonIndex}
            echo 'Copying files......'
            cp -rf $storePath/* $backFilePath/es_dump
            cd $backFilePath
            tar czf $backesFile es_dump/
            rm -rf $backFilePath/es_dump/
            echo "success"
        ;;
    *)
        echo "Usage:$0 specialIndex esHost:esPort yourIndexName1,yourIndexName2"
    ;;
    esac
fi
es_restore.shスクリプトのうちesNewHost(es移行先クラスタホスト)、esNewPort(es移行先クラスタポート)、esNewStorePath(es移行先クラスタウェアハウスディレクトリ)、esOldBackPath(ソースクラスタウェアハウスディレクトリ)は、事前に作成する必要があり、必要に応じて変更できます.es_restore.sh
#!/bin/bash
#elasticsearch index restore
dateTime=$2
snapshotName="snapshot_${dateTime}"
backesFile=es$dateTime.tar.gz
storeName="backup_1"
esNewHost="localhost"
esNewPort=9200
esNewStorePath="/home/monitorManager/test"
esOldBackPath="/home/monitorManager/elasticsearchBackupData/back"

if [[ $# == 2 ]];then
    case $1 in
        restoreAll)
            cd $esOldBackPath
            tar -zxvf $backesFile
            rm -rf $esNewStorePath/*
            cp -rf $esOldBackPath/es_dump/* $esNewStorePath
            curl -XPOST "$esNewHost:$esNewPort/_snapshot/$storeName/$snapshotName/_restore?pretty&wait_for_completion=true"
            rm -rf $esOldBackPath/es_dump/ 
            echo "restore success"
        ;;
    *)
        echo "Usage:$0 restoreAll {dateTime}"
    ;;
    esac
elif [[ $# == 3 ]];then
    case $1 in
        restoreSpecial)
            index=$3
            cd $esOldBackPath
            tar -zxvf $backesFile
            rm -rf $esNewStorePath/*
            cp -rf $esOldBackPath/es_dump/* $esNewStorePath
            echo "closing index......"
            curl -XPOST $esNewHost:$esNewPort/$index/_close
            jsonIndex="{\"indices\":\"${index}\"}"
            echo $jsonIndex
            curl -XPOST "$esNewHost:$esNewPort/_snapshot/$storeName/$snapshotName/_restore?pretty&wait_for_completion=true" -d ${jsonIndex}
            rm -rf $esOldBackPath/es_dump/ 
            echo "opening index......"
            curl -XPOST $esNewHost:$esNewPort/$index/_open
            echo "restore success"
        ;;
    *)
        echo "Usage:$0 restoreSpecial {dateTime} {yourIndexName1,yourIndexName2}"
    ;;
    esac
fi

使用方法の説明


2つのスクリプトをサーバにアップロードし、実行権限を追加します.
$ sudo chmod +x es_backup.sh
$ sudo chmod +x es_restore.sh

バックアップ
#  
$ ./es_backup.sh allIndex {esHost:esPort} 
#  
$ ./es_backup.sh specialIndex {esHost:esPort} {indexName1,indexName2}

≪リカバリ・スナップショット内のすべてのインデックスのリカバリ|Recovery Recovery Snapshot All Index|emdw≫:スナップショット内のすべてのインデックスをリカバリする場合は、スナップショットに含まれるインデックスを事前に閉じる必要があります.次に、次のコマンドを実行します.
$ ./es_restore.sh restoreAll {dateTime}

スナップショットで指定したインデックスを復元するには、次の手順に従います.
$ ./es_restore.sh restoreAll {dateTime} {yourIndexName1,yourIndexName2}

説明:{}の内容を置き換える必要があります.