Amazon OpenSearch Service のクラスター間レプリケーション - Amazon OpenSearch サービス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon OpenSearch Service のクラスター間レプリケーション

Amazon OpenSearch Service のクラスター間レプリケーションを使用すると、1 つの OpenSearch Service ドメインから別のドメインにユーザーインデックス、マッピング、メタデータをレプリケートできます。クラスター間レプリケーションでは、障害発生時の災害対策が保証され、地理的に離れたデータセンター間でデータをレプリケートしてレイテンシーを削減できます。ドメイン間で転送されるデータについて、標準の AWS データ転送料金を支払います。

クラスター間レプリケーションは、ローカルまたはフォロワーインデクスがリモートまたはリーダーインデックスからデータを取り出すアクティブ/パッシブレプリケーションモデルに従います。リーダーインデックスは、データのソース (データの複製元) のインデックスを意味します。リーダーインデックスは、データのターゲット (データの複製先) のインデックスを意味します。

クラスター間レプリケーションは、Elasticsearch 7.10 または OpenSearch 1.1 以降を実行するドメインで使用できます。

注記

このドキュメントでは、Amazon OpenSearch Service の観点からクラスター間のレプリケーションを設定する方法について説明します。これには、AWS Management Console を使用してクラスター間接続をセットアップすることが含まれます。これは、セルフマネージド OpenSearch クラスターでは不可能です。設定リファレンスと包括的な API リファレンスを含む詳細なドキュメントについては、OpenSearch ドキュメントの「Cross-cluster replication」を参照してください。

制約事項

クラスター間レプリケーションには、次の制約事項があります。

  • Amazon OpenSearch Service ドメインとセルフマネージド OpenSearch クラスターまたは Elasticsearch クラスターの間でデータをレプリケートすることはできません。

  • 1 つのフォロワードメインから別のフォロワードメインにインデックスをレプリケートすることはできません。インデックスを複数のフォロワードメインにレプリケートする場合、レプリケートできるのは単一のリーダードメインからのみです。

  • ドメインは、インバウンド接続とアウトバウンド接続の組み合わせを介して最大 20 のその他のドメインに接続できます。

  • クラスター間接続を最初に設定する際には、リーダードメインがフォロワードメインと同じか、またはそれ以降のバージョンである必要があります。

  • AWS CloudFormation を使用してドメインを接続することはできません。

  • M3 インスタンスとバースト可能 (T2 および T3) インスタンスではクラスター間レプリケーションを使用できません。

  • UltraWarm インデックスとコールドインデックス間でデータをレプリケートすることはできません。両方のインデックスがホットストレージにある必要があります。

  • リーダードメインからインデックスを削除してもフォロワードメインの対応するインデックスが自動的に削除されることはありません。

前提条件

クラスター間レプリケーションをセットアップする前に、ドメインが次の要件を満たしていることを確認してください。

アクセス許可の要件

レプリケーションを開始するには、リモート (リーダー) ドメインの es:ESCrossClusterGet アクセス許可を含める必要があります。リモートドメイン上で以下の IAM ポリシーが推奨されます。このポリシーでは、ドキュメントのインデックス作成や標準検索の実行など、他のオペレーションも実行できます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "*" ] }, "Action": [ "es:ESHttp*" ], "Resource": "arn:aws:es:region:account:domain/leader-domain/*" }, { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "es:ESCrossClusterGet", "Resource": "arn:aws:es:region:account:domain/leader-domain" } ] }

es:ESCrossClusterGet アクセス許可が /leader-domain/* ではなく /leader-domain に適用されていることを確認してください。

管理者以外のユーザーがレプリケーションアクティビティを実行するには、適切なアクセス許可にマッピングする必要もあります。ほとんどのアクセス許可は、特定の REST API オペレーションに対応します。例えば、indices:admin/plugins/replication/index/_resume アクセス許可を使用すると、インデックスのレプリケーションを再開できます。アクセス許可の完全な一覧については、OpenSearch ドキュメントの「Replication permissions」を参照してください。

注記

レプリケーションを開始してレプリケーションルールを作成するコマンドは、特殊なケースです。リーダードメインとフォロワードメインでバックグラウンドプロセスが呼び出されるため、リクエストで leader_cluster_rolefollower_cluster_role を渡す必要があります。OpenSearch Service は、すべてのバックエンドレプリケーションタスクでこれらのロールを使用します。これらのロールのマッピングと使用の詳細については、OpenSearch ドキュメントの「Map the leader and follower cluster roles」を参照してください。

クラスター間接続のセットアップ

1 つのドメインから別のドメインにインデックスをレプリケートするには、ドメイン間でクラスター間接続を設定する必要があります。ドメイン間の接続する最も簡単な方法は、ドメインダッシュボードの [接続] タブを使用することです。設定 API または AWS CLI を使用することもできます。クラスター間レプリケーションは「プル」モデルに従うため、フォロワードメインから接続を開始します。

注記

以前にクラスター間検索を実行するために 2 つのドメインを接続したことのある場合、その同じ接続をレプリケーションに使用することはできません。コンソールで、接続は SEARCH_ONLY とマークされます。以前に接続された 2 つのドメイン間でレプリケーションを実行するには、接続を削除し、再度作成する必要があります。これを実行すれば、クラスター間検索とクラスター間レプリケーションの両方で接続が使用できるようになります。

接続をセットアップするには
  1. Amazon OpenSearch Service コンソールで、フォロワードメインを選択し、[接続] タブに移動して [リクエスト] を選択します。

  2. [接続エイリアス] に接続の名前を入力します。

  3. 利用中の AWS アカウント とリージョンのドメインに接続するか、別のアカウントまたは別のリージョンのドメインに接続するかどうかを選択します。

    • おなじAWS アカウントとリージョンに接続するには、ドメインを選択して [リクエスト] を選択します。

    • 別の AWS アカウント アカウントまたはリージョンのドメインに接続するには、リモートドメインの ARN を指定して [リクエスト] を選択します。

OpenSearch Service が接続リクエストを検証します。ドメインに互換性がない場合、接続は失敗します。正常に完了した検証は承認のために宛先ドメインに送信されます。宛先ドメインでリクエストが承認されたら、レプリケーションを開始できます。

クラスター間レプリケーションは双方向レプリケーションをサポートします。したがって、ドメイン A からドメイン B へのアウトバウンド接続と、ドメイン B からドメイン A への別のアウトバウンド接続を作成できます。その後、ドメイン A がドメイン B のインデックスに従い、ドメイン B がドメイン A のインデックスに従うようにレプリケーションを設定できます。

レプリケーションの開始

クラスター間接続を確立したら、データのレプリケーションを開始できます。まず、レプリケートするインデックスをリーダードメインに作成します。

PUT leader-01

そのインデックスをレプリケートするには、次のコマンドをフォロワードメインに送信します。

PUT _plugins/_replication/follower-01/_start { "leader_alias": "connection-alias", "leader_index": "leader-01", "use_roles":{ "leader_cluster_role": "all_access", "follower_cluster_role": "all_access" } }

接続エイリアスは、ドメインダッシュボードの [接続] タブで確認できます。

この例では、管理者がリクエストを発行していると仮定し、説明を簡単にするために all_accessleader_cluster_rolefollower_cluster_role に使用します。ただし、本番環境では、リーダーインデックスとフォロワーインデックスの両方でレプリケーションユーザーを作成してマッピングすることをお勧めします。ユーザー名は同一である必要があります。これらのロールのマッピング方法の詳細については、OpenSearch ドキュメントの「Map the leader and follower cluster roles」を参照してください。

レプリケーションの確認

レプリケーションが行われていることを確認するには、レプリケーションステータスを取得します。

GET _plugins/_replication/follower-01/_status { "status" : "SYNCING", "reason" : "User initiated", "leader_alias" : "connection-alias", "leader_index" : "leader-01", "follower_index" : "follower-01", "syncing_details" : { "leader_checkpoint" : -5, "follower_checkpoint" : -5, "seq_no" : 0 } }

リーダーとフォロワーのチェックポイントの値は負の整数で始まり、ユーザーが持っているシャードの数を反映します (1 つのシャードの場合は -1、5 つのシャードの場合は -5 など)。変更を加えるたびに、値は正の整数で増加します。2 つの値が同じ場合、インデックスが完全に同期されていることを意味します。これらのチェックポイント値を使用して、ドメイン間のレプリケーションのレイテンシーを測定できます。

レプリケーションをさらに検証するには、リーダーインデックスにドキュメントを追加します。

PUT leader-01/_doc/1 { "Doctor Sleep":"Stephen King" }

そして、それがフォロワーインデックスに表示されることを確認します。

GET follower-01/_search { ... "max_score" : 1.0, "hits" : [ { "_index" : "follower-01", "_type" : "_doc", "_id" : "1", "_score" : 1.0, "_source" : { "Doctor Sleep" : "Stephen King" } } ] } }

レプリケーションの一時停止と再開

問題を修復する場合や、リーダードメインの負荷を削減する必要がある場合は、レプリケーションを一時的に一時停止できます。次のリクエストをフォロワードメインに送信します。空のリクエストボディを含めてください。

POST _plugins/_replication/follower-01/_pause {}

次に、ステータスを取得して、レプリケーションが一時停止していることを確認します。

GET _plugins/_replication/follower-01/_status { "status" : "PAUSED", "reason" : "User initiated", "leader_alias" : "connection-alias", "leader_index" : "leader-01", "follower_index" : "follower-01" }

変更作業が完了したら、レプリケーションを再開します。次のリクエストをフォロワードメインに送信します。空のリクエストボディを含めてください。

POST _plugins/_replication/follower-01/_resume {}

12 時間以上一時停止してからレプリケーションを再開することはできません。レプリケーションを停止し、フォロワーインデックスを削除し、リーダーのレプリケーションを再開する必要があります。

レプリケーションの開始

レプリケーションを完全に停止すると、フォロワーインデックスはリーダーのフォローを解除し、標準インデックスになります。停止したレプリケーションを再開することはできません。

フォロアードメインからレプリケーションを停止します。空のリクエストボディを含めてください。

POST _plugins/_replication/follower-01/_stop {}

自動フォロー

指定したパターンに一致するインデックスを自動的にレプリケートする 1 つのリーダードメインに対して、レプリケーションルールのセットを定義できます。リーダードメイン上のインデックスがパターンの 1 つ (books* など) に一致すると、一致するフォロワーインデックスがフォロワードメインに作成されます。OpenSearch Service は、パターンに一致する既存のインデックスに加えて、ユーザーが作成した新しいインデックスを複製します。フォロワードメインにすでに存在するインデックスはレプリケートされません。

すべてのインデックス (システムによって作成されたインデックスおよびフォロワードメインに既に存在するインデックスを除く) をレプリケートするには、ワイルドカード (*) パターンを使用します。

レプリケーションルールの作成

フォロアードメインにレプリケーションルールを作成し、クラスター間接続の名前を指定します。

POST _plugins/_replication/_autofollow { "leader_alias" : "connection-alias", "name": "rule-name", "pattern": "books*", "use_roles":{ "leader_cluster_role": "all_access", "follower_cluster_role": "all_access" } }

接続エイリアスは、ドメインダッシュボードの [接続] タブで確認できます。

この例では、管理者がリクエストを発行していると仮定し、説明を簡単にするために all_access をリーダードメインルールとフォロワードメインルールとして使用します。ただし、本番環境では、リーダーインデックスとフォロワーインデックスの両方でレプリケーションユーザーを作成してマッピングすることをお勧めします。ユーザー名は同一である必要があります。これらのロールのマッピング方法の詳細については、OpenSearch ドキュメントの「Map the leader and follower cluster roles」を参照してください。

ドメイン上の既存のレプリケーションルールのリストを取得するには、auto-follow stats API オペレーションを使用します。

ルールをテストするには、リーダードメインのパターンに一致するインデックスを作成します。

PUT books-are-fun

そして、そのレプリカがフォロアードメインに表示されていることを確認します。

GET _cat/indices health status index uuid pri rep docs.count docs.deleted store.size pri.store.size green open books-are-fun ldfHO78xYYdxRMULuiTvSQ 1 1 0 0 208b 208b

レプリケーションルールの削除

レプリケーションルールを削除すると、OpenSearch Service は、パターンに一致する新規インデックスのレプリケーションを停止しますが、ユーザーがレプリケーションを停止するまで、既存のレプリケーションアクティビティは継続します。

フォロアードメインからレプリケーションルールを削除します。

DELETE _plugins/_replication/_autofollow { "leader_alias" : "connection-alias", "name": "rule-name" }

接続されたドメインのアップグレード

クラスター間接続が可能な 2 つのドメインのエンジンバージョンをアップグレードするには、まずフォロワードメインをアップグレードしてから、リーダードメインをアップグレードします。それらの間の接続を削除しないでください。削除すると、レプリケーションが一時停止し、再開できなくなります。