HAProxyとは何ですか?
HAProxy(High Availability Proxy)は、任意のTCPサービスの負荷を分散できるオープンソースのロードバランサーです。 HAProxyは、無料で非常に高速で信頼性の高いソリューションであり、TCPおよびHTTPベースのアプリケーションの負荷分散、高可用性、およびプロキシを提供します。これは、トラフィックの多いWebサイトに特に適しており、世界で最も訪問されているWebサイトの多くに電力を供給します。
存在するため、デファクトスタンダードのオープンソースロードバランサーになりました。宣伝はしていませんが、広く使われています。以下は、セットアップがどのように見えるかの基本的な図です。
HAProxyのインストール
Ubuntu 14.04を使用していて、次の方法でインストールします:
apt-get install haproxy
バージョンは次の方法で確認できます:
haproxy -v
HAProxyをinitスクリプト/etc/ default/haproxyで開始できるようにする必要があります。 ENABLEDオプションを次のように1に設定します:
ENABLED=1
この変更が適切に行われたかどうかを確認するには、パラメータを指定せずにHAProxyのinitスクリプトを実行します。次のように表示されます。
$ service haproxy <press_tab_key>
reload restart start status stop
これでHAProxyがインストールされました。ここで、2つ(2つ)のApache Webサーバーインスタンスと1つ(1つ)のHAProxyインスタンスがあるセットアップを作成しましょう。セットアップ情報は次のとおりです。
VirtualBoxを介して仮想的に生成される3つのシステムを使用します:
インスタンス1-ロードバランサー
ホスト名:haproxy
OS:Ubuntu
プライベートIP:192.168.205.15
インスタンス2-Webサーバー1
ホスト名:webser01
OS:LAMPを使用するUbuntu
プライベートIP:192.168.205.16
インスタンス2-Webサーバー2
ホスト名:webserver02
OS:LAMPを使用するUbuntu
プライベートIP:192.168.205.17
セットアップの図は次のとおりです。
HAProxyを構成しましょう。
HAProxyの設定
名前を変更して元のファイルをバックアップします:
mv /etc/haproxy/haproxy.cfg{,.original}
独自のhaproxy.cfgファイルを作成します。お気に入りのテキストエディタを使用して、/ etc / haproxy/haproxy.cfgファイルを次のように作成します。
global log /dev/log local0 log 127.0.0.1 local1 notice maxconn 4096 user haproxy group haproxy daemon defaults log global mode http option httplog option dontlognull retries 3 option redispatch maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000 listen webfarm 0.0.0.0:80 mode http stats enable stats uri /haproxy?stats balance roundrobin option httpclose option forwardfor server webserver01 192.168.205.16:80 check server webserver02 192.168.205.17:80 check
説明:
global log /dev/log local0 log 127.0.0.1 local1 notice maxconn 4096 user haproxy group haproxy daemon
logディレクティブは、ログメッセージの送信先となるsyslogサーバーについて言及しています。
maxconnディレクティブは、フロントエンドでの同時接続の数を指定します。デフォルト値は2000であり、システムの構成に応じて調整する必要があります。
userおよびgroupディレクティブは、HAProxyプロセスを指定されたユーザー/グループに変更します。これらは変更しないでください。
defaults log global mode http option httplog option dontlognull retries 3 option redispatch maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000
上記のセクションにはデフォルト値があります。オプションredispatchは、接続障害が発生した場合にセッションの再配布を有効にします。したがって、Webサーバーインスタンスがダウンした場合、セッションのスティッキネスは上書きされます。
retriesディレクティブは、接続障害後にWebサーバーインスタンスで実行する再試行の回数を設定します。
変更する値は、さまざまなタイムアウトディレクティブです。 contimeoutオプションは、Webサーバーインスタンスへの接続試行が成功するのを待機する最大時間を指定します。
clitimeoutとsrvtimeoutは、クライアントまたはサーバーがTCPプロセス中にデータを確認または送信することが期待される場合に適用されます。 HAProxyは、クライアントとサーバーのタイムアウトを同じ値に設定することをお勧めします。
listen webfarm 0.0.0.0:80 mode http stats enable stats uri /haproxy?stats balance roundrobin option httpclose option forwardfor server webserver01 192.168.205.16:80 check server webserver02 192.168.205.17:80 check
上記のブロックには、フロントエンドとバックエンドの両方の構成が含まれています。アプリケーションを識別するための単なる名前であるwebfarmをポート80でリッスンするようにHAProxyを構成しています。
statsディレクティブは、接続統計ページを有効にします。このページはstatsuriに記載されているURLで表示できるため、この場合はhttp://192.168.205.15/haproxy?statsです。このページのデモはここで表示できます。
balanceディレクティブは、負荷分散を指定します使用するアルゴリズム。使用可能なアルゴリズムオプションは次のとおりです。
- ラウンドロビン(ラウンドロビン)、
- 静的ラウンドロビン(static-rr)、
- 最小接続(leastconn)、
- ソース(ソース)、
- URI(uri)および
- URLパラメータ(url_param)。
各アルゴリズムに関する情報は、公式ドキュメントから入手できます。
serverディレクティブはバックエンドサーバーを宣言します。構文は次のとおりです。
server <server_name> <server_address>[:port] [param*]
ここで言及する名前は、ログとアラートに表示されます。このディレクティブでサポートされているパラメータは他にもいくつかあります。この記事ではチェックパラメータを使用します。チェックオプションを使用すると、Webサーバーインスタンスのヘルスチェックが有効になります。それ以外の場合、Webサーバーインスタンスは常に使用可能と見なされます。
設定が完了したら、HAProxyサービスを開始します。
sudo service haproxy start
サーバー名は、デフォルトで/var/www/index.htmlにあるデフォルトのindex.htmlファイルの両方に追加されます
。インスタンス2-Webサーバー1(IP- 192.168.205.16のwebserver01)で、以下の行を次のように追加します。
sudo sh -c "echo \<h1\>Hostname: webserver01 \(192.168.205.16\)\<\/h1\> >> /var/www/index.html"
インスタンス3-Webサーバー2(IP- 192.168.205.17のwebserver02)で、以下の行を次のように追加します。
sudo sh -c "echo \<h1\>Hostname: webserver02 \(192.168.205.17\)\<\/h1\> >> /var/www/index.html"
次に、ローカルマシンでWebブラウザを開き、haproxy IP、つまりhttp://192.168.205.15
を参照します。タブを更新するたびに、負荷が各Webサーバーに分散されていることがわかります。以下は私のブラウザのスクリーンショットです:
http://192.168.205.15に初めてアクセスすると、次のようになります。
そして、2回目、つまりページを更新すると、次のようになります。
http://192.168.205.15/haproxy?stats
にアクセスして、haproxyの統計を確認することもできます。この設定でできることは他にもあります。いくつかのアイデアが含まれます:
- 一方または両方のWebサーバーをオフラインにして、HAProxyにアクセスしたときに何が起こるかをテストします
- カスタムメンテナンスページを提供するようにHAProxyを設定する
- HAProxy統計を視覚的に監視できるようにWebインターフェイスを構成します
- スケジューラをラウンドロビン以外のものに変更します
- 特定のサーバーの優先順位付け/重みを構成する
それだけです!