Alibaba Cloud Elasticsearch クラスタ間でデータを移行する場合、reindex API を使用してデータを再インデックスできます。このトピックでは、オリジナルのネットワークアーキテクチャにデプロイされている Alibaba Cloud Elasticsearch クラスタ間でデータを移行するために reindex API を使用する方法について説明します。
シナリオ
このセクションでは、Alibaba Cloud Elasticsearch クラスタ間のデータ移行における reindex API の使用シナリオについて説明します。ビジネスデータと Elasticsearch クラスタがデプロイされているネットワークアーキテクチャに基づいてソリューションを選択できます。
Elasticsearch クラスタ間でデータを移行する場合。
Elasticsearch クラスタ内のインデックスのシャードが不適切に分散されている場合。たとえば、インデックスに格納されているデータの量が過度に大きく、インデックスのシャード数が過度に小さい場合などです。このような場合は、reindex API を使用してデータを再インデックスできます。
大量のデータを格納するインデックスのマッピングを変更する場合。このような場合は、reindex API を使用してインデックス内のデータをコピーできます。
Alibaba Cloud Elasticsearch のネットワークアーキテクチャは 2020 年 10 月に調整されました。新しいネットワークアーキテクチャでは、クラスタ間の再インデックス操作が制限されています。操作を実行する前に、PrivateLink サービスを使用して VPC 間の非公開接続を確立する必要があります。次の表に、さまざまなシナリオでのデータ移行ソリューションを示します。
2020 年 10 月より前に作成された Alibaba Cloud Elasticsearch クラスタは、オリジナルのネットワークアーキテクチャにデプロイされています。 2020 年 10 月以降に作成された Alibaba Cloud Elasticsearch クラスタは、新しいネットワークアーキテクチャにデプロイされています。
シナリオ | ネットワークアーキテクチャ | ソリューション |
Alibaba Cloud Elasticsearch クラスタ間でデータを移行する | 両方のクラスタがオリジナルのネットワークアーキテクチャにデプロイされている。 | reindex API。詳細については、「Alibaba Cloud Elasticsearch クラスタ間でのデータ移行に reindex API を使用する」をご参照ください。 |
クラスタの 1 つがオリジナルのネットワークアーキテクチャにデプロイされている。 説明 もう 1 つのクラスタは、オリジナルまたは新しいネットワークアーキテクチャにデプロイできます。 |
| |
ECS インスタンスで実行されているセルフマネージド Elasticsearch クラスタから Alibaba Cloud Elasticsearch クラスタにデータを移行する | Alibaba Cloud Elasticsearch クラスタがオリジナルのネットワークアーキテクチャにデプロイされている。 | reindex API。詳細については、「reindex API を使用して、セルフマネージド Elasticsearch クラスタから Alibaba Cloud Elasticsearch クラスタにデータを移行する」をご参照ください。 |
Alibaba Cloud Elasticsearch クラスタが新しいネットワークアーキテクチャにデプロイされている。 | reindex API。詳細については、「新しいネットワークアーキテクチャにデプロイされたセルフマネージド Elasticsearch クラスタから Alibaba Cloud Elasticsearch クラスタにデータを移行する」をご参照ください。 |
前提条件
オリジナルのネットワークアーキテクチャ、同じ VPC(Virtual Private Cloud)、および同じ vSwitch にデプロイされた 2 つの Alibaba Cloud Elasticsearch クラスタが作成されていること。この例では、Elasticsearch V6.7.0 クラスタをローカルクラスタとして使用し、Elasticsearch V6.3.2 クラスタをリモートクラスタとして使用します。
テストデータが準備されていること。
ローカルクラスタ
ローカルクラスタにデスティネーションインデックスを作成します。
PUT dest { "settings": { "number_of_shards": 5, "number_of_replicas": 1 } }リモートクラスタ
リモートクラスタに移行するデータを準備します。この例では、「はじめに」トピックのデータを使用します。詳細については、「はじめに」をご参照ください。
重要V7.0 以降の Elasticsearch クラスタをリモートクラスタとして使用する場合、インデックスタイプを _doc に設定する必要があります。
手順
Alibaba Cloud Elasticsearch コンソール にログインします。
左側のナビゲーションウィンドウで、[elasticsearch Clusters] をクリックします。
目的のクラスタに移動します。
上部のナビゲーションバーで、クラスタが属するリソースグループとクラスタが存在するリージョンを選択します。
[elasticsearch Clusters] ページで、クラスタを見つけて ID をクリックします。
ローカルクラスタの reindex ホワイトリストを構成します。
表示されるページの左側のナビゲーションウィンドウで、 を選択します。
表示されるページで、[構成の変更][YML ファイル構成] の右側にある をクリックします。
[その他の構成] フィールドの [YML ファイル構成] パネルに、リモートクラスタのエンドポイントとポート番号を入力します。
reindex ホワイトリストの構成は、リモートクラスタのゾーン数によって異なります。
リモートクラスタがシングルゾーンクラスタの場合、<リモートクラスタのエンドポイント>:9200 の形式で reindex ホワイトリストを構成します。
サンプルコード:reindex.remote.whitelist: ["es-cn-09k1rgid9000g****.elasticsearch.aliyuncs.com:9200"]リモートクラスタがマルチゾーンクラスタの場合、reindex ホワイトリストには、クラスタ内のすべてのデータノードの IP アドレスとクラスタのポート番号が含まれている必要があります。
サンプルコード:reindex.remote.whitelist: ["10.0.xx.xx:9200","10.0.xx.xx:9200","10.0.xx.xx:9200","10.15.xx.xx:9200","10.15.xx.xx:9200","10.15.xx.xx:9200"]説明クラスタ内のすべてのデータノードの IP アドレスは、クラスタの [基本情報] ページの [ノードの視覚化] タブから取得できます。詳細については、「クラスタステータスとノード情報を表示する」をご参照ください。
reindex ホワイトリストの構成については、「リモート reindex ホワイトリストを構成する」をご参照ください。
[この操作を実行すると、クラスタが再起動されます。続行しますか?] を選択し、[OK] をクリックします。
次に、システムは Elasticsearch クラスタを再起動します。 タスク ダイアログボックスで再起動の進捗状況を確認できます。クラスタが再起動されると、構成は完了です。
ローカルクラスタで、reindex API を呼び出してデータを再インデックスします。
ローカルクラスタの Kibana コンソールにログインし、プロンプトに従って Kibana コンソールのホームページに移動します。
Kibana コンソールへのログイン方法の詳細については、「Kibana コンソールにログインする」をご参照ください。
説明この例では、Elasticsearch V6.7.0 クラスタを使用しています。他のバージョンのクラスタでの操作は異なる場合があります。コンソールでの実際の操作が優先されます。
表示されるページの左側のナビゲーションウィンドウで、[dev Tools] をクリックします。
コンソール タブで、次のコマンドを実行して reindex API を呼び出し、データを再インデックスします。
POST _reindex { "source": { "remote": { "host": "http://es-cn-09k1rgid9000g****.elasticsearch.aliyuncs.com:9200", "username": "elastic", "password": "your_password" }, "index": "product_info", "query": { "match": { "productName": "Wealth management" } } }, "dest": { "index": "dest" } }カテゴリ
パラメータ
説明
source
host
リモートクラスタへの接続に使用する URL。 URL には、プロトコル、エンドポイント、およびポート番号を含める必要があります。例: https://otherhost:9200。host パラメータの値は、リモートクラスタのゾーン数によって異なります。
リモートクラスタがシングルゾーンクラスタの場合、このパラメータは http://<リモートクラスタのエンドポイント>:9200 の形式で構成する必要があります。
説明エンドポイントは、リモートクラスタの [基本情報] ページで取得できます。詳細については、「クラスタの基本情報を表示する」をご参照ください。
リモートクラスタがマルチゾーンクラスタの場合、このパラメータは http://<リモートクラスタ内のデータノードの IP アドレス>:9200 の形式で構成する必要があります。
username
リモートクラスタへの接続に使用するユーザー名。このパラメータは、リモートクラスタに送信されるリクエストに対してベーシック認証を実行する必要がある場合にのみ必須です。 Alibaba Cloud Elasticsearch クラスタへの接続に使用するデフォルトのユーザー名は elastic です。
重要セキュリティ上の理由から、ベーシック認証を実行する必要がある場合は、HTTPS を使用してリクエストを送信することをお勧めします。そうしないと、必要なパスワードがプレーンテキストで送信されます。
Alibaba Cloud Elasticsearch クラスタの場合、クラスタのプロトコルを有効にした後でのみ、host で HTTPS を使用できます。 Elasticsearch クラスタの HTTPS を有効にする方法については、「HTTPS を有効にする」をご参照ください。
password
リモートクラスタへの接続に使用するパスワード。パスワードは、クラスタの作成時に指定します。パスワードを忘れた場合は、リセットできます。パスワードをリセットする手順と注意事項については、「Elasticsearch クラスタのアクセスパスワードをリセットする」をご参照ください。
index
リモートクラスタのソースインデックス。
query
移行するデータを指定します。詳細については、「Reindex API」をご参照ください。
dest
index
ローカルクラスタのデスティネーションインデックス。
コマンドが正常に実行されると、次の結果が返されます。
{ "took" : 51, "timed_out" : false, "total" : 2, "updated" : 2, "created" : 0, "deleted" : 0, "batches" : 1, "version_conflicts" : 0, "noops" : 0, "retries" : { "bulk" : 0, "search" : 0 }, "throttled_millis" : 0, "requests_per_second" : -1.0, "throttled_until_millis" : 0, "failures" : [ ] }
次のコマンドを実行して、移行されたデータを表示します。
GET dest/_searchコマンドが正常に実行されると、次の結果が返されます。
シングルゾーンクラスタ

