ビジネスで高可用性が求められる場合、単一ゾーンデプロイメントでは物理的なデータセンターの障害によってサービスが中断される可能性があります。クロス AZ デプロイメントは、Elasticsearch インスタンスのノードを、同一リージョン内の物理的に隔離された複数のアベイラビリティゾーンに分散させます。あるゾーンで障害が発生した場合でも、残りのゾーンにあるノードとデータレプリカを使用してクラスターは運用を継続し、データセンターレベルのディザスタリカバリを提供します。
仕組み
クロス AZ デプロイメントは、Elasticsearch 組み込みのシャードアロケーションアウェアネスメカニズムを使用します。
クロス AZ インスタンスを作成すると、システムは各ゾーンのノードに自動的に zone_id 属性を追加し、cluster.routing.allocation.awareness.attributes: zone_id を設定します。これにより、Elasticsearch はシャード割り当て時にゾーンの配置を考慮するようになります。
これにより、プライマリシャードとレプリカシャードが異なるゾーンに分散されることが保証されます。あるゾーンで障害が発生しても、他のゾーンのレプリカからデータにアクセスできます。
デプロイメントモードの選択
可用性の要件と予算に基づいてデプロイメントモードを選択してください。
|
デプロイメントモード |
アーキテクチャ |
ディザスタリカバリ |
ユースケース |
|
単一アベイラビリティゾーン |
すべてのノードを単一ゾーンに配置。 |
ゾーン障害により、完全なサービス停止が発生します。 |
開発、テスト、またはその他の重要でないサービス。 |
|
2 つのアベイラビリティゾーン |
ノードを 2 つのゾーンに分散。 |
単一ゾーンの障害に耐えられます。 |
高可用性が求められる本番環境。 |
|
3 つのアベイラビリティゾーン |
ノードを 3 つのゾーンに分散。 |
単一ゾーンの障害に耐えられます。 |
高可用性要件が厳しいコア本番サービス。 |
クロス AZ デプロイメントは、データの冗長性をレプリカに依存しているため、インデックスのレプリカ数を少なくとも 1 にする必要があります (number_of_replicas は 1 以上でなければなりません)。 例えば、2 つのアベイラビリティゾーンにまたがってデプロイされたインスタンスで、1 つのゾーンが利用できなくなった場合、残りのゾーンがサービスを提供し続ける必要があります。インデックスにレプリカが設定されていない場合、障害が発生したゾーンのプライマリシャードにはバックアップがなく、対応するデータは利用できなくなります。
クロス AZ インスタンスの作成
-
「Alibaba Cloud Elasticsearch インスタンスの作成」ページに移動してください。
-
デプロイモード セクションで、2 つまたは 3 つのアベイラビリティゾーンを選択してください。
-
ノード数:データノード、コールドデータノード、または調整ノードの数は、選択したゾーン数の倍数である必要があります。
-
専用マスターノード:マルチ AZ の安定性のために、3 つの専用マスターノードが必要です。
コンソールで選択したゾーン (例:ゾーン A) は、クラスターのプライマリアクセスポイントとして機能します。システムは、各ゾーンのリアルタイムのリソース可用性に基づいて、選択されたゾーン数にわたってノードを自動で均等に分散します (例:2 つのゾーンを選択した場合、ノードはゾーン A とゾーン B にデプロイされることがあります)。
-
単一 AZ からマルチ 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 つのデータノードを持つ単一 AZ インスタンスを 3 つの AZ にアップグレードすると、データノードが 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 つだけです。
-
[データ移行サービス契約] のチェックボックスを選択し、OK をクリックしてください。
-
確認後、クラスターは再起動し、短時間のパフォーマンス変動が発生する可能性があります。システムはまずターゲットゾーンに新しいマスターノードをプロビジョニングするため、古いゾーンと新しいゾーンが一時的に共存します。
-
移行が完了すると、クラスターは正常な状態に戻ります。表示の遅延により、コンソールに一時的に古いゾーンが表示されることがありますが、操作には影響しません。ノードの IP アドレスは変更されます。
-
-
アベイラビリティゾーンのフェールオーバーの実行 (フェールオーバーと復旧)
ゾーンで障害が発生した場合、フェールオーバーを実行してトラフィックを正常な残りのゾーンにリダイレクトします。障害が発生したゾーンが復旧したら、それを復旧させてクラスターに戻します。
フェールオーバー (障害が発生したゾーンの隔離)
-
インスタンスのノード可視化エリアで、隔離したいアベイラビリティゾーンにカーソルを合わせ、スイッチオーバー をクリックしてください。
-
表示されたダイアログボックスで、OK をクリックしてください。
重要フェールオーバーは、指定されたゾーン内のすべてのノードを隔離します。その後、サービスリクエストは残りのゾーンのノードによって処理されます。システムはそれらのゾーンに対応する数のリソースをプロビジョニングしようと試みますが、リソースの在庫やスケジューリングの制約により、成功は保証されません。クラスターの負荷に基づいてトラフィック制限措置を実装してください。
レプリカが設定されているにもかかわらず、フェールオーバー後にクラスターステータスが yellow になった場合は、Kibana で次のコマンドを実行してシャード割り当てポリシーを上書きし、残りのゾーンに強制的に再割り当てしてください:
PUT /_cluster/settings { "persistent" : { "cluster.routing.allocation.awareness.force.zone_id.values" : "<healthy-zone-1>,<healthy-zone-2>" } }シャードが再割り当てされると、クラスターのヘルスステータスは GREEN に戻ります。
復旧 (ゾーンをクラスターに戻す)
-
障害が発生したアベイラビリティゾーンが正常に戻ったことを確認した後、インスタンスのノード可視化エリアで、オフラインのアベイラビリティゾーンにカーソルを合わせ、スイッチバック をクリックしてください。
-
表示されたダイアログボックスで、OK をクリックしてください。クラスターが再起動します。復旧後、一時的に追加されたフェールオーバーノードは削除され、クラスターは元のアーキテクチャに戻ります。