Alibaba Cloud Elasticsearch インスタンスが新しいクラウドネイティブコントロールアーキテクチャ (v3) を使用している場合、Elastic Computing Service (ECS) インスタンスでホストされている自己管理 Elasticsearch クラスターからデータを移行できます。このトピックでは、reindex メソッドを使用してプライベート接続経由でデータを移行する方法について説明します。このプロセスには、インデックスの作成とデータの移行が含まれます。
前提条件
自己管理 Elasticsearch クラスターは、次の要件を満たす必要があります。
クラスターをホストする ECS インスタンスは、VPC (virtual private cloud) 内にある必要があります。ClassicLink はサポートされていません。ECS インスタンスと Alibaba Cloud Elasticsearch インスタンスは同じ VPC 内にある必要があります。
ECS インスタンスのセキュリティグループは、Alibaba Cloud Elasticsearch インスタンスのすべてのノード IP アドレスからのアクセスを許可する必要があります。ノード IP アドレスは Kibana コンソールで確認できます。ポート 9200 も開いている必要があります。
Alibaba Cloud Elasticsearch インスタンスとの接続が確立されています。スクリプトを実行するマシンから
curl -XGET http://<host>:9200コマンドを実行して接続を確認できます。説明このトピックのスクリプトはどのマシンからでも実行できます。マシンは、自己管理 Elasticsearch クラスターと Alibaba Cloud Elasticsearch クラスターの両方のポート 9200 にアクセスできる必要があります。
自己管理 Elasticsearch クラスターでインデックスデータを準備します。このトピックでは、次の図に示す `source` インデックスを例として使用します。

Alibaba Cloud Elasticsearch インスタンスは、次の要件を満たす必要があります。
事前に自動インデックス作成機能を有効にします。または、Alibaba Cloud Elasticsearch インスタンスでインデックスの
mappingsとsettingsを作成することもできます。ホワイトリストの制限は設定されていません。
制限事項
Alibaba Cloud ES は、基本コントロール (v2) アーキテクチャとクラウドネイティブ新コントロール (v3) アーキテクチャの 2 つのデプロイメントモードを提供します。デプロイメントモードは、インスタンスの基本情報セクションで確認できます。

クラウドネイティブ新コントロール (v3) アーキテクチャを使用するクラスターの場合、PrivateLink を使用して Alibaba Cloud ES クラスターへのプライベート接続を確立し、クラスター間の reindex 操作を行う必要があります。ビジネスシナリオに基づいて、次の表からソリューションを選択してください。
シナリオ | ES クラスターネットワークアーキテクチャ | ソリューション |
Alibaba Cloud ES クラスター間のデータ移行 | 両方の ES クラスターが基本コントロール (v2) アーキテクチャを使用している。 | reindex メソッド: Alibaba Cloud ES クラスター間のクラスター間 reindex。 |
ES クラスターの 1 つがクラウドネイティブ新コントロール (v3) アーキテクチャを使用している。 説明 もう一方の ES クラスターは、クラウドネイティブ新コントロール (v3) アーキテクチャまたは基本コントロール (v2) アーキテクチャのいずれかを使用できます。 | ||
ECS インスタンス上の自己管理 ES クラスターから Alibaba Cloud ES クラスターへのデータ移行 | Alibaba Cloud ES クラスターが基本コントロール (v2) アーキテクチャを使用している。 | reindex メソッド: reindex を使用して自己管理 Elasticsearch クラスターから Alibaba Cloud Elasticsearch にデータを移行する。 |
Alibaba Cloud ES クラスターがクラウドネイティブ新コントロール (v3) アーキテクチャを使用している。 | reindex メソッド: インスタンスへのプライベート接続を確立して自己管理 Elasticsearch クラスターから Alibaba Cloud にデータを移行する。 |
手順
ステップ 1: PrivateLink をサポートする SLB インスタンスを設定する
現在、PrivateLink をサポートする Server Load Balancer (SLB) インスタンスのみが、エンドポイントサービスのサービスリソースとして使用できます。PrivateLink を使用して VPC 間でサービスにプライベートアクセスする前に、PrivateLink をサポートする SLB インスタンスを作成し、そのリスナーを設定する必要があります。
エンドポイントサービスを使用すると、他の VPC はエンドポイントを作成してプライベート接続を確立できます。SLB インスタンスを設定した後、エンドポイントサービスを作成する必要があります。
ステップ 3: Alibaba Cloud Elasticsearch のプライベートネットワークピアリングを設定する
Elasticsearch コンソールで、Alibaba Cloud Elasticsearch インスタンスを ステップ 2 で作成したエンドポイントサービスに関連付けることができます。
ターゲットインスタンスがエンドポイントサービスに関連付けられた後、エンドポイントのドメイン名を取得する必要があります。このドメイン名を使用して reindex ホワイトリストを設定します。
Elasticsearch コンソールで、ステップ 4 で取得したドメイン名をターゲットインスタンスの reindex ホワイトリストに追加して権限を付与します。
これらの手順を完了すると、ソースインスタンスとターゲットインスタンスの間にプライベート接続が確立されます。これでデータを移行できます。
ステップ 1: PrivateLink をサポートする SLB インスタンスを設定する
SLB インスタンスを作成します。
SLB インスタンスがバックエンドの Elastic Computing Service (ECS) インスタンスと同じリージョンにあることを確認してください。詳細については、「PrivateLink をサポートする SLB インスタンスを作成する」をご参照ください。
[プロトコルとリスナー] を設定し、負荷分散プロトコルを [TCP] に、ポートを [9200] に設定します。

