第21章 レイヤー 3 高可用性の設定
本章では、OpenStack Networking のデプロイメントにおけるレイヤー 3 高可用性 (L3 HA) の役割について説明し、ネットワークの仮想ルーターを保護する実装手順を記載します。
21.1. 高可用性なしの OpenStack Networking
高可用性機能が有効化されていない OpenStack Networking デプロイメントは、物理ノードの障害からの影響を受けやすくなります。
一般的なデプロイメントでは、テナントが仮想ルーターを作成します。この仮想ルーターは、物理 L3 エージェントノードで実行されるようにスケジューリングされます。L3 エージェントノードがなくなると、そのノードに依存していた仮想マシンは外部ネットワークと接続できなくなります。したがって、Floating IP アドレスも利用できなくなります。また、そのルーターがホストするネットワーク間の接続も失われます。
21.2. レイヤー 3 高可用性の概要
この active/passive の高可用性設定は、業界標準の VRRP (RFC 3768 で定義) を使用してテナントルーターと Floating IP アドレスを保護します。ノードの 1 つを active、残りを standby ロールとして機能するように指定することで、仮想ルーターは複数の OpenStack Networking ノードの間で無作為にスケジュールされます。
レイヤー 3 高可用性を正常にデプロイメントするには、冗長化された OpenStack Networking ノードにおいて、Floating IP 範囲や外部ネットワークへのアクセスなど、同様の設定を維持する必要があります。
以下の図では、アクティブなルーター 1 とルーター 2 が別個の物理 L3 エージェントノード上で稼働しています。レイヤー 3 高可用性には、対応するノードの仮想ルーターのバックアップがスケジュールされており、物理ノードに障害が発生した場合にサービスを再開する準備が整っています。L3 エージェントノードに障害が発生すると、レイヤー 3 高可用性は影響を受けた仮想ルーターと Floating IP アドレスを稼働中のノードに再スケジュールします。
フェイルオーバーのイベント時には、Floating IP 経由のインスタンスの TCP セッションは影響を受けず、中断なしで新しい L3 ノードに移行されます。SNAT トラフィックのみがフェイルオーバーイベントからの影響を受けます。
active/active HA モードの場合には、L3 エージェント自体はさらに保護されます。
21.2.1. フェイルオーバーの状況
レイヤー 3 高可用性は、以下のイベントにおいて保護リソースのリスケジュールを自動的に行います。
- ハードウェアの障害が原因で L3 エージェントノードがシャットダウンするか、停電した場合
- L3 エージェントノードは、物理ネットワークから分離され、接続が切断された場合
L3 エージェントサービスを手動で停止しても、フェイルオーバーのイベントが開始される訳ではありません。
21.3. テナントに関する留意事項
レイヤー 3 高可用性設定はバックエンドで行われており、テナントには表示されません。通常通り、仮想ルーターを継続して作成/管理することができますが、レイヤー 3 の高可用性の実装を設計する場合に認識しておく必要のある制限事項があります。
- レイヤー 3 高可用性は、テナントごとに仮想ルーター 255 個までサポートします。
- 内部の VRRP メッセージは、個別の内部ネットワーク内でトランスポートされ、プロジェクトごとに自動的にこれらのメッセージが作成されます。このプロセスは、ユーザーに透過的に行われます。
21.4. バックグラウンドの変更
ルーターの作成時に、管理者が --ha=True/False を設定できるように、Neutron API が更新されました。これは、neutron.conf の l3_ha の設定 (デフォルト) を上書きします。必要な設定手順については、次の項を参照してください。
21.4.1. neutron-server への変更
- レイヤー 3 高可用性は、OpenStack Networking で使用されるスケジューラー (無作為または leastrouter のスケジューラー) に関わらず、無作為にアクティブなロールを割り当てます。
- 仮想ルーターへの仮想 IP の確保を処理するために、データベーススキーマが変更されます。
- 上記のようにレイヤー 3 高可用性トラフィックを転送するために、トラフィックネットワークが作成されます。
21.4.2. L3 エージェントへの変更
- 新しい keepalived のマネージャーが追加され、負荷分散と HA 機能が提供されるようになりました。
- IP アドレスが仮想 IP に変換されます。
21.5. 設定手順
以下の手順では、OpenStack Networking と L3 エージェントノード上でレイヤー 3 高可用性を有効化します。
21.5.1. OpenStack Networking ノードの設定
1. neutron.conf ファイルで L3 HA を有効化し、各仮想ルーターを保護する L3 エージェントノード数を定義して、レイヤー 3 高可用性を設定します。
l3_ha = True max_l3_agents_per_router = 2 min_l3_agents_per_router = 2
これらの設定については、以下で説明します。
- l3_ha: True に設定されると、これ以降に作成された仮想ルーターはすべて、(レガシーではなく) HA にデフォルト設定されます。管理者は、以下を使用して各ルーターの値を上書きすることができます。
# neutron router-create --ha=<True | False> routerName
- max_l3_agents_per_router: このオプションは、デプロイメント内にあるネットワークノードの合計数と最小数の間の値に設定します。たとえば、OpenStack Networking ノードを 4 つデプロイして、最大値を 2 に設定した場合には、L3 エージェント 2 つのみが各 HA 仮想ルーター (1 つは active、もう 1 つは standby) を保護することになります。さらに、新規の L3 エージェントノードがデプロイされるたびに、max_l3_agents_per_router の上限に達するまで、standby バージョンの仮想ルーターが追加でスケジュールされます。これにより、新規 L3 エージェントを追加することで、standby ルーターの数をスケールアウトすることができます。
- min_l3_agents_per_router: 最小値を設定することで、HA ルールが強制された状態に保つことができます。この設定は仮想ルーターの作成時に検証され、HA を提供するのに十分な数の L3 エージェントノードが利用できるようにします。HA ルーターの作成時には少なくともこの最小値で指定した数のアクティブな L3 エージェントが必要であるため、たとえば、ネットワークノードが 2 つあり、1 つが利用できなくなった場合、その間は新しいルーターを作成できません。
2. neutron-server サービスを再起動して変更を適用します。
# systemctl restart neutron-server.service
21.5.2. 設定の確認
仮想ルーターの名前空間内で ip address のコマンドを実行すると、プレフィックスとして ha- が指定された HA デバイスが結果内に返されます。
# ip netns exec qrouter-b30064f9-414e-4c98-ab42-646197c74020 ip address <snip> 2794: ha-45249562-ec: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 12:34:56:78:2b:5d brd ff:ff:ff:ff:ff:ff inet 169.254.0.2/24 brd 169.254.0.255 scope global ha-54b92d86-4f
レイヤー 3 高可用性が有効化され、個別のノードで障害が発生した場合に、仮想ルーターと Floating IP アドレスが保護されます。