OSS スナップショットリポジトリを作成し、インデックスをバックアップし、スナップショットを Alibaba Cloud クラスターに復元することで、セルフマネージド Elasticsearch クラスターから Alibaba Cloud Elasticsearch にデータを移行します。
制限事項
-
OSS バケットは、次の要件を満たす必要があります:
-
ストレージクラスは標準である必要があります。
-
バケットは Alibaba Cloud Elasticsearch クラスターと同じリージョンにある必要があります。
-
-
クラスターバージョン:同じ Elasticsearch のメジャーバージョン内であれば、以前のマイナーバージョンから以降のマイナーバージョンにデータを移行できます (例:8.15.1 から 8.17.1)。 メジャーバージョンをまたいだデータ移行 (例:7.7.1 から 8.17.1) は推奨されません。
説明Alibaba Cloud Elasticsearch は、オープンソースの Elasticsearch と完全な互換性があります。 ただし、オープンソースのメジャーバージョン間でデータ型が変更されることがあります。 たとえば、5.x の
string型は、6.x ではtextとkeywordに分割されました。 メジャーバージョンをまたいでデータを移行すると、フィールド型の認識エラーが発生する可能性があります。
前提条件
-
Alibaba Cloud Elasticsearch クラスターと OSS バケットを作成します。 Alibaba Cloud Elasticsearch クラスターは、セルフマネージドクラスターと同じメジャーバージョンである必要があります。
-
RAM ユーザーに
AliyunOSSFullAccess権限ポリシーが付与されていることを確認してください。 詳細については、「RAM ユーザーへの権限付与」をご参照ください。
背景情報
この例では、products_info という名前のインデックスを使用して移行プロセスを説明します。
curl -X GET "http://localhost:9200/products_info/_search?pretty" を実行します。 次のレスポンスを受信した場合、インデックスデータの準備は完了です:
ソリューション概要