詳細については、「プロトコルとリスナーを設定する」をご参照ください。
[次へ] をクリックします。自己管理 ES クラスターをホストする ECS インスタンスを追加し、ポートを [9200] に設定して、バックエンドサーバーグループを設定します。
詳細については、「バックエンドサーバーを設定する」をご参照ください。
[次へ] をクリックします。[ヘルスチェックの設定] セクションで、必要に応じて設定を構成します。このトピックでは、デフォルト設定を使用します。
[次へ] をクリックします。構成を確認し、[送信] をクリックします。[OK] をクリックします。[インスタンス管理] ページに戻り、バックエンド ECS インスタンスのヘルスチェックステータスを確認します。
バックエンド ECS インスタンスのヘルスチェックステータスが正常である場合、インスタンスは SLB インスタンスによって転送されたリクエストを処理できます。
ステップ 2: エンドポイントサービスを作成する
トップメニューバーで、エンドポイントサービスを作成するリージョンを選択します。
このトピックの例では、[中国 (杭州)] リージョンを使用します。
[エンドポイントサービスの作成] をクリックします。[エンドポイントサービスの作成] ページで、要件に従ってエンドポイントサービスを設定します。
具体的な操作と詳細な手順については、「エンドポイントサービスの作成と管理」をご参照ください。次の表に、このトピックで使用される構成を示します。記載されていないパラメーターについては、必要に応じて設定するか、デフォルト値のままにすることができます。
パラメーター
説明
サービスリソースの選択
トラフィックを伝送するゾーンを選択します。次に、エンドポイントサービスに関連付ける SLB インスタンスを選択します。
SLB インスタンスはサービスリソースとして機能し、エンドポイントサービスに関連付けられます。関連付けられた SLB インスタンスは、サービスユーザーからのネットワークアクセスを受け入れます。エンドポイントサービスのゾーンは、サービスリソースのプライマリゾーンと同じです。
SLB インスタンスがサービスリソースとして使用できるのは、次の 2 つの条件を満たす場合のみです。
ネットワークタイプが VPC であること。
機能が PrivateLink をサポートしていること。
エンドポイント接続の自動承諾
エンドポイントからの接続リクエストを自動的に承諾するかどうかを選択します。[はい] を選択することをお勧めします。値は次のように説明されます。
[はい]: エンドポイントサービスはエンドポイントからの接続リクエストを自動的に承諾します。サービスはエンドポイントを介してアクセスできます。
[いいえ]: エンドポイント接続は切断状態になり、サービス管理者が処理するのを待ちます。
サービス管理者がエンドポイント接続を承諾した場合、サービスはエンドポイントを介してアクセスできます。
サービス管理者がエンドポイント接続を拒否した場合、サービスはエンドポイントを介してアクセスできません。
ゾーンアフィニティの有効化
ゾーンアフィニティを有効にするかどうかを選択します。[はい] を選択することをお勧めします。
[作成] をクリックします。
ステップ 3: Alibaba Cloud Elasticsearch のプライベートネットワークピアリングを設定する
Alibaba Cloud Elasticsearch コンソールにログインします。
左側のナビゲーションウィンドウで、[Elasticsearch クラスター] をクリックします。
目的のクラスターに移動します。
上部のナビゲーションバーで、クラスターが属するリソースグループとクラスターが存在するリージョンを選択します。
[Elasticsearch クラスター] ページで、クラスターを見つけてその ID をクリックします。
左側のナビゲーションウィンドウで、 を選択します。
クラスターネットワーク設定 セクションで、プライベート接続の設定 の右側にある 変更 をクリックします。
プライベート接続の設定 パネルで、プライベート接続の追加 をクリックします。ステップ 2 で作成したエンドポイントサービスとターゲットアクセスゾーンを選択します。次に、システムプロンプトのチェックボックスを選択します。

OK をクリックします。エンドポイントサービスがエンドポイントに接続します。接続が確立されると、ステータスが 接続済み に変わります。

ステップ 4: エンドポイントのドメイン名を取得する
上記の手順を完了したら、reindex ホワイトリストを設定するためにエンドポイントのドメイン名を取得する必要があります。
プライベート接続の設定 パネルで、目的の エンドポイント ID をクリックします。

[エンドポイント接続] タブで、ターゲットエンドポイント ID の横にある
アイコンをクリックして、対応するドメイン名を表示します。
ステップ 5: reindex ホワイトリストを設定する
この操作によりクラスターが再起動します。この操作はオフピーク時に実行することをお勧めします。
Alibaba Cloud Elasticsearch コンソールにログインします。
左側のナビゲーションウィンドウで、[Elasticsearch クラスター] をクリックします。
目的のクラスターに移動します。
上部のナビゲーションバーで、クラスターが属するリソースグループとクラスターが存在するリージョンを選択します。
[Elasticsearch クラスター] ページで、クラスターを見つけてその ID をクリックします。
左側のナビゲーションウィンドウで、 を選択します。
YML 設定 セクションで、右側の 設定の更新 をクリックします。
YML ファイル設定 パネルで、設定の更新 をクリックし、ステップ 4 で取得したドメイン名を追加します。
サンプルコード:
reindex.remote.whitelist: 'ep-bp1nitq0krp8yhcf****-cn-hangzhou-i.epsrv-bp1zczi0fgoc5qtv****.cn-hangzhou.privatelink.aliyuncs.com:9200'
[OK] をクリックします。
ステップ 6: データを移行する
Kibana コンソールの [Dev Tools] で、次のコマンドを実行してデータを移行します。
説明Kibana コンソールへのログイン方法の詳細については、「Kibana コンソールにログインする」をご参照ください。
POST /_reindex?pretty { "source": { "remote": { "host": "http://ep-bp1nitq0krp8yhcf****-cn-hangzhou-i.epsrv-bp1zczi0fgoc5qtv****.cn-hangzhou.privatelink.aliyuncs.com:9200", "username": "elastic", "password": "Elastic@123***" }, "index": "source", "size": 5000 }, "dest": { "index": "dest" } }詳細については、「reindex API」をご参照ください。
オプション: データ移行中に、次のコマンドを実行して、実行中のすべての reindex リクエストのステータスを取得できます。
GET _tasks?detailed=true&actions=*reindexデータ移行結果を表示します。
データ移行が完了したら、次のコマンドを実行して結果を表示できます。
GET _cat/indices?ターゲットインデックス `dest` のヘルスステータスが正常で、データサイズが期待どおりであれば、データ移行は成功です。

よくある質問
質問: 単一のインデックスのデータ量が大きく、データ同期が遅い場合はどうすればよいですか?
解決策:
reindex 機能は scroll メソッドを使用して実装されます。scroll サイズを増やすか、scroll スライスを設定して、並列処理によって効率を向上させることができます。詳細については、「reindex API」をご参照ください。
ソースデータ量が大きい場合は、Object Storage Service (OSS) スナップショットメソッドを使用することをお勧めします。詳細については、「高度: OSS を使用して自己管理 ES クラスターを Alibaba Cloud ES に移行する」をご参照ください。
単一のインデックスのデータ量が大きい場合、移行前にターゲットインデックスのレプリカ数を 0 に、更新間隔を -1 に設定できます。これにより、データ同期を高速化できます。データ移行が完了したら、これらの設定を元の値に戻す必要があります。
// インデックスデータを移行する前に、レプリカ数を 0 に設定し、リフレッシュを無効にして移行を高速化します。 curl -u user:password -XPUT 'http://<host:port>/indexName/_settings' -d' { "number_of_replicas" : 0, "refresh_interval" : "-1" }' // インデックスデータを移行した後、レプリカ数を 1 に、更新間隔を 1s (デフォルト値) にリセットします。 curl -u user:password -XPUT 'http://<host:port>/indexName/_settings' -d' { "number_of_replicas" : 1, "refresh_interval" : "1s" }'