第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) に転送します。