高い移行効率を必要とする大規模なデータセット (500 GB 以上) に最適です。 初回のフルバックアップの後、増分データのみが同期されるため、移行時間が短縮されます。 クラウド移行、クロスバージョンアップグレード、災害復旧に適しています。
データ移行
ステップ 1:elasticsearch-repository-oss プラグインのインストール
-
セルフマネージド Elasticsearch クラスターをホストする ECS インスタンスに接続し、elasticsearch-repository-oss プラグインをダウンロードします。 この例では、バージョン 8.17.0 を使用します。
wget https://github.com/aliyun/elasticsearch-repository-oss/releases/download/v8.17.0/elasticsearch-repository-oss-8.17.0.zipその他のバージョンについては、「その他のバージョンの elasticsearch-repository-oss プラグイン」をご参照ください。
-
Elasticsearch クラスターにプラグインをインストールします。
# Elasticsearch の各ノードの plugins ディレクトリにプラグインを解凍してインストールします。 sudo unzip -d /usr/local/elasticsearch-8.17.0/plugins/elasticsearch-repository-oss elasticsearch-repository-oss-8.17.0.zip -
セルフマネージド Elasticsearch クラスターのノードを起動します。
cd /usr/local/elasticsearch-8.17.0 ./bin/elasticsearch -d
ステップ 2:セルフマネージドクラスター用のスナップショットリポジトリの作成
セルフマネージド Elasticsearch クラスターをホストするサーバーで、スナップショットリポジトリを作成します:
このコマンドは Elasticsearch 8.x に適用されます。 その他のバージョンについては、「手動バックアップと復元」をご参照ください。
curl -X PUT "http://localhost:9200/_snapshot/<yourBackupName>" -H 'Content-Type: application/json' -d'
{
"type": "oss",
"settings": {
"oss.client.endpoint": "oss-cn-shanghai.aliyuncs.com",
"oss.client.access_key_id": "xxxx",
"oss.client.secret_access_key": "xxxx",
"oss.client.bucket": "<yourBucketName>",
"oss.client.base_path":"snapshot/",
"oss.client.compress": true
}
}
'
|
パラメーター |
説明 |
|
<yourBackupName> |
リポジトリのカスタム名。 |
|
type |
リポジトリのタイプ。 oss に設定する必要があります。 |
|
oss.client.endpoint |
OSS バケットのエンドポイント。 詳細については、「リージョンとエンドポイント」をご参照ください。 説明
セルフマネージド Elasticsearch クラスターの ECS インスタンスが OSS バケットと同じリージョンにある場合は、内部エンドポイントを使用します。 それ以外の場合は、パブリックエンドポイントを使用します。 |
|
oss.client.access_key_id |
OSS バケットを作成したアカウントの AccessKey ID。 詳細については、「AccessKey ペアの取得」をご参照ください。 |
|
oss.client.secret_access_key |
OSS バケットを作成したアカウントの AccessKey Secret。 詳細については、「AccessKey ペアの取得」をご参照ください。 |
|
oss.client.bucket |
OSS バケットの名前。 |
|
oss.client.base_path |
スナップショットのストレージパス。 |
|
oss.client.compress |
圧縮を有効にするかどうかを指定します:
|
正常に作成されると、レスポンス {"acknowledged": true} が返されます。
ステップ 3:インデックススナップショットの作成
セルフマネージド Elasticsearch クラスターで、snapshot_1 という名前のスナップショットを作成して、products_info インデックスをバックアップします。
curl -X PUT localhost:9200/_snapshot/<yourBackupName>/snapshot_1?pretty -H "Content-Type: application/json" -d'
{
"indices": "products_info"
}'
<yourBackupName> は、スナップショットリポジトリの作成時に指定したリポジトリ名です。
正常に作成されると、レスポンス {"accepted": true} が返されます。
curl -X GET localhost:9200/_snapshot/<yourBackupName>/snapshot_1/_status を実行して進行状況を確認します。 state が SUCCESS になると、スナップショットは完了です。
ステップ 4:Alibaba Cloud Elasticsearch でのリポジトリの作成
Alibaba Cloud Elasticsearch クラスターで、Kibana コンソールにログインします。 ナビゲーションペインで、
アイコンをクリックし、 を選択します。
Shell で、セルフマネージドクラスター用と同じ設定でリポジトリを作成します:
PUT _snapshot/<yourBackupName>/
{
"type": "oss",
"settings": {
"endpoint": "oss-cn-shanghai.aliyuncs.com",
"access_key_id": "xxxx",
"secret_access_key": "xxxxxx",
"bucket": "<yourBucketName>",
"compress": true,
"chunk_size": "500 MB",
"base_path": "snapshot/"
}
}
<yourBackupName>、<yourBucketName>、<base_path> の値は、セルフマネージド Elasticsearch クラスターのスナップショットリポジトリで使用した値と一致している必要があります。
ステップ 5:Alibaba Cloud Elasticsearch でのスナップショットの復元
Kibana コンソールで、snapshot_1 をクラスターに復元します。 これにより、モニタリングインデックスとセキュリティ監査インデックスを除くすべてのインデックスが復元され、存在しないインデックスはスキップされます。
POST _snapshot/<yourBackupName>/snapshot_1/_restore
{"indices":"*,-.monitoring*,-.security_audit*","ignore_unavailable":"true"}
リクエストが成功すると、レスポンス {"accepted": true} が返されます。
GET products_info/_recovery を実行して復元の進行状況を確認します。 "stage" が "DONE" になると、インデックスは復元されています。
Elasticsearch 7.10.x および 7.17.x では、cluster.restore.ignore_revision.enable を true に設定すると、より高いリビジョン番号を持つスナップショットの復元が許可されます。 リビジョン番号は、バージョンの 3 番目の部分です (例:7.10.1 の 1)。
例:7.10.0 クラスターで cluster.restore.ignore_revision.enable を true に設定すると、7.10.2 のスナップショットを復元できます:
PUT _cluster/settings
{
"persistent": {
"cluster.restore.ignore_revision.enable": true
}
}
ステップ 6:結果の検証
Kibana コンソールで、次のコマンドを実行して復元を検証します:
-
復元されたインデックスの表示:
GET /_cat/indices?v -
復元されたインデックス内のデータの表示:
GET /products_info/_search期待される結果:
{ "took": 3, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 6, "relation": "eq" }, "max_score": 1, "hits": [ { "_index": "products_info", "_id": "1", "_score": 1, "_source": { "productName": "Financial Product A", "annual_rate": "3.2200%", "describe": "180-day fixed-term investment, 20,000 minimum, stable returns, optional message notifications." } }, { "_index": "products_info", "_id": "2", "_score": 1, "_source": { "productName": "Financial Product B", "annual_rate": "3.1100%", "describe": "90-day investment product, 10,000 minimum, daily return notifications." } }, { "_index": "products_info", "_id": "3", "_score": 1, "_source": { "productName": "Financial Product C", "annual_rate": "3.3500%", "describe": "270-day investment product, 40,000 minimum, instant daily return notifications." } }, { "_index": "products_info", "_id": "4", "_score": 1, "_source": { "productName": "Financial Product D", "annual_rate": "3.1200%", "describe": "90-day investment product, 12,000 minimum, daily return notifications." } }, { "_index": "products_info", "_id": "5", "_score": 1, "_source": { "productName": "Financial Product E", "annual_rate": "3.0100%", "describe": "Recommended 30-day investment product, 8,000 minimum, daily return notifications." } }, { "_index": "products_info", "_id": "6", "_score": 1, "_source": { "productName": "Financial Product F", "annual_rate": "2.7500%", "describe": "Popular short-term product, 3-day term, no fees, 500 minimum, get return notifications via SMS." } } ] } }
よくある質問
その他のバージョンの elasticsearch-repository-oss プラグイン
GitHub からプラグインをダウンロードします。 ご使用のバージョンが利用できない場合は、同じメジャーバージョン内の類似のマイナーバージョンをダウンロードし、plugin-descriptor.properties ファイル内の値を更新して、再パッケージ化してインストールします。
-
version= 必要なプラグインのバージョン -
elasticsearch.version= セルフマネージド Elasticsearch クラスターのバージョン説明plugin-descriptor.propertiesファイル内のelasticsearch.versionプロパティが、ご使用のセルフマネージド Elasticsearch クラスターのバージョンと一致している必要があります。 -
java.version= 1.8説明-
Elasticsearch のバージョンが異なれば、必要な JDK のバージョンも異なります。 公式の Elasticsearch と プラグインの要件を確認してください。
-
オープンソースの Elasticsearch のバージョンには、さまざまなコンパイル方法があります。 ご使用のバージョンに合わせて elasticsearch-repository-oss プラグインをコンパイルする必要があります。 たとえば、セルフマネージド 7.6.2 クラスターには JDK 1.8 以降が必要です。 対応するプラグインは elasticsearch-repository-oss-7.6.2 です。
-