第2章 設定例: 外部 HAProxy ロードバランサーを使用したオーバークラウド
以下の設定例は、外部負荷分散を提供するフェデレーションされた HAProxy サーバーを使用するオーバークラウドを示しています。使用している環境の要件に基づいて、別の外部ロードバランサーを選択できます。
設定例では、以下の要素が含まれます。
- HAProxy を実行する外部の負荷分散サーバー。
- 1 つの Red Hat OpenStack Platform (RHOSP) director ノード。
- 高可用性クラスター設定の 3 つのコントローラーノードおよび 1 つのコンピュートノードで設定されるオーバークラウド。
- VLAN を使用したネットワーク分離。
この例では、ネットワークごとに以下の IP アドレスの割り当てを使用します。
-
内部 API:
172.16.20.0/24
-
テナント:
172.16.22.0/24
-
ストレージ:
172.16.21.0/24
-
ストレージ管理:
172.16.19.0/24
-
外部:
172.16.23.0/24
これらの IP 範囲には、コントローラーノードの IP 割り当てと、ロードバランサーが OpenStack サービスにバインドする仮想 IP が含まれます。
2.1. HAProxy 設定ファイルの例
サンプルファイルは、内部の HAProxy 設定パラメーターを示しています。サンプルの設定パラメーターを、外部ロードバランサーを設定するためのベースとして使用することができます。
HAProxy 設定ファイルには、以下のセクションが含まれます。
- グローバル設定
- デフォルト設定
- サービス設定
director は、この設定を、コンテナー化されていない環境用に各コントローラーノードの /etc/haproxy/haproxy.conf
ファイルで提供し、コンテナー化環境用に /var/lib/config-data/puppet-generated/haproxy/etc/haproxy/haproxy.cfg
ファイルで提供します。
グローバル、デフォルト、およびサービスパラメーターに加えて、他の HAProxy パラメーターも設定する必要があります。HAProxy パラメーターについての詳細は、コントローラーノードまたは haproxy
パッケージがインストールされている任意のシステムの /usr/share/doc/haproxy-*/configuration.txt
にある HAProxy 設定マニュアルを参照してください。
HAProxy 設定ファイルの例
global daemon group haproxy log /dev/log local0 maxconn 10000 pidfile /var/run/haproxy.pid user haproxy defaults log global mode tcp retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout check 10s listen aodh bind 172.16.20.250:8042 bind 172.16.20.250:8042 mode http server overcloud-controller-0 172.16.20.150:8042 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8042 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.252:8042 check fall 5 inter 2000 rise 2 listen ceilometer bind 172.16.20.250:8777 bind 172.16.23.250:8777 server overcloud-controller-0 172.16.20.150:8777 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8777 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8777 check fall 5 inter 2000 rise 2 listen cinder bind 172.16.20.250:8776 bind 172.16.23.250:8776 server overcloud-controller-0 172.16.20.150:8776 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8776 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8776 check fall 5 inter 2000 rise 2 listen glance_api bind 172.16.23.250:9292 bind 172.16.21.250:9292 server overcloud-controller-0 172.16.21.150:9292 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.21.151:9292 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.21.152:9292 check fall 5 inter 2000 rise 2 listen glance_registry bind 172.16.20.250:9191 server overcloud-controller-0 172.16.20.150:9191 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:9191 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:9191 check fall 5 inter 2000 rise 2 listen gnocchi bind 172.16.23.250:8041 bind 172.16.21.250:8041 mode http server overcloud-controller-0 172.16.20.150:8041 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8041 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8041 check fall 5 inter 2000 rise 2 listen heat_api bind 172.16.20.250:8004 bind 172.16.23.250:8004 mode http server overcloud-controller-0 172.16.20.150:8004 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8004 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8004 check fall 5 inter 2000 rise 2 listen heat_cfn bind 172.16.20.250:8000 bind 172.16.23.250:8000 server overcloud-controller-0 172.16.20.150:8000 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.152:8000 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.151:8000 check fall 5 inter 2000 rise 2 listen heat_cloudwatch bind 172.16.20.250:8003 bind 172.16.23.250:8003 server overcloud-controller-0 172.16.20.150:8003 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8003 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8003 check fall 5 inter 2000 rise 2 listen horizon bind 172.16.20.250:80 bind 172.16.23.250:80 mode http cookie SERVERID insert indirect nocache server overcloud-controller-0 172.16.20.150:80 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:80 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:80 check fall 5 inter 2000 rise 2 listen keystone_admin bind 172.16.23.250:35357 bind 172.16.20.250:35357 server overcloud-controller-0 172.16.20.150:35357 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:35357 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:35357 check fall 5 inter 2000 rise 2 listen keystone_admin_ssh bind 172.16.20.250:22 server overcloud-controller-0 172.16.20.150:22 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:22 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:22 check fall 5 inter 2000 rise 2 listen keystone_public bind 172.16.20.250:5000 bind 172.16.23.250:5000 server overcloud-controller-0 172.16.20.150:5000 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:5000 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:5000 check fall 5 inter 2000 rise 2 listen mysql bind 172.16.20.250:3306 option tcpka option httpchk stick on dst stick-table type ip size 1000 timeout client 0 timeout server 0 server overcloud-controller-0 172.16.20.150:3306 backup check fall 5 inter 2000 on-marked-down shutdown-sessions port 9200 rise 2 server overcloud-controller-1 172.16.20.151:3306 backup check fall 5 inter 2000 on-marked-down shutdown-sessions port 9200 rise 2 server overcloud-controller-2 172.16.20.152:3306 backup check fall 5 inter 2000 on-marked-down shutdown-sessions port 9200 rise 2 listen neutron bind 172.16.20.250:9696 bind 172.16.23.250:9696 server overcloud-controller-0 172.16.20.150:9696 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:9696 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:9696 check fall 5 inter 2000 rise 2 listen nova_ec2 bind 172.16.20.250:8773 bind 172.16.23.250:8773 server overcloud-controller-0 172.16.20.150:8773 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8773 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8773 check fall 5 inter 2000 rise 2 listen nova_metadata bind 172.16.20.250:8775 server overcloud-controller-0 172.16.20.150:8775 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8775 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8775 check fall 5 inter 2000 rise 2 listen nova_novncproxy bind 172.16.20.250:6080 bind 172.16.23.250:6080 balance source server overcloud-controller-0 172.16.20.150:6080 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:6080 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:6080 check fall 5 inter 2000 rise 2 listen nova_osapi bind 172.16.20.250:8774 bind 172.16.23.250:8774 server overcloud-controller-0 172.16.20.150:8774 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8774 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8774 check fall 5 inter 2000 rise 2 listen nova_placement bind 172.16.20.250:8778 bind 172.16.23.250:8778 mode http server overcloud-controller-0 172.16.20.150:8778 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8778 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8778 check fall 5 inter 2000 rise 2 listen panko bind 172.16.20.250:8779 transparent bind 172.16.23.250:8779 transparent server overcloud-controller-0 172.16.20.150:8779 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8779 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8779 check fall 5 inter 2000 rise 2 listen redis bind 172.16.20.249:6379 balance first option tcp-check tcp-check send AUTH\ p@55w0rd!\r\n tcp-check send PING\r\n tcp-check expect string +PONG tcp-check send info\ replication\r\n tcp-check expect string role:master tcp-check send QUIT\r\n tcp-check expect string +OK server overcloud-controller-0 172.16.20.150:6379 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:6379 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:6379 check fall 5 inter 2000 rise 2 listen swift_proxy_server bind 172.16.23.250:8080 bind 172.16.21.250:8080 server overcloud-controller-0 172.16.21.150:8080 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.21.151:8080 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.21.152:8080 check fall 5 inter 2000 rise 2
2.1.1. グローバル設定パラメーター: HAProxy 設定ファイルの例
グローバル設定パラメーターセクションは、ロードバランサーに関するプロセス全体のパラメーターセットを定義します。設定ファイルのパラメーター例を使用して、外部ロードバランサーを設定することができます。実際の環境に応じて、パラメーターの値を調整します。
グローバル設定パラメーター
global daemon user haproxy group haproxy log /dev/log local0 maxconn 10000 pidfile /var/run/haproxy.pid
この例は、以下のパラメーターを示しています。
-
daemon
: バックグラウンドプロセスとして実行します。 -
user haproxy
およびgroup haproxy
: プロセスを所有する Linux ユーザーおよびグループを定義します。 -
log
: 使用する syslog サーバーを定義します。 -
maxconn
: プロセスへの同時接続の最大数を設定します。 -
pidfile
: プロセス ID に使用するファイルを設定します。
2.1.2. デフォルト値設定パラメーター: HAProxy 設定ファイルの例
デフォルト値の設定パラメーターセクションは、外部ロードバランサーサービスの実行時に使用するデフォルト値のセットを定義します。設定ファイルのパラメーター例を使用して、外部ロードバランサーを設定することができます。実際の環境に応じて、パラメーターの値を調整します。
デフォルト値の設定パラメーター
defaults log global mode tcp retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout check 10s
この例は、以下のパラメーターを示しています。
-
log
: サービスのロギングを有効にします。値global
は、ロギング機能がglobal
セクションのlog
パラメーターを使用することを意味します。 -
mode
: 使用するプロトコルを定義します。ここでは、デフォルトは TCP です。 -
retries
: サーバーで実行するリトライ回数を設定します。これを超えると、接続の失敗が報告されます。 -
timeout
: 特定の機能を待機する最大の時間を設定します。たとえば、timeout http-request
は、完全な HTTP 要求を待つ最大の時間を設定します。
2.1.3. サービスレベルの設定パラメーター: HAProxy 設定ファイルの例
サービスレベル設定パラメーターのセクションでは、特定の Red Hat OpenStack Platform (RHOSP) サービスへのトラフィックの負荷分散時に使用するパラメーターのセットを定義します。設定ファイルのパラメーター例を使用して、外部ロードバランサーを設定することができます。実際の環境に応じてパラメーターの値を調整し、負荷分散を行うサービスごとにセクションをコピーします。
サービスレベル設定パラメーター
以下の例は、ceilometer
サービスの設定パラメーターを示しています。
listen ceilometer bind 172.16.20.250:8777 bind 172.16.23.250:8777 server overcloud-controller-0 172.16.20.150:8777 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8777 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8777 check fall 5 inter 2000 rise 2
負荷分散を行う各サービスは、設定ファイルのセクションに対応している必要があります。各サービスの設定には、以下のパラメーターが含まれます。
-
listen
: 要求をリッスンするサービスの名前。 -
listen
: サービスがリッスンする IP アドレスおよび TCP ポート番号。各サービスは、異なるネットワークトラフィック種別を表す異なるアドレスをバインドします。 -
server
: サービスを提供する各サーバーの名前、サーバーの IP アドレスおよびリッスンするポート、ならびに接続パラメーター。 -
check
: (オプション) ヘルスチェックを有効にします。 -
fall 5
: (オプション) ヘルスチェックに 5 回失敗すると、サービスはオフラインとみなされます。 -
inter 2000
: (オプション) 連続する 2 回のヘルスチェックの間隔を 2000 ミリ秒 (2 秒) に設定します。 -
rise 2
: (オプション) ヘルスチェックに 2 回成功すると、サービスは稼働状態とみなされます。
ceilometer
の例では、サービスは ceilometer サービスが提供される IP アドレスとポートを 172.16.20.2500:8777
および 172.16.23.250:8777
と識別します。HAProxy は、これらのアドレスの要求を overcloud-controller-0
(172.16.20.150:8777)、overcloud-controller-1
(172.16.20.151:8777)、または overcloud-controller-2
(172.16.0.152:8777) に転送します。