第15章 Load Balancing-as-a-Service (LBaaS) の設定
Load Balancing-as-a-Service (LBaaS) は、OpenStack Networking が指定のインスタンス間で受信要求を均等に分散できるようにします。このステップバイステップのガイドでは、OpenStack Networking が Open vSwitch (OVS) プラグインで LBaas を使用するように設定します。
Red Hat OpenStack Platform 5 で導入された Load Balancing-as-a-Service (LBaaS) は、OpenStack Networking が指定のインスタンス間で受信要求を均等に分散できるようにします。これにより、インスタンス間でのワークロードが予測可能な方法で共有されるようになり、システムリソースのより効率的な使用が可能となります。受信要求は、以下の負荷分散メソッドの 1 つを使用して分散されます。
- ラウンドロビン: 複数のインスタンス間で要求を均等にローテーションします。
- 送信元 IP アドレス: 同じ送信元 IP アドレスからの要求は常に一定のインスタンスへ送信されます。
- 最小コネクション: アクティブな接続が最も少ないインスタンスに要求が割り当てられます。
機能 | 説明 |
---|---|
監視機能 |
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 11 (Ocata) で削除され、LBaaSv2 に置き換えられました。
15.1. OpenStack Networking および LBaaS トポロジー リンクのコピーリンクがクリップボードにコピーされました!
OpenStack Networking (neutron) サービスは、大きく 2 つのカテゴリーに分類することができます。
1. Neutron API server: このサービスは、エンドユーザーとサービスが OpenStack Networking と対話できるように、主に API を提供する OpenStack Networking API サーバーを実行します。またこのサービスは、基盤のデータベースと対話して、テナントネットワーク、ルーター、ロードバランサーの詳細などを保存する役割も果たします。
2. Neutron エージェント: OpenStack Networking のさまざまな機能を提供するサービスです。
- neutron-dhcp-agent: テナントプライベートネットワークの DHCP IP アドレスを管理します。
- neutron-l3-agent: テナントプライベートネットワーク、外部ネットワークなどの間のレイヤー 3 ルーティングを容易化します。
- neutron-lbaasv2-agent: テナントにより作成された LBaaS ルーターをプロビジョニングします。
以下の図には、HTTPS トラフィックからプールメンバーへのフローを示しています。
15.1.1. LBaaS のサポートステータス リンクのコピーリンクがクリップボードにコピーされました!
- LBaaS v1 API は、バージョン 10 で削除されました。
- LBaaS v2 API は Red Hat OpenStack Platform 7 で導入されました。これは、バージョン 10 で提供されている唯一の LBaaS API です。
- LBaaS デプロイメントは現在 Red Hat OpenStack Platform director ではサポートされていません。
15.1.2. サービスの配置 リンクのコピーリンクがクリップボードにコピーされました!
OpenStack Networking Service は、同じ物理サーバーまたは別の専用サーバーで実行することができます。
Red Hat OpenStack Platform 11 では、コンポーザブルロールのサポートが追加され、ネットワークサービスをカスタムロール別に分類することができます。ただし、本ガイドでは、内容をわかりやすくするために、デプロイメントにはデフォルトのコントローラーノードを使用することを前提とします。
API サーバーを実行するサーバーは通常、コントローラーノード と呼ばれ、OpenStack Networking エージェントを実行するサーバーは Network node と呼ばれます。理想的な実稼動環境では、パフォーマンスやスケーラビリティーの理由により、コンポーネントを専用のノードに分類しますが、テストまたは PoC デプロイメントではすべてのコンポーネントを 1 つの同じノードで実行します。本章では、どちらのシナリオにも対応しますが、コントローラーノードの設定のセクションは API サーバーで、ネットワークノードのセクションは LBaaS エージェントを実行するサーバーで行う必要があります。
コントローラーおよびネットワークロールの両方が同じ物理ノードに存在する場合には、この物理ノード (サーバー) で手順を実行する必要があります。
15.2. LBaaS の設定 リンクのコピーリンクがクリップボードにコピーされました!
以下の手順では、OpenStack Networking (neutron) で LBaaS を Open vSwitch (OVS) プラグインと共に使用するための設定方法を説明します。これらのステップは、neutron-server
サービスを実行するノードで実行してください。
これらのステップは、Octavia をベースとするデプロイメント向けではありません。https://access.redhat.com/documentation/ja-jp/red_hat_openstack_platform/11/html-single/advanced_overcloud_customization/#Composable_Service_Reference-New_Services を参照してください。
コントローラーノード (API サーバー) の場合:
HAProxy をインストールします。
yum install haproxy
# yum install haproxy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow LBaaS テーブルを neutron データベースに追加します。
neutron-db-manage --subproject neutron-lbaas --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head
$ neutron-db-manage --subproject neutron-lbaas --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/neutron/neutron_lbaas.conf
でサービスプロバイダーを変更します。[service providers]
セクションで、以下を除く全エントリーをコメントアウト (#
) します。service_provider=LOADBALANCERV2:Haproxy:neutron_lbaas.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default
service_provider=LOADBALANCERV2:Haproxy:neutron_lbaas.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/neutron/neutron.conf
で、service_plugins
に LBaaS v2 プラグインが設定されていることを確認します。service_plugins=neutron_lbaas.services.loadbalancer.plugin.LoadBalancerPluginv2
service_plugins=neutron_lbaas.services.loadbalancer.plugin.LoadBalancerPluginv2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以前に追加した他のプラグインも設定されているはずです。
注記lbaasv1
が設定されている場合には、上記のlbaasv2
用の設定に置き換えます。/etc/neutron/lbaas_agent.ini
で、以下の設定を[DEFAULT]
セクションに追加します。ovs_use_veth = False interface_driver =neutron.agent.linux.interface.OVSInterfaceDriver
ovs_use_veth = False interface_driver =neutron.agent.linux.interface.OVSInterfaceDriver
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/neutron/services_lbaas.conf
で、以下の設定を[haproxy]
セクションに追加します。user_group = haproxy
user_group = haproxy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow その他の
device driver
のエントリーはコメントアウトしてください。注記l3-agent
が失敗のモードに入っている場合は、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
# 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow lbaasv2
のステータスを確認します。systemctl status neutron-lbaasv2-agent.service
# systemctl status neutron-lbaasv2-agent.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow neutron-server
を再起動してステータスを確認します。systemctl restart neutron-server.service systemctl status neutron-server.service
# systemctl restart neutron-server.service # systemctl status neutron-server.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Loadbalancerv2
エージェントを確認します。neutron agent-list
$ neutron agent-list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
15.3. ロードバランサーの自動再スケジュール リンクのコピーリンクがクリップボードにコピーされました!
失敗した LBaaS エージェントからロードバランサーを自動的に再スケジュールするように neutron を設定することが可能です。以前のリリースでは、ロードバランサーを複数の LBaaS エージェントでスケジュールできましたが、ハイパーバイザーが停止した場合には、そのノードに対してスケジュールされていたロードバランサーは、操作を停止していました。現在は、このようなロードバランサーは別のエージェントに自動的に再スケジュールできるようになりました。この機能は、デフォルトで無効になっており、allow_automatic_lbaas_agent_failover
を使用して管理されます。
15.3.1. 自動フェイルオーバーの有効化 リンクのコピーリンクがクリップボードにコピーされました!
Loadbalancerv2
エージェントを実行するノードが少なくとも 2 台必要です。
Loadbalancerv2
エージェントを実行している全ノードで、/etc/neutron/neutron_lbaas.conf を編集します。allow_automatic_lbaas_agent_failover=True
allow_automatic_lbaas_agent_failover=True
Copy to Clipboard Copied! Toggle word wrap Toggle overflow LBaaS エージェントと
neutron-server
を再起動します。systemctl restart neutron-lbaasv2-agent systemctl restart neuron-server.service
systemctl restart neutron-lbaasv2-agent systemctl restart neuron-server.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow エージェントの状態を確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
15.3.2. フェイルオーバーの設定例 リンクのコピーリンクがクリップボードにコピーされました!
新規ロードバランサーを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow haproxy が起動されるようにリスナーを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow どの LBaaS エージェントがロードバランサーのスケジュール先となっていたかをチェックします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow haproxy がそのノードで実行されていることを確認します。また、他のノードでは現在実行されていないことも確認してください。
stack@node2:~/$ ps -ef | grep "haproxy -f" | grep lbaas nobody 14503 1 0 17:14 ? 00:00:00 haproxy -f /opt/openstack/data/neutron/lbaas/v2/b130e956-b8d1-4290-ab83-febc19797683/haproxy.conf -p /opt/openstack/data/neutron/lbaas/v2/b130e956-b8d1-4290-ab83-febc19797683/haproxy.pid stack@node1:~/$ ps -ef | grep "haproxy -f" | grep lbaas stack@node1:~/$
stack@node2:~/$ ps -ef | grep "haproxy -f" | grep lbaas nobody 14503 1 0 17:14 ? 00:00:00 haproxy -f /opt/openstack/data/neutron/lbaas/v2/b130e956-b8d1-4290-ab83-febc19797683/haproxy.conf -p /opt/openstack/data/neutron/lbaas/v2/b130e956-b8d1-4290-ab83-febc19797683/haproxy.pid stack@node1:~/$ ps -ef | grep "haproxy -f" | grep lbaas stack@node1:~/$
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ホストしている lbaas エージェントのプロセスを強制終了して、
neutron-server
がこのイベントを認識するのを待ってから、loadbalancer を再スケジュールします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow q-svc log
を確認します。2016-12-08 17:17:48.427 WARNING neutron.db.agents_db [req-1518b1ee-1ce3-4813-9999-9e9323666df7 None None] Agent healthcheck: found 1 dead agents out of 7: Type Last heartbeat host Loadbalancerv2 agent 2016-12-08 17:15:11 node2 2016-12-08 17:18:06.000 WARNING neutron.db.agentschedulers_db [req-d0c689d4-434b-4db7-8140-27d3d3442dec None None] Rescheduling loadbalancer b130e956-b8d1-4290-ab83-febc19797683 from agent 88f4c436-7152-4d30-a9e8-a793750bcbba because the agent did not report to the server in the last 150 seconds.
2016-12-08 17:17:48.427 WARNING neutron.db.agents_db [req-1518b1ee-1ce3-4813-9999-9e9323666df7 None None] Agent healthcheck: found 1 dead agents out of 7: Type Last heartbeat host Loadbalancerv2 agent 2016-12-08 17:15:11 node2 2016-12-08 17:18:06.000 WARNING neutron.db.agentschedulers_db [req-d0c689d4-434b-4db7-8140-27d3d3442dec None None] Rescheduling loadbalancer b130e956-b8d1-4290-ab83-febc19797683 from agent 88f4c436-7152-4d30-a9e8-a793750bcbba because the agent did not report to the server in the last 150 seconds.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
稼働中の lbaas エージェントに対して、loadbalancer が実際に再スケジュールされたことと、haproxy が実行中であることを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow haproxy プロセスの状態を確認します。
stack@node1:~/$ ps -ef | grep "haproxy -f" | grep lbaas nobody 768 1 0 17:18 ? 00:00:00 haproxy -f /opt/openstack/data/neutron/lbaas/v2/b130e956-b8d1-4290-ab83-febc19797683/haproxy.conf -p /opt/openstack/data/neutron/lbaas/v2/b130e956-b8d1-4290-ab83-febc19797683/haproxy.pid
stack@node1:~/$ ps -ef | grep "haproxy -f" | grep lbaas nobody 768 1 0 17:18 ? 00:00:00 haproxy -f /opt/openstack/data/neutron/lbaas/v2/b130e956-b8d1-4290-ab83-febc19797683/haproxy.conf -p /opt/openstack/data/neutron/lbaas/v2/b130e956-b8d1-4290-ab83-febc19797683/haproxy.pid
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
ステップ 4 で強制終了した labaas エージェントを再度有効にします。haproxy がそのノードでは実行されなくなったことと、
neutron-server
がエージェントを認識していることを確認します。stack@node2:~/$ ps -ef | grep "haproxy -f" | grep lbaas stack@node2:~/$
stack@node2:~/$ ps -ef | grep "haproxy -f" | grep lbaas stack@node2:~/$
Copy to Clipboard Copied! Toggle word wrap Toggle overflow エージェントの一覧を確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow