GNU/Linux >> Linux の 問題 >  >> Ubuntu

Ubuntu14.04でのHAProxyを使用したWebサーバーの負荷分散

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インターフェイスを構成します
  • スケジューラをラウンドロビン以外のものに変更します
  • 特定のサーバーの優先順位付け/重みを構成する

それだけです!


Ubuntu
  1. Ubuntu14.04でのサーバーの初期設定

  2. Ubuntu11.04にPHP5とMySQLを使用してCherokeeWebサーバーをインストールする方法

  3. Ubuntu Webサーバーをセットアップしますか?

  1. Debian 9 /Ubuntu16.04サーバーでHAProxyを設定する方法

  2. Ubuntu16.04にPHP-FPMを使用してCaddyWebサーバーをインストールする方法

  3. Ubuntu12.10にApacheWebサーバーをインストールします

  1. Ubuntu16.04でのShinkenによるサーバー監視

  2. Ubuntu16.04でのOpenNMSによるサーバー監視

  3. Ubuntu20.04にOpenLiteSpeedWebサーバーをインストールする方法