Alibaba Cloud Elasticsearchは、Elasticsearchクラスターに保存されているインデックスデータの手動スナップショットを作成し、スナップショットを共有リポジトリに保存し、スナップショットからデータを復元するためコマンドを提供しています。このトピックでは、手動スナップショットの作成方法とスナップショットからのデータの復元方法について説明します。
背景情報
Alibaba Cloud Elasticsearchクラスターのデータのバックアップと復元は、elasticsearch-repository-ossプラグインに依存しています。このプラグインは、Alibaba Cloud Elasticsearchクラスターにデフォルトでインストールされており、削除することはできません。このプラグインの詳細については、「elasticsearch-repository-oss」をご参照ください。
注意事項
スナップショットはインデックスデータのみを保存します。Elasticsearchクラスターの以下の情報はスナップショットには保存されません。監視データ(.monitoring
または.security_audit
で始まる名前のインデックスなど)、メタデータ、トランザクションログ、構成、ソフトウェアパッケージ、組み込みプラグインとカスタムプラグイン、ログ。
このトピックで提供されているすべてのコードは、ElasticsearchクラスターのKibanaコンソールで実行できます。詳細については、「Kibanaコンソールへのログイン」をご参照ください。
リポジトリの作成
my_backupという名前のリポジトリを作成します。
パラメーター | 説明 |
endpoint | OSSバケットの内部エンドポイント。エンドポイントの取得方法については、「リージョンとエンドポイント」をご参照ください。 |
access_key_id | アカウントのAccessKey ID。AccessKey IDの取得方法については、「AccessKeyペアの取得」をご参照ください。 |
secret_access_key | アカウントのAccessKeyシークレット。AccessKeyシークレットの取得方法については、「AccessKeyペアの取得」をご参照ください。 |
bucket | OSSバケットの名前。名前の取得方法については、「バケットの作成」をご参照ください。 |
compress | スナップショットのデータ圧縮機能を有効にするかどうかを指定します。有効な値: |
chunk_size | 大量のデータをOSSバケットにアップロードする場合、データを複数のパートに分割してアップロードできます。この場合、このパラメーターを使用して各パートのサイズを設定できます。パートのサイズがこのパラメーターの値に達すると、超過データは別のパートに分配されます。 |
base_path | リポジトリの開始場所。デフォルト値はルートディレクトリです。特定のスナップショットが保存されるディレクトリを指定できます。例:snapshot/myindex/。 |
リポジトリ情報のクエリ
すべてのリポジトリに関する情報のクエリ
特定のリポジトリに関する情報のクエリ
スナップショットの作成
有効なすべてのインデックスのスナップショットを作成する
PUT _snapshot/my_backup/snapshot_1
// my_backupリポジトリにsnapshot_1という名前のスナップショットを作成します。
上記のコマンドは、有効なすべてのインデックスの snapshot_1 スナップショットを作成し、my_backup リポジトリに保存します。コマンドを実行すると、システムはすぐに応答を返し、スナップショットを作成します。スナップショットが作成された後にシステムが応答を返すようにするには、コマンドに wait_for_completion パラメーターを指定します。このパラメーターは、スナップショットが作成されるまで、すべての API 呼び出しをブロックします。インデックスの合計サイズが大きい場合、応答は長時間後に返されます。
PUT _snapshot/my_backup/snapshot_1?wait_for_completion=true
// スナップショットの作成が完了するまで待機します。
説明
リポジトリには複数のスナップショットが保存されます。各スナップショットは、クラスター内のすべてのインデックス、特定のインデックス、または単一のインデックスのコピーです。
最初のスナップショットは、クラスター内のデータの完全なコピーです。後続のスナップショットには、増分データのみが保存されます。後続のスナップショットを作成する場合、システムは前のスナップショットにデータを追加または削除するだけです。したがって、後続のスナップショットの作成に必要な時間は、最初のスナップショットよりも短くなります。
特定のインデックスのスナップショットを作成する
デフォルトでは、スナップショットには有効なすべてのインデックスが含まれます。スナップショットの作成時に Kibana を使用している場合、ディスク容量が限られているため、すべての診断インデックス(.kibana
インデックス)を無視することができます。この場合、次のコマンドを実行して、特定のインデックスのスナップショットのみを作成できます。
PUT _snapshot/my_backup/snapshot_2
{
"indices": "index_1,index_2" // index_1とindex_2インデックスのスナップショットを作成します。
}
上記のコマンドは、index_1 インデックスと index_2 インデックスのスナップショットのみを作成します。
スナップショット情報のクエリ
すべてのスナップショットに関する情報のクエリ
GET _snapshot/my_backup/_all
// my_backupリポジトリのすべてのスナップショットに関する情報をクエリします。
コマンドが正常に実行されると、次の結果が返されます。
スナップショット名に基づいて特定のスナップショットに関する情報をクエリする
GET _snapshot/my_backup/snapshot_3
// my_backupリポジトリのsnapshot_3スナップショットに関する情報をクエリします。
コマンドが正常に実行されると、次の結果が返されます。
_status API を呼び出して、特定のスナップショットに関する情報をクエリする
GET _snapshot/my_backup/snapshot_3/_status
// my_backupリポジトリのsnapshot_3スナップショットのステータスをクエリします。
_status API を使用すると、スナップショットに関する詳細情報をクエリできます。情報には、スナップショットのステータスと各インデックスおよびシャードに関する統計が含まれます。コマンドが正常に実行されると、次の結果が返されます。
スナップショットの削除
次のコマンドを実行して、特定のスナップショットを削除できます。スナップショットが作成中の場合、システムは作成を停止し、リポジトリからスナップショットを削除します。
DELETE _snapshot/my_backup/snapshot_3
// my_backupリポジトリからsnapshot_3スナップショットを削除します。
警告
スナップショットは、DELETE API を呼び出すことによってのみ削除できます。スナップショットは他のスナップショットのデータに関連付けられている可能性があるため、手動で削除することはできません。スナップショットを手動で削除すると、他のスナップショットが破損する可能性があります。削除するスナップショットの一部のデータが他のスナップショットに関連付けられている場合、DELETE API はそのデータを見つけ、他のスナップショットに関連付けられていないデータのみを削除します。
スナップショットからのインデックスの復元
重要
ピリオド(.
)で始まる名前のインデックスは復元しないことをお勧めします。これらのインデックスを復元すると、Kibanaコンソールにアクセスできなくなる可能性があります。
復元するインデックスと同じ名前のインデックスがクラスターに存在する場合は、最初にクラスター内のインデックスを削除または無効にする必要があります。そうしないと、復元は失敗します。
スナップショット内のデータをリージョンをまたいで復元する場合は、データを宛先リージョンのOSSバケットに移行し、宛先リージョンの目的のElasticsearchクラスターにデータを復元する必要があります。詳細については、「データの移行」をご参照ください。
宛先クラスターで共有OSSリポジトリを作成する
スナップショットからクラスターにデータを復元する前に、クラスターで共有OSSリポジトリを作成し、スナップショットと同じOSSエンドポイントにマップする必要があります。詳細については、「リポジトリの作成」をご参照ください。
PUT _snapshot/my_backup_restore/
{
"type": "oss",
"settings": {
"endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com", // エンドポイント
"access_key_id": "xxxx", // アクセスキーID
"secret_access_key": "xxxxxx", // アクセスキーシークレット
"bucket": "xxxxxx", // バケット名
"compress": true, // 圧縮を有効にするかどうか
"chunk_size": "500mb", // チャンクサイズ
"base_path": "snapshot/" // リポジトリの開始場所
}
}
特定のインデックスを復元する
インデックス内のデータを確認または処理するだけで、Elasticsearchクラスター内のデータを上書きしたくない場合は、この方法を使用してインデックスを復元します。
POST /_snapshot/my_backup_restore/snapshot_1/_restore
{
"indices": "index_1", // index_1インデックスを復元します。
"rename_pattern": "index_(.+)", // インデックス名の形式
"rename_replacement": "restored_index_$1" // インデックスの名前を変更するために使用される正規表現
}
パラメーター | 説明 |
indices | 復元するインデックスの名前。この例では、システムは指定されたスナップショットから index_1 インデックスのみを復元します。 |
rename_pattern | インデックス名の形式。システムは、指定した形式に一致するインデックス名に基づいて、復元するインデックスを検索します。 |
rename_replacement | インデックスの名前を変更するために使用される正規表現。 |
ピリオド(.
)で始まる名前のインデックス以外のすべてのインデックスを復元する
POST _snapshot/my_backup_restore/snapshot_1/_restore
{"indices":"*,-.monitoring*,-.security*,-.kibana*","ignore_unavailable":"true"}
// .monitoring、.security、.kibanaで始まるインデックス以外のすべてのインデックスを復元します。
ピリオド(.
)で始まる名前のインデックスを含むすべてのインデックスを復元する
POST _snapshot/my_backup_restore/snapshot_1/_restore
// snapshot_1スナップショットのすべてのインデックスを復元します。
たとえば、snapshot_1 スナップショットに 5 つのインデックスが含まれている場合、上記のコマンドはこれらすべてのインデックスを Elasticsearch クラスターに復元します。
_restore API を呼び出すと、システムはすぐに応答を返し、インデックスを復元します。復元が完了するまで、すべての API 呼び出しをブロックする場合は、コマンドに wait_for_completion パラメーターを指定できます。
POST _snapshot/my_backup_restore/snapshot_1/_restore?wait_for_completion=true
// 復元が完了するまで待機します。
復元情報のクエリ
_recovery API を呼び出して、インデックス復元タスクに関する情報(タスクのステータスや進捗状況など)をクエリできます。
特定のインデックスの復元に関する情報のクエリ
GET restored_index_3/_recovery
// restored_index_3インデックスの復元情報をクエリします。
すべてのインデックスの復元に関する情報のクエリ
説明
情報には、復元プロセスに関係のないシャードに関する情報が含まれる場合があります。
GET /_recovery/
// すべてのインデックスの復元情報をクエリします。
コマンドが正常に実行されると、次の結果が返されます。
返された結果には、復元中のすべてのインデックスとこれらのインデックスのすべてのシャードがリストされます。結果には、各シャードの次の情報が含まれています。復元の開始時刻、復元の終了時刻、復元の期間、復元の進捗状況、および転送されたバイト数。次の表は、前の結果の一部のパラメーターについて説明しています。
パラメーター | 説明 |
type | 復元のタイプ。snapshot 値は、シャードがスナップショットから復元されていることを示します。 |
source | シャードが属するスナップショットとリポジトリ。 |
percent | 復元の進捗状況。94.5% 値は、シャード内のデータの 94.5% が復元されたことを示します。 |
スナップショットから復元中のインデックスを削除する
DELETE API を使用して、復元中のインデックスを削除し、インデックスの復元をキャンセルできます。
DELETE /restored_index_3
// restored_index_3インデックスを削除します。
restored_index_3 インデックスが復元中の場合、上記のコマンドは復元を停止し、Elasticsearch クラスターに復元されたデータを削除します。