Elasticsearchデータの移行とバックアップ

5037 ワード

ESは、いくつかのノードのクラッシュによってデータの整合性が損なわれないようにreplicas shardsのメカニズムを提供していますが、定期的なデータバックアップは、必要に応じて依然として重要です.また、バックアップとリカバリにより、異なるクラスタ間でのデータの移行も実現できます(dataディレクトリのインデックスファイルを直接コピーする方法は試みましたが、成功しませんでした).
バックアップの方法は公式ドキュメントにはっきりと説明されています.まず倉庫(repository)を作成し、倉庫にスナップショット(snapshot)を追加し、バックアップの状態を確認し、完了します.公式文書は軽く書かれていますが、最初のステップで引っかかりました.倉庫の作成には共有ファイルシステムが必要です(ESノードごとにアクセスできる必要があります).データをオンラインクラスタからオフラインに移行してより包括的なテストをしたいだけです.このようなことのためにシステム部を探して共有サーバを待つのはどんなに頭が痛いことか......
Googleの後、sshfsを使用してESクラスタ内の各ノードの同じ場所に共有ディレクトリをマウントすることにしました.以下は操作コマンドです.
//  sshfs
yum install fuse sshfs

//  
mkdir /root/backup

//  , 
mkdir /mnt/backup
sshfs root@192.168.x.x:/root/backup /mnt/backup -o allow_other

//  ES 
sudo -u elasticsearch touch /mnt/backup/test

ここの最大のピットは書き込み権限の問題で、/mnt/backupを作成するときにownerをelasticsearchに変更したり、マウントするときに-o uid=gid=というパラメータでディレクトリを変更したりしたownerを試したことがありますが、卵を並べて・・・午後を振り回しました.最後にやっとstack overflowでこのパラメータを見つけた-o allow_otherですが、実はこのようにするのは乱暴で、機械の上のいかなるユーザーもこのディレクトリにアクセスすることができます.もっと優雅な実現方法がある学生は教えてください.
共有ディレクトリの問題を解決したら、公式ドキュメントのように軽く書くことができます.
//  _plugin/marvel/sense 

//  
PUT _snapshot/my_backup 
{
    "type": "fs", 
    "settings": {
        "location": "/mnt/backup",
        "compress": true
    }
}

//  index 
PUT _snapshot/my_backup/snapshot_test
{
    "indices": "index_1, index_2"
}

//  
GET _snapshot/my_backup/snapshot_test/_status

移行を開始できます.
//  , /root/backup :
-rw-r--r-- 1 root root   31 12  15 22:14 index
drwxr-xr-x 3 root root 4096 12  15 22:14 indices
-rw-r--r-- 1 root root   83 12  15 22:14 metadata-snapshot_test
-rw-r--r-- 1 root root  181 12  15 22:14 snapshot-snapshot_test

//  

//  (/root/backup ), 

//  sense RESTful API 
POST _snapshot/my_backup/snapshot_test/_restore

//  
GET _snapshot/my_backup/snapshot_test/_status

以上、公式文書を参照して実施したESデータのバックアップと移行について、皆様のご協力をお願いいたします.