マルチゾーンクラスタ

まとめ
シングルゾーンクラスタからデータを移行するために必要な構成は、マルチゾーンクラスタからデータを移行するために必要な構成と似ています。次の表に、違いを示します。
クラスタタイプ | reindex ホワイトリストの構成 | host パラメータの構成 |
シングルゾーンクラスタ | クラスタのエンドポイントとポート番号 | https://クラスタのエンドポイント:9200 |
マルチゾーンクラスタ | クラスタ内のすべてのデータノードの IP アドレスとクラスタのポート番号 | https://クラスタ内のデータノードの IP アドレス:9200 |
追加情報
reindex API を使用してデータを再インデックスする場合、バッチサイズとタイムアウト期間を指定できます。
バッチサイズ
リモート Elasticsearch クラスタは、ヒープを使用してインデックスデータをキャッシュします。デフォルトのバッチサイズは 100 MB です。リモートクラスタのインデックスに大きなドキュメントが含まれている場合は、バッチサイズを小さい値に変更する必要があります。
次の例では、size は 10 に設定されています。
POST _reindex { "source": { "remote": { "host": "http://otherhost:9200" }, "index": "source", "size": 10, "query": { "match": { "test": "data" } } }, "dest": { "index": "dest" } }タイムアウト期間
socket_timeout を使用して、ソケット読み取りのタイムアウト期間を指定できます。 socket_timeout のデフォルト値は 30s です。connect_timeout を使用して、接続のタイムアウト期間を指定できます。 connect_timeout のデフォルト値は 1s です。
次の例では、socket_timeout は 1m に設定され、connect_timeout は 10s に設定されています。
POST _reindex { "source": { "remote": { "host": "http://otherhost:9200", "socket_timeout": "1m", "connect_timeout": "10s" }, "index": "source", "query": { "match": { "test": "data" } } }, "dest": { "index": "dest" } }