高可用性を必要とするアプリケーションにとって、シングルゾーンデプロイは単一障害点となります。物理データセンターで障害が発生すると、完全なサービス中断を引き起こす可能性があるためです。クロスゾーンデプロイでは、Alibaba Cloud Elasticsearch インスタンスのノードを、同一リージョン内の物理的に隔離された複数のアベイラビリティゾーンに分散させることで、信頼性を向上させます。このアーキテクチャは、データセンターレベルのディザスタリカバリを提供します。1 つのアベイラビリティゾーンで障害が発生しても、他のゾーンにあるノードとレプリカシャードを使用してクラスターは稼働し続け、業務継続性を確保します。
仕組み
クロスゾーンデプロイは、Elasticsearch に組み込まれている シャードアロケーションアウェアネス機能を利用します。
マルチアベイラビリティゾーンインスタンスを作成すると、システムは異なるアベイラビリティゾーンにデプロイされたノードに zone_id という名前のプロパティを自動的に追加し、クラスターに cluster.routing.allocation.awareness.attributes: zone_id を設定して、シャードを割り当てる際にこのノードプロパティを考慮するよう Elasticsearch に指示します。
このメカニズムにより、インデックスのプライマリシャードとレプリカシャードが異なるアベイラビリティゾーンに分散されます。アベイラビリティゾーン全体で障害が発生した場合でも、そのシャードのコピーが他のゾーンに存在するため、データの冗長性とサービスの可用性が確保されます。
デプロイモード
可用性の要件と予算に合わせてデプロイモードを選択してください。
デプロイモード | アーキテクチャ | ディザスタリカバリ | 利用シーン |
シングルアベイラビリティゾーン | すべてのノードが単一のアベイラビリティゾーンに配置されます。 | アベイラビリティゾーンで障害が発生すると、完全なサービス停止につながります。 | 開発やテストなど、重要度の低いワークロード。 |
2 アベイラビリティゾーン | ノードが 2 つのアベイラビリティゾーンに分散されます。 | 1 つのアベイラビリティゾーンで障害が発生しても、サービスは継続します。 | 高可用性が求められる本番環境。 |
3 アベイラビリティゾーン | ノードが 3 つのアベイラビリティゾーンに分散されます。 | 1 つのアベイラビリティゾーンで障害が発生しても、サービスは継続します。 | 非常に高い可用性が求められるコア本番アプリケーション。 |
クロスゾーンインスタンスの作成
Alibaba Cloud Elasticsearch インスタンスを作成する ページに移動します。
[アベイラビリティゾーンの数] セクションで、2 つまたは 3 つのアベイラビリティゾーンを選択します。
ノード数の制約:均等な分散を確保するため、データノード、コールドデータノード、またはコーディネーティングノードの数は、選択したアベイラビリティゾーン数の倍数である必要があります。
専用マスターノード:マルチゾーンアーキテクチャの安定性を確保するために、3 つの専用マスターノードを購入する必要があります。
コンソールで選択したアベイラビリティゾーン (例:ゾーン A) は、クラスターのプライマリアクセスポイントとして機能します。システムは、リアルタイムのリソース可用性に基づいて、指定された数のアベイラビリティゾーンにノードを自動的かつ均等に分散させます。例えば、2 つのアベイラビリティゾーンを選択した場合、システムはゾーン A とゾーン B にノードをデプロイすることがあります。
マルチ AZ デプロイへのアップグレード (V3 クラスターのみ)
アップグレードする前に、次の条件を確認してください:
GET _cluster/healthを実行して、クラスターのヘルスステータスが GREEN であることを確認します。クラスターが正常でない場合は、「クラスター変更エラー:クラスターのヘルスステータスが異常」をご参照の上、問題を解決してください。クライアント接続の分散を最適化します。長時間接続を単一のアベイラビリティゾーンに集中させると、そのゾーンのノードのリソースが枯渇し、他のゾーンのノードがアイドル状態になる可能性があります。接続有効期間の設定、クライアントのバッチ再起動、または独立したコーディネーティングノードの使用により、接続の分散を最適化できます。詳細については、「クラスター負荷の偏りの分析と解決策」をご参照ください。
GET _cluster/settingsを実行し、出力に"cluster.routing.allocation.enable": "all"が含まれていることを確認します。これにより、Elasticsearch はシャードを自動的に割り当てることができます。設定が異なる場合は、次のコマンドを実行して自動シャードアロケーションを有効にしてください。PUT _cluster/settings { "transient": { "cluster.routing.allocation.enable": "all" } }
インスタンスリストページで、[アップグレード]をクリックします。
または、[基本情報] ページに移動し、 をクリックします。
構成ページで、[可用性ゾーンの数] エリアで、2 つまたは 3 つの可用性ゾーンを選択し、支払いを完了します。
アップグレード中に、システムは自動的に専用マスターノードを有効にし (まだ有効になっていない場合)、選択したアベイラビリティゾーン数に対する均等な分散要件を満たすためにデータノードを追加することがあります。これらの新しいノードには追加料金が発生します。詳細については、ご利用の請求書をご参照ください。
例えば、2 つのデータノードを持つシングルゾーンインスタンスを 3 ゾーンデプロイにアップグレードする場合、システムは自動的に 1 つのデータノードを追加します。これにより、合計が 3 つになり、各アベイラビリティゾーンに 1 つのデータノードを割り当てることができます。
アベイラビリティゾーンの移行
クラスターをアップグレードする必要があるものの、現在のアベイラビリティゾーンにリソースが不足している場合、アップグレードを実行する前に、十分なリソースがある新しいアベイラビリティゾーンにノードを移行できます。
アベイラビリティゾーンを移行すると、クラスターの再起動がトリガーされます。再起動中もクラスターは利用可能ですが、サービスが不安定になる可能性があります。この操作はオフピーク時間帯に実行してください。
移行する前に、次の条件を確認してください:
GET _cluster/healthを実行して、クラスターのヘルスステータスが GREEN であることを確認します。クラスターが正常でない場合は、「クラスター変更エラー:クラスターのヘルスステータスが異常」をご参照の上、問題を解決してください。GET /_cat/indices?vを実行して、クローズされたインデックスがないか確認します。クローズされたインデックスがある場合は、POST /<index_name>/_openを実行して一時的に開く必要があります。そうしないと、インデックスがクローズされているためにクラスターのヘルスステータスが GREEN にならず、アップグレードが失敗する可能性があります。GET _cluster/settingsを実行し、出力に"cluster.routing.allocation.enable": "all"が含まれていることを確認します。これにより、Elasticsearch はシャードを自動的に割り当てることができます。設定が異なる場合は、次のコマンドを実行して自動シャードアロケーションを有効にしてください。PUT _cluster/settings { "transient": { "cluster.routing.allocation.enable": "all" } }
移行を実行します:
ターゲットインスタンスの[基本情報]ページに移動します。ノード可視化エリアで、移行する可用性ゾーンにカーソルを合わせ、[移行]をクリックします。
表示されるダイアログボックスで、移行先のアベイラビリティゾーンと vSwitch を選択します。一度に移行できるアベイラビリティゾーンは 1 つだけです。
データ移行サービス契約に同意し、[確認] をクリックします。
確認後、クラスターが再起動します。このプロセス中に、一時的なパフォーマンスの変動が発生する可能性があります。システムはまず移行先のアベイラビリティゾーンに新しいマスターノードをプロビジョニングするため、古いアベイラビリティゾーンと新しいアベイラビリティゾーンが一時的に共存します。
移行が完了すると、クラスターは正常な状態に戻ります。ただし、表示の遅延により、コンソール (インスタンス情報ページまたは設定ページ) には古いアベイラビリティゾーンがまだ表示されている場合があります。これは、新しいアベイラビリティゾーンでのクラスターの動作には影響しません。ノードの IP アドレスは変更されることに注意してください。
アベイラビリティゾーンのフェールオーバーとリカバリ
障害が発生したアベイラビリティゾーンを検出した場合、フェールオーバーを実行してクライアントトラフィックを他のゾーンにリダイレクトできます。障害が発生したゾーンが復旧した後、そのゾーンをリカバリしてクラスターに再参加させることができます。
フェールオーバー (障害ゾーンの隔離)
インスタンスのノード可視化エリアで、隔離する可用性ゾーンにマウスポインターを合わせ、[フェイルオーバー] をクリックします。
表示されるダイアログボックスで、[確認] をクリックします。
重要アベイラビリティゾーンのフェールオーバーは、影響を受けるゾーン内のすべてのノードを隔離します。フェールオーバー後、リクエストは残りのゾーンのノードのみによって処理されます。システムは、補うために残りのゾーンに追加のリソースをプロビジョニングしようとしますが、リソースの可用性やスケジューリングの同時実行数などの要因により、成功は保証されません。必要に応じて、クラスターの負荷を監視し、トラフィックスロットリング対策を実施してください。
フェールオーバー前にインデックスにレプリカが設定されていたにもかかわらず、フェールオーバー後にクラスターのステータスが YELLOW (異常) になった場合は、Kibana を通じてクラスターに接続し、次のコマンドを実行できます。これにより、障害が発生したゾーンから残りのゾーンへのシャードの再割り当てが強制されます。
PUT /_cluster/settings { "persistent" : { "cluster.routing.allocation.awareness.force.zone_id.values" : {"0": null, "1": null, "2": null} } }シャードが再割り当てされると、クラスターのヘルスステータスは GREEN に戻ります。
リカバリ (ゾーンの再参加)
失敗した可用性ゾーンが回復したことを確認した後、ノード可視化エリアでオフラインゾーンにマウスカーソルを合わせ、[回復] をクリックします。
表示されるダイアログボックスで、[確認] をクリックします。クラスターが再起動します。回復後、フェールオーバープロセス中に追加された一時ノードは削除され、クラスターアーキテクチャは元の状態に戻ります。