高可用性が求められるアプリケーションでは、単一アベイラビリティゾーン配置は、物理データセンターの障害によるサービス中断に対して脆弱です。マルチ AZ 配置は、単一の Elasticsearch インスタンスのノードを同一リージョン内の複数の物理的に隔離されたアベイラビリティゾーン (データセンター) に分散させることで、フォールトトレランスを強化します。この設定により、データセンターレベルのディザスタリカバリが提供されます。1 つのアベイラビリティゾーンが利用できなくなった場合でも、他のゾーンのノードとデータレプリカを使用してクラスターは運用を継続し、業務継続性を確保します。
仕組み
マルチ AZ 配置では、Elasticsearch に組み込まれている シャードアロケーションアウェアネス メカニズムを利用します。
マルチ AZ インスタンスを作成すると、システムは異なるアベイラビリティゾーンのノードに自動的に zone_id 属性を追加します。また、クラスターには cluster.routing.allocation.awareness.attributes: zone_id が設定され、シャードアロケーション時にこのノード属性を考慮するよう Elasticsearch に指示します。
このメカニズムにより、インデックスのプライマリシャードとレプリカシャードが異なるアベイラビリティゾーンに分散されることが保証されます。アベイラビリティゾーン全体で障害が発生した場合でも、他のゾーンにあるレプリカシャードからデータにアクセスできるため、データの冗長性とサービス可用性が確保されます。
デプロイモード
アプリケーションの可用性要件と予算に最も適したデプロイモードを選択してください。
デプロイモード | アーキテクチャ | ディザスタリカバリ | ユースケース |
単一アベイラビリティゾーン | すべてのノードが単一のアベイラビリティゾーンに配置されます。 | アベイラビリティゾーンで障害が発生すると、完全なサービス停止を引き起こします。 | 開発、テスト、またはその他の非クリティカルなサービス。 |
2 つのアベイラビリティゾーン | ノードが 2 つのアベイラビリティゾーンに分散されます。 | 単一のアベイラビリティゾーンで障害が発生しても、サービスは利用可能な状態を維持します。 | 高可用性要件を持つ本番環境。 |
3 つのアベイラビリティゾーン | ノードが 3 つのアベイラビリティゾーンに分散されます。 | 単一のアベイラビリティゾーンで障害が発生しても、サービスは利用可能な状態を維持します。 | 厳格な高可用性要件を持つコア本番サービス。 |
マルチ AZ インスタンスの作成
Alibaba Cloud Elasticsearch インスタンスの作成ページに移動します。
デプロイモード セクションで、2つまたは3つの可用性ゾーンを選択します。
ノード数の要件:データノード、コールドデータノード、またはコーディネーティングノードの数は、均等な分散を確保するために、選択したアベイラビリティゾーン数の倍数である必要があります。
専用マスターノード:マルチ AZ アーキテクチャの安定性を確保するために、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 つのデータノードを持つ単一 AZ インスタンスを 3 つの AZ 配置にスペックアップする場合、システムは自動的に 1 つのデータノードを追加し、合計を 3 つにします。これにより、各アベイラビリティゾーンに 1 つのデータノードが割り当てられることが保証されます。
アベイラビリティゾーンの移行
クラスターをスペックアップする必要があるものの、現在のアベイラビリティゾーンに十分なリソースがない場合は、スペックアップを実行する前に、十分なリソースがある新しいアベイラビリティゾーンにノードを移行できます。
アベイラビリティゾーンを移行すると、クラスターの再起動がトリガーされます。再起動中、クラスターは利用可能な状態を維持しますが、一時的にサービスが不安定になる可能性があります。この操作はオフピーク時間帯に実行することを推奨します。
移行の前に、以下の条件が満たされていることを確認してください:
GET _cluster/healthを実行して、クラスターのステータスが GREEN であることを確認します。クラスターのステータスが正常でない場合は、「クラスター変更エラー:クラスターのステータスが異常です」でソリューションをご参照ください。GET /_cat/indices?vを実行して、CLOSE 状態のインデックスがないか確認します。存在する場合は、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 をクリックします。
重要アベイラビリティゾーンのフェールオーバーは、指定されたアベイラビリティゾーン内のすべてのノードを隔離します。フェールオーバー後、サービスリクエストは残りのアベイラビリティゾーンのノードのみによって処理されます。システムは、補うために残りのゾーンに対応する数のリソースをプロビジョニングしようとします。ただし、基盤となるリソース在庫やスケジューリングの同時実行数などの要因により、成功は保証されません。クラスターの負荷に基づいて、サービスにトラフィック制限措置を実装することを推奨します。
フェールオーバー前にインデックスにレプリカが設定されていたにもかかわらず、フェールオーバー完了後にクラスターのステータスが黄色 (異常) になった場合は、Kibana 接続を介して次のコマンドを実行し、シャードアロケーションポリシーを一時的にオーバーライドできます。これにより、障害が発生したアベイラビリティゾーンのシャードが残りのゾーンに再割り当てされます:
PUT /_cluster/settings { "persistent" : { "cluster.routing.allocation.awareness.force.zone_id.values" : {"0": null, "1": null, "2": null} } }シャードが再割り当てされると、クラスターのヘルスステータスは GREEN に戻ります。
復元
失敗した可用性ゾーンが正常に戻ったことを確認したら、インスタンスのノード可視化エリアで、オフラインの可用性ゾーンにポインターを合わせ、スイッチバック をクリックします。
表示されたダイアログボックスで、OK をクリックします。クラスターが再起動します。復元操作の後、フェールオーバー中に一時的に追加されたノードは削除され、クラスターアーキテクチャは元の状態に復元されます。