第16章 Load Balancing-as-a-Service (LBaaS) の設定
Load Balancing-as-a-Service (LBaaS) は、受け取った要求を OpenStack Networking が指定のインスタンス間で均等に分散できるようにします。このガイドでは、Open vSwitch (OVS) プラグインで LBaas を使用するように OpenStack Networking を設定する方法を、ステップごとに説明します。
Red Hat OpenStack Platform 5 で導入された Load Balancing-as-a-Service (LBaaS) は、受け取った要求を OpenStack Networking が指定のインスタンス間で均等に分散できるようにします。これにより、インスタンス間でのワークロードが予測可能な方法で共有されるようになり、システムリソースのより効率的な使用が可能となります。受け取った要求は、以下の負荷分散メソッドの 1 つを使用して分散されます。
- ラウンドロビン: 複数のインスタンス間で要求を均等にローテーションします。
- 送信元 IP アドレス: 同じ送信元 IP アドレスからの要求は常に一定のインスタンスへ送信されます。
- 最小コネクション: アクティブな接続が最も少ないインスタンスに要求が割り当てられます。
表 1: LBaaS の機能
機能 | 説明 |
---|---|
監視 | LBaaS は、ping、TCP、HTTP、HTTPS GET メソッドを使用した可用性モニタリング機能を提供します。監視機能は、要求の処理にプールメンバーが利用可能かどうかを判断するために実装されます。 |
管理 | LBaaS は、さまざまなツールセットを使用して管理されます。REST API は、プログラムベースの管理およびスクリプト作成に使用できます。ユーザーは、CLI (neutron) または OpenStack Dashboard のいずれかを使用して、ロードバランサーの管理タスクを行います。 |
接続制限 | 接続制限を使用して、受信トラフィックのシェーピングを行うことができます。この機能は、ワークロードを制御することも可能で、DoS (Denial of Service) 攻撃の緩和にも有効です。 |
セッションの永続性 | LBaaS は、受け取った要求が複数のインスタンスで構成されるプール内の同じインスタンスにルーティングされるようにすることで、セッションの継続性をサポートします。LBaaS は、クッキーや送信元 IP アドレスに基づいたルーティングの決定をサポートします。 |
LBaaS は現在 IPv4 アドレス設定でのみサポートされます。
LBaaSv1 は Red Hat OpenStack Platform 10 (Newton) で削除され、LBaaSv2 に置き換えられました。
16.1. OpenStack Networking および LBaaS トポロジー
OpenStack Networking (neutron) サービスは、大きく 2 つのカテゴリーに分類することができます。
1. Neutron API サーバー: このサービスは、エンドユーザーとサービスが OpenStack Networking と対話できるように、主に API を提供する OpenStack Networking API サーバーを実行します。このサービスは、基盤のデータベースと対話して、テナントネットワーク、ルーター、ロードバランサーの詳細などを保存する役割も果たします。
2. Neutron エージェント: OpenStack Networking のさまざまな機能を提供するサービスです。
- neutron-dhcp-agent: テナントプライベートネットワークの DHCP IP アドレスを管理します。
- neutron-l3-agent: テナントプライベートネットワーク、外部ネットワークなどの間のレイヤー 3 ルーティングを容易化します。
- neutron-lbaasv2-agent: テナントにより作成された LBaaS ルーターをプロビジョニングします。
以下の図には、HTTPS トラフィックからプールメンバーへのフローを示しています。
16.1.1. LBaaS のサポートステータス
- LBaaS v1 API は Red Hat OpenStack Platform 9 で非推奨となり、バージョン 10 で削除されました。
- LBaaS v2 API は Red Hat OpenStack Platform 7 で導入されました。これがバージョン 10 で提供されている唯一の LBaaS API です。
- LBaaS デプロイメントは現在 Red Hat OpenStack Platform director ではサポートされていません。
16.1.2. サービスの配置
OpenStack Networking Service は、同じ物理サーバーまたは別の専用サーバーで実行することができます。
Red Hat OpenStack Platform 10 では、コンポーザブルロールのサポートが追加され、ネットワークサービスをカスタムロール別に分類することができます。ただし、本ガイドでは、内容をわかりやすくするために、デプロイメントにはデフォルトの Controller ロールを使用することを前提とします。
API サーバーを実行するサーバーは通常、コントローラーノード と呼ばれ、OpenStack Networking エージェントを実行するサーバーは ネットワークノード と呼ばれます。理想的な実稼動環境では、パフォーマンスやスケーラビリティーの理由により、コンポーネントを専用のノードに分類しますが、テストまたは PoC デプロイメントではすべてのコンポーネントを 1 つの同じノードで実行します。本章では、どちらのシナリオにも対応しますが、コントローラーノードの設定のセクションは API サーバーで、ネットワークノードのセクションは LBaaS エージェントを実行するサーバーで行う必要があります。
コントローラーおよびネットワークロールの両方が同じ物理ノードに存在する場合には、この物理ノード (サーバー) で手順を実行する必要があります。
16.2. LBaaS の設定
本手順では、OpenStack Networking (neutron) が Open vSwitch (OVS) プラグインで LBaas を使用するように設定します。
neutron-server
サービスを実行しているノードで、以下の手順を実施します。
コントローラーノード (API サーバー) で、以下の操作を行います。
LBaaS を有効にします。
# yum install openstack-neutron-lbaas -y
neutron データベースに LBaaS テーブルを追加します。
$ neutron-db-manage --subproject neutron-lbaas --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head
/etc/neutron/neutron_lbaas.conf
でサービスプロバイダーを変更します。[service providers]
セクションで、以下のエントリーを除くすべてのエントリーをコメントアウト (#
) します。service_provider=LOADBALANCERV2:Haproxy:neutron_lbaas.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default
/etc/neutron/neutron.conf
で、LBaaS v2 プラグインがservice_plugins
に設定されていることを確認します。service_plugins=neutron_lbaas.services.loadbalancer.plugin.LoadBalancerPluginv2
以前に追加した他のプラグインも表示されます。
注記lbaasv1
を設定している場合は、lbaasv2
の上記設定に置き換えます。/etc/neutron/lbaas_agent.ini
で、[DEFAULT]
セクションに以下の設定を追加します。ovs_use_veth = False interface_driver =neutron.agent.linux.interface.OVSInterfaceDriver
/etc/neutron/services_lbaas.conf
で、[haproxy]
セクションに以下の設定を追加します。user_group = haproxy
他の
デバイスドライバー
のエントリーをすべてコメントアウトします。注記l3-agent
が failed モードにある場合は、l3_agent
のログファイルを確認してください。ログファイルで説明されているように、/etc/neutron/neutron.conf
を編集し、[DEFAULT]
の特定の値をコメントアウトし、oslo_messaging_rabbit
で対応する値をコメント解除しなければならない場合があります。
LBaaS サービスを設定し、それらのステータスを確認します。
lbaasv1
サービスを停止し、lbaasv2
を起動します。# systemctl disable neutron-lbaas-agent.service # systemctl stop neutron-lbaas-agent.service # systemctl mask neutron-lbaas-agent.service # systemctl enable neutron-lbaasv2-agent.service # systemctl start neutron-lbaasv2-agent.service
lbaasv2
のステータスを確認します。# systemctl status neutron-lbaasv2-agent.service
neutron-server
を再起動し、ステータスを確認します。# systemctl restart neutron-server.service # systemctl status neutron-server.service
Loadbalancerv2
エージェントを確認します。$ neutron agent-list