ハードウェア障害、ソフトウェアエラー、データセンター障害、自然災害などによるサービス中断といった壊滅的なイベントが Elasticsearch クラスタで発生した場合、クロス クラスタ レプリケーション(CCR)機能を使用して、リージョン間またはリソース間のディザスタリカバリを実装できます。このトピックでは、新規および元のネットワークアーキテクチャで CCR を実装する方法について説明します。
背景情報
CCR は、Platinum エディションのオープンソース Elasticsearch でリリースされた商用機能です。Alibaba Cloud Elasticsearch クラスタを購入し、いくつかの簡単な構成を行うと、この機能を無料で使用できます。
ディザスタリカバリシナリオで CCR を使用して、同じ仮想プライベートクラウド(VPC)内の異なるゾーンにある Elasticsearch クラスタ間でデータをバックアップできます。クラスタ(リモートクラスタ)に障害が発生した場合、別のクラスタ(ローカルクラスタ)からそのデータを取得し、リモートクラスタにデータをリストアできます。この機能は、データ損失を防ぐのに役立ちます。
CCR を使用するには、ローカルクラスタとリモートクラスタの 2 種類のクラスタを準備する必要があります。リモートクラスタは、リーダーインデックスに格納されているソースデータを提供します。ローカルクラスタはデータを複製し、フォロワーインデックスに格納します。CCR を使用して、一度に大量のデータを移行することもできます。詳細については、「クロス クラスタ レプリケーション」をご参照ください。
シナリオ
次の表に、CCR の使用シナリオを示します。
環境 | ソリューション |
2 つの Alibaba Cloud Elasticsearch クラスタが新しいネットワークアーキテクチャにデプロイされています。 説明 V7.7 以後の Alibaba Cloud Elasticsearch クラスタのみがサポートされています。 | |
2 つの Alibaba Cloud Elasticsearch クラスタが元のネットワークアーキテクチャにデプロイされており、同じ VPC 内にあります。 説明 V6.7.0 以後のシングルゾーン Alibaba Cloud Elasticsearch クラスタのみがサポートされています。 |
上記の使用シナリオは、クロス クラスタ検索(CCS)機能にも適用できます。詳細については、「modules-cross-cluster-search」をご参照ください。
CCR 機能を使用して、Alibaba Cloud Elasticsearch クラスタとセルフマネージド Elasticsearch クラスタ間でデータをバックアップすることはできません。
2020 年 10 月より前に作成された Alibaba Cloud Elasticsearch クラスタは、元のネットワークアーキテクチャにデプロイされています。 2020 年 10 月以降に作成された Alibaba Cloud Elasticsearch クラスタは、新しいネットワークアーキテクチャにデプロイされています。
NLB と PrivateLink を使用して CCR を実装する
準備
同じリージョンとゾーンに V7.7 以降の 2 つの Alibaba Cloud Elasticsearch クラスタを作成します。
説明2 つのクラスタは次のように使用されます。
1 つはリモートクラスタとして使用され、ソースデータを提供します。
もう 1 つはローカルクラスタとして使用され、リモートクラスタの 1 つ以上のインデックスからデータを複製します。
2 つのクラスタ間にプライベート接続を確立します。詳細については、「NLB と PrivateLink を使用して Alibaba Cloud Elasticsearch クラスタ間にプライベート接続を確立する」をご参照ください。
説明リモート クラスタのプライベート IP アドレスをネットワークロードバランサー (NLB) サーバーグループに追加して、2 つのクラスタ間にプライベート接続を確立します。
リモート クラスタにインデックス (リーダー インデックス) を作成します。
リモート クラスタの Kibana コンソールにログインします。詳細については、「Kibana コンソールにログインする」をご参照ください。
表示されるページで、左上隅にある
アイコンをクリックし、[管理] >[開発ツール] を選択します。
次のコマンドを実行して、リモート クラスタにリーダー インデックスを作成します。
PUT /leader-new { "settings": { "number_of_shards": 1, "number_of_replicas": 0 }, "mappings": { "properties": { "name": { "type": "text" }, "age": { "type": "integer" } } } }
シナリオ 1: 特定のインデックスに CCR を実装する
ステップ 1: リモート クラスタをローカル クラスタに接続する
ローカル クラスタの Kibana コンソールにログインします。詳細については、「Kibana コンソールにログインする」をご参照ください。
表示されるページで、右上隅にある
アイコンをクリックし、 を選択します。
[管理] ページの左側のナビゲーション ウィンドウで、[リモート クラスタ] をクリックします。
[リモート クラスタを追加] をクリックします。
表示されるページで、リモート クラスタに関する情報を指定します。
[名前]: リモート クラスタの名前。名前は一意である必要があります。
[接続モード]: [プロキシモードを使用] をオンにします。
[プロキシ アドレス]: プロキシ サーバーのアドレス。アドレスは
エンドポイント ドメイン名:9300
形式である必要があります。エンドポイント ドメイン名は、PrivateLink エンドポイント サービスに対応するエンドポイントのドメイン名です。説明CCR 中、Kibana はデータ ノードの IP アドレスを使用して TCP ポート 9300 経由でクラスタにアクセスします。HTTP ポート 9200 はサポートされていません。
[保存] をクリックします。
システムはリモート クラスタをローカル クラスタに接続します。リモート クラスタがローカル クラスタに接続されている場合、[接続済み] と表示されます。
関連 API を呼び出すサンプル コード
PUT /_cluster/settings
{
"persistent": {
"cluster": {
"remote": {
"<remote_cluster>": {
"mode": "PROXY",
"proxy_address": "Endpoint domain name:9300"
}
}
}
}
}
パラメータ | 説明 |
persistent | クラスタが再起動された場合でも設定が永続的に保存されるように指定します。 |
<remote_cluster> | リモート クラスタの名前に置き換えます。 |
mode | プロキシ モードのみがサポートされています。ローカル クラスタは、構成されたプロキシ アドレスを使用してリモート クラスタにアクセスします。リモート クラスタへのすべてのリクエストはこのプロキシ アドレスに送信され、プロキシ サーバーによってリモート クラスタ内の適切なノードに転送されます。 |
proxy_address | プロキシ サーバーのアドレス。アドレスは 説明 この例では、CCR または CCS は Elasticsearch のトランスポート層を使用し、通信にポート 9300 を使用する必要があります。 |
ステップ 2: CCR を構成する
ローカル クラスタの Kibana コンソールで [管理] ページに移動します。左側のナビゲーション ウィンドウで、[クロス クラスタ レプリケーション] をクリックします。
表示されるページで、[フォロワー インデックスを作成] をクリックします。
CCR を構成します。
パラメータ
説明
リモート クラスタ
ローカル クラスタに接続されているリモート クラスタ。
リーダー インデックス
データをバックアップするインデックス。
フォロワー インデックス
データをバックアップするインデックス。一意のインデックス名を指定する必要があります。
[作成] をクリックします。
フォロワー インデックスが作成されると、インデックスは アクティブ 状態になります。
関連 API を呼び出すサンプル コード
フォロワー インデックスを作成する場合は、リモート クラスタとリモート クラスタに作成されたリーダー インデックスを参照する必要があります。
PUT /leader-old-copy/_ccr/follow
{
"remote_cluster": "es-leader",
"leader_index": "leader-old"
}
パラメータ | 説明 |
remote_cluster | ローカル クラスタに接続されているリモート クラスタの名前。指定するリモート クラスタは、ステップ 1 で指定したリモート クラスタと同じである必要があります。 |
leader_index | リーダー インデックスの名前。 |
ステップ 3: データ バックアップ結果を確認する
リモート クラスタの Kibana コンソールで、次のコマンドを実行してリーダー インデックスにデータを挿入します。
POST leader-new/_doc/ { "name":"Jack", "age":40 }
ローカル クラスタの Kibana コンソールで、次のコマンドを実行して、挿入されたデータがフォロワー インデックスにバックアップされているかどうかを確認します。
GET leader-new-copy/_search
次の図に示す結果が返されます。この結果は、リモート クラスタのリーダー インデックス leader-new のデータがローカル クラスタのフォロワー インデックス leader-new-copy にバックアップされていることを示しています。
リーダー インデックスにドキュメントを挿入します。
POST leader-new/_doc/ { "name":"Pony", "age":50 }
ローカル クラスタで次のコマンドを実行して、増分データをフォロワー インデックスにバックアップできるかどうかを確認します。
GET leader-new-copy/_search
コマンド出力は、増分データがフォロワー インデックスにバックアップされていることを示しています。
シナリオ 2: インデックス パターンを指定して複数のインデックスに CCR を実装する
ステップ 1: リモート クラスタをローカル クラスタに接続する
ローカル クラスタの Kibana コンソールにログインします。詳細については、「Kibana コンソールにログインする」をご参照ください。
表示されるページで、右上隅にある
アイコンをクリックし、 を選択します。
[管理] ページの左側のナビゲーション ウィンドウで、[リモート クラスタ] をクリックします。
[リモート クラスタを追加] をクリックします。
表示されるページで、リモート クラスタに関する情報を指定します。
[名前]: リモート クラスタの名前。名前は一意である必要があります。
[接続モード]: [プロキシモードを使用] をオンにします。
[プロキシ アドレス]: プロキシ サーバーのアドレス。アドレスは
エンドポイント ドメイン名:9300
形式である必要があります。エンドポイント ドメイン名は、PrivateLink エンドポイント サービスに対応するエンドポイントのドメイン名です。説明CCR 中、Kibana はデータ ノードの IP アドレスを使用して TCP ポート 9300 経由でクラスタにアクセスします。HTTP ポート 9200 はサポートされていません。
[保存] をクリックします。
システムはリモート クラスタをローカル クラスタに接続します。リモート クラスタがローカル クラスタに接続されている場合、[接続済み] と表示されます。
関連 API を呼び出すサンプル コード
PUT /_cluster/settings
{
"persistent": {
"cluster": {
"remote": {
"<remote_cluster>": {
"mode": "PROXY",
"proxy_address": "Endpoint domain name:9300"
}
}
}
}
}
パラメータ | 説明 |
persistent | クラスタが再起動された場合でも設定が永続的に保存されるように指定します。 |
<remote_cluster> | リモート クラスタの名前に置き換えます。 |
mode | プロキシ モードのみがサポートされています。ローカル クラスタは、構成されたプロキシ アドレスを使用してリモート クラスタにアクセスします。リモート クラスタへのすべてのリクエストはこのプロキシ アドレスに送信され、プロキシ サーバーによってリモート クラスタ内の適切なノードに転送されます。 |
proxy_address | プロキシ サーバーのアドレス。アドレスは 説明 この例では、CCR または CCS は Elasticsearch のトランスポート層を使用し、通信にポート 9300 を使用する必要があります。 |
ステップ 2: CCR を構成する
ローカル クラスタの Kibana コンソールで [管理] ページに移動します。左側のナビゲーション ウィンドウで、[クロス クラスタ レプリケーション] をクリックします。
[自動フォロー パターン] タブをクリックします。
[自動フォロー パターンの作成] をクリックします。
CCR を構成します。
パラメータ
説明
リモート クラスタ
ローカル クラスタに接続されているリモート クラスタ。
インデックス パターン
データをバックアップするインデックスのパターン。
関連 API を呼び出すサンプル コード
PUT /_ccr/auto_follow/beats
{
"remote_cluster": "es-leader",
"leader_index_patterns":
[
"leader-*"
],
"follow_index_pattern": "{{leader_index}}-copy"
}
パラメータ | 説明 |
remote_cluster | ローカル クラスタに接続されているリモート クラスタ。指定するリモート クラスタは、ステップ 1 で指定したリモート クラスタと同じである必要があります。 |
leader_index_patterns | データをバックアップするインデックスのパターン。 |
follow_index_pattern | ローカル クラスタに作成されるインデックスのパターン。システムはパターンに基づいてローカル クラスタにインデックスを作成し、インデックスにデータをバックアップします。 |
ステップ 3: データ バックアップ結果を確認する
リモート クラスタの Kibana コンソールで、次のコマンドを実行してインデックスを追加します。
PUT /leader-new { "settings": { "number_of_shards": 1, "number_of_replicas": 0 }, "mappings": { "properties": { "name": { "type": "text" }, "age": { "type": "integer" } } } }
ローカル クラスタの Kibana コンソールで、次のコマンドを実行して、追加されたインデックスのデータがローカル クラスタにバックアップされているかどうかを確認します。
get _cat/indices?v
Alibaba Cloud Elasticsearch クラスタを接続して CCR を有効にする
準備
同じバージョン (6.7 以降) の 2 つの Alibaba Cloud Elasticsearch クラスタを作成します。2 つのクラスタが同じ VPC にデプロイされ、同じ vSwitch に属していることを確認します。
説明2 つのクラスタは次のように使用されます。
1 つはリモートクラスターとして使用され、ソースデータを供給します。
もう 1 つはローカル クラスターとして使用され、リモート クラスター内の 1 つ以上のインデックスからデータをレプリケートします。
リモートクラスターにシノニムファイルをアップロードしている場合は、ローカルクラスターにもシノニムファイルをアップロードする必要があります。
リモートクラスターを構成して、ローカルクラスターに接続します。 詳細については、「Elasticsearch クラスターを接続してクラスター間検索を有効にする」をご参照ください。
リモートクラスターにインデックス(リーダーインデックス)を作成します。
リモートクラスターの Kibana コンソールにログオンします。 詳細については、「Kibana コンソールにログオンする」をご参照ください。
表示されたページで、左上隅にある
アイコンをクリックし、[管理] >[開発ツール] を選択します。
次のコマンドを実行して、リモートクラスターにリーダーインデックスを作成します。
PUT myindex { "settings": { "index.soft_deletes.retention.operations": 1024, "index.soft_deletes.enabled": true } }
説明V7.0 以前の Elasticsearch クラスターにインデックスを作成する場合は、インデックスの soft_deletes 属性を有効にする必要があります。 そうしないと、エラーが報告されます。
GET /<yourIndexName>/_settings?pretty
コマンドを実行して、soft_deletes 属性が有効になっているかどうかを確認できます。 soft_deletes 属性が有効になっている場合、soft_deletes 属性の構成がコマンド出力に表示されます。既存のインデックスのデータをバックアップする場合は、reindex API を呼び出して soft_deletes 属性を有効にできます。
WordPress REST API は、WordPress のデータにアクセスするための強力なインターフェースを提供します。このチュートリアルでは、JavaScript を使用して API と対話する方法を説明します。
説明物理レプリケーション 機能は、Elasticsearch V6.7.0 クラスタのインデックスに対して自動的に有効になります。CCR を使用する前に、物理レプリケーション機能を無効にする必要があります。
インデックスを無効にします。
POST myindex/_close
物理レプリケーション機能を無効にするように、インデックスの設定を更新します。
PUT myindex/_settings { "index.replication.type" : null }
インデックスを有効にします。
POST myindex/_open
ステップ 1:リモートクラスターをローカルクラスターに接続する
ローカル クラスターの Kibana コンソールにログインします。詳細については、「Kibana コンソールにログインする」をご参照ください。
表示されたページで、右上隅にある
アイコンをクリックし、 を選択します。
[管理] ページの左側のナビゲーション ウィンドウで、[リモート クラスター] をクリックします。
[リモート クラスターを追加] をクリックします。
表示されたページで、リモート クラスターに関する情報を指定します。
[名前]: リモート クラスターの名前。名前は一意である必要があります。
[プロキシ アドレス]: アドレスは
リモート クラスター内のノードの IP アドレス:9300
形式である必要があります。ノードの IP アドレスを取得するには、リモート クラスターの Kibana コンソールにログインし、開発ツール ページのコンソール タブでGET /_cat/nodes?v
コマンドを実行します。指定するノードには、リモート クラスターの専用マスター ノードが含まれている必要があります。複数のノードを指定することをお勧めします。これにより、指定された専用マスター ノードに障害が発生した場合でも、CCR を引き続き使用できます。説明CCR 中、Kibana はデータ ノードの IP アドレスを使用して、TCP ポート 9300 経由でクラスターにアクセスします。HTTP ポート 9200 はサポートされていません。
[保存] をクリックします。
次に、システムはリモート クラスターをローカル クラスターに接続します。リモート クラスターがローカル クラスターに接続されている場合は、[接続済み] と表示されます。
ステップ 2: CCR を構成する
ローカル クラスタの Kibana コンソールの [管理] ページに移動します。左側のナビゲーションウィンドウで、[クロス クラスタ レプリケーション] をクリックします。
表示されるページで、[フォロワー インデックスの作成] をクリックします。
CCR を構成します。
パラメータ
説明
リモート クラスタ
ローカル クラスタに接続されているリモート クラスタ。
リーダー インデックス
データをバックアップするインデックス。この例では、準備 で作成された myindex インデックスが使用されます。
フォロワー インデックス
データをバックアップするインデックス。一意なインデックス名を指定する必要があります。
[作成] をクリックします。
フォロワー インデックスが作成されると、インデックスは [アクティブ] 状態になります。
ステップ 3:データバックアップ結果を確認する
リモートクラスターの Kibana コンソールで、次のコマンドを実行してリモートクラスターにデータを挿入します。
POST myindex/_doc/ { "name":"Jack", "age":40 }
ローカルクラスターの Kibana コンソールで、次のコマンドを実行して、挿入されたデータがローカルクラスターにバックアップされているかどうかを確認します。
GET myindex_follow/_search
次の図に示す結果が返されます。この結果は、リモートクラスターのリーダーインデックス myindex のデータがローカルクラスターのフォロワーインデックス myindex_follow にバックアップされていることを示しています。
説明フォロワーインデックス myindex_follow は読み取り専用です。フォロワーインデックスにデータを書き込む場合は、最初にフォロワーインデックスを共通インデックスに変換します。詳細については、「Elasticsearch CCR を使用してデータセンター間でデータを移行する」をご参照ください。
リモートクラスターにドキュメントを挿入し、ドキュメントがローカルクラスターにバックアップされているかどうかを確認します。
POST myindex/_doc/ { "name":"Pony", "age":50 }
ローカルクラスターで挿入されたドキュメントをクエリします。次の図は、ドキュメントを示しています。
前の図は、CCR 機能が増分データのバックアップを実装できることを示しています。
説明CCR 機能の API を呼び出して、クラスター間レプリケーション操作を実行することもできます。詳細については、「クラスター間レプリケーション API」をご参照ください。
よくある質問
Q: ポート 9300 を使用してリモートクラスターを追加できます。ドメイン名を使用して Elasticsearch クラスターにアクセスすると、ポート 9200 のみにアクセスできるのはなぜですか?
A: ポート 9300 はオープンポートです。ただし、インターネット経由でクラスターにアクセスする場合、Server Load Balancer (SLB) はセキュリティ上の理由から、ポート検証中にポート 9200 のみを有効にします。
Q: CCR ベースのデータ同期のステータスを確認するにはどうすればよいですか?
A: フォロワーインデックスを格納するクラスターの Kibana コンソールで
GET /_ccr/stats
コマンドを実行し、number_of_failed_follow_indices
パラメーターの値を確認します。このパラメーターは、失敗したシャードの数を示します。パラメーターの値が 0 の場合、同期は正常です。
パラメーターの値が 0 でない場合は、フォロワーインデックスを格納するクラスターに対して次のコマンドを実行して、同期を一時停止してから再開します。
POST /<follower_index>/_ccr/pause_follow POST /<follower_index>/_ccr/resume_follow