HAProxy

HAProxy

HAProxy は、TCP や HTTP ベースのアプリケーションに、高速かつ高信頼な HTTP リバースプロキシーとロードバランサーを提供します。とくに、永続性や L7 処理を必要とする、非常に高負荷な Web サイトに適しています。最近のハードウェアを用いると、数千の接続を現実的にサポートします。

HAProxy の各インスタンスは、仮想 IP アドレスへの接続のみを受け付けるよう、そのフロントエンドを設定します。HAProxy のバックエンド (接続先) は、負荷分散されるインスタンスの IP アドレスの一覧です。

注釈

HAProxy が単一障害点にならないようにします。複数の HAProxy インスタンスを実行することが推奨されます。

他の手段として、Pacemaker や Keepalived を使用して可能性を確保することもできます。

代わりに、ハードウェアやソフトウェアの商用ロードバランサーを使用することもできます。ハードウェアロードバランサーは一般的に高性能なので、推奨されます。

お使いのノードに HAProxy をインストールする方法の詳細は HAProxy 公式ドキュメント を参照してください。

HAProxy の設定

  1. HAProxy サービスを再起動します。

  2. Locate your HAProxy instance on each OpenStack controller node in your environment. The following is an example /etc/haproxy/haproxy.cfg configuration file. Configure your instance using the following configuration file, you will need a copy of it on each controller node.

     global
      chroot  /var/lib/haproxy
      daemon
      group  haproxy
      maxconn  4000
      pidfile  /var/run/haproxy.pid
      user  haproxy
    
    defaults
      log  global
      maxconn  4000
      option  redispatch
      retries  3
      timeout  http-request 10s
      timeout  queue 1m
      timeout  connect 10s
      timeout  client 1m
      timeout  server 1m
      timeout  check 10s
    
     listen dashboard_cluster
      bind <Virtual IP>:443
      balance  source
      option  tcpka
      option  httpchk
      option  tcplog
      server controller1 10.0.0.12:443 check inter 2000 rise 2 fall 5
      server controller2 10.0.0.13:443 check inter 2000 rise 2 fall 5
      server controller3 10.0.0.14:443 check inter 2000 rise 2 fall 5
    
     listen galera_cluster
      bind <Virtual IP>:3306
      balance  source
      option  mysql-check
      server controller1 10.0.0.12:3306 check port 9200 inter 2000 rise 2 fall 5
      server controller2 10.0.0.13:3306 backup check port 9200 inter 2000 rise 2 fall 5
      server controller3 10.0.0.14:3306 backup check port 9200 inter 2000 rise 2 fall 5
    
     listen glance_api_cluster
      bind <Virtual IP>:9292
      balance  source
      option  tcpka
      option  httpchk
      option  tcplog
      server controller1 10.0.0.12:9292 check inter 2000 rise 2 fall 5
      server controller2 10.0.0.13:9292 check inter 2000 rise 2 fall 5
      server controller3 10.0.0.14:9292 check inter 2000 rise 2 fall 5
    
     listen glance_registry_cluster
      bind <Virtual IP>:9191
      balance  source
      option  tcpka
      option  tcplog
      server controller1 10.0.0.12:9191 check inter 2000 rise 2 fall 5
      server controller2 10.0.0.13:9191 check inter 2000 rise 2 fall 5
      server controller3 10.0.0.14:9191 check inter 2000 rise 2 fall 5
    
     listen keystone_admin_public_internal_cluster
      bind <Virtual IP>:5000
      balance  source
      option  tcpka
      option  httpchk
      option  tcplog
      server controller1 10.0.0.12:5000 check inter 2000 rise 2 fall 5
      server controller2 10.0.0.13:5000 check inter 2000 rise 2 fall 5
      server controller3 10.0.0.14:5000 check inter 2000 rise 2 fall 5
    
     listen nova_ec2_api_cluster
      bind <Virtual IP>:8773
      balance  source
      option  tcpka
      option  tcplog
      server controller1 10.0.0.12:8773 check inter 2000 rise 2 fall 5
      server controller2 10.0.0.13:8773 check inter 2000 rise 2 fall 5
      server controller3 10.0.0.14:8773 check inter 2000 rise 2 fall 5
    
     listen nova_compute_api_cluster
      bind <Virtual IP>:8774
      balance  source
      option  tcpka
      option  httpchk
      option  tcplog
      server controller1 10.0.0.12:8774 check inter 2000 rise 2 fall 5
      server controller2 10.0.0.13:8774 check inter 2000 rise 2 fall 5
      server controller3 10.0.0.14:8774 check inter 2000 rise 2 fall 5
    
     listen nova_metadata_api_cluster
      bind <Virtual IP>:8775
      balance  source
      option  tcpka
      option  tcplog
      server controller1 10.0.0.12:8775 check inter 2000 rise 2 fall 5
      server controller2 10.0.0.13:8775 check inter 2000 rise 2 fall 5
      server controller3 10.0.0.14:8775 check inter 2000 rise 2 fall 5
    
     listen cinder_api_cluster
      bind <Virtual IP>:8776
      balance  source
      option  tcpka
      option  httpchk
      option  tcplog
      server controller1 10.0.0.12:8776 check inter 2000 rise 2 fall 5
      server controller2 10.0.0.13:8776 check inter 2000 rise 2 fall 5
      server controller3 10.0.0.14:8776 check inter 2000 rise 2 fall 5
    
     listen ceilometer_api_cluster
      bind <Virtual IP>:8777
      balance  source
      option  tcpka
      option  tcplog
      server controller1 10.0.0.12:8777 check inter 2000 rise 2 fall 5
      server controller2 10.0.0.13:8777 check inter 2000 rise 2 fall 5
      server controller3 10.0.0.14:8777 check inter 2000 rise 2 fall 5
    
     listen nova_vncproxy_cluster
      bind <Virtual IP>:6080
      balance  source
      option  tcpka
      option  tcplog
      server controller1 10.0.0.12:6080 check inter 2000 rise 2 fall 5
      server controller2 10.0.0.13:6080 check inter 2000 rise 2 fall 5
      server controller3 10.0.0.14:6080 check inter 2000 rise 2 fall 5
    
     listen neutron_api_cluster
      bind <Virtual IP>:9696
      balance  source
      option  tcpka
      option  httpchk
      option  tcplog
      server controller1 10.0.0.12:9696 check inter 2000 rise 2 fall 5
      server controller2 10.0.0.13:9696 check inter 2000 rise 2 fall 5
      server controller3 10.0.0.14:9696 check inter 2000 rise 2 fall 5
    
     listen swift_proxy_cluster
      bind <Virtual IP>:8080
      balance  source
      option  tcplog
      option  tcpka
      server controller1 10.0.0.12:8080 check inter 2000 rise 2 fall 5
      server controller2 10.0.0.13:8080 check inter 2000 rise 2 fall 5
      server controller3 10.0.0.14:8080 check inter 2000 rise 2 fall 5
    

    注釈

    この Galera cluster の設定ディレクティブ backup は、3 つのコントローラーの内 2 つがスタンバイノードであることを意味します。

    注釈

    Telemetry API サービスの設定は、このチェックを正常に実行できないため、 option httpchk ディレクティブがありません。

  1. ローカル IP 以外のバインドを許可するために、カーネルパラメーターを設定します。これにより、動作中の HAProxy インスタンスがフェイルオーバー用の仮想 IP をバインドできるようになります。

    net.ipv4.ip_nonlocal_bind = 1
    
  2. すぐに変更を反映するため、ホストを再起動します。または、以下を実行します。

    $ sysctl -p
    
  3. HAProxy をクラスターに追加して、仮想 IP が HAProxy の動作しているマシンにおいてのみ動作できることを確認します。

    pcs

    $ pcs resource create lb-haproxy systemd:haproxy --clone
    $ pcs constraint order start vip then lb-haproxy-clone kind=Optional
    $ pcs constraint colocation add lb-haproxy-clone with vip
    

    crmsh

    $ crm cib new conf-haproxy
    $ crm configure primitive haproxy lsb:haproxy op monitor interval="1s"
    $ crm configure clone haproxy-clone haproxy
    $ crm configure colocation vip-with-haproxy inf: vip haproxy-clone
    $ crm configure order haproxy-after-vip mandatory: vip haproxy-clone
    
Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.