HAProxyは、TCPおよびHTTPベースのネットワークアプリケーション向けのオープンソースの高可用性負荷分散およびプロキシサービスツールです。使いやすく、大量のWebサイトに適しており、既存のアーキテクチャにシームレスに統合できます。透過的な接続、サーバーのオフロード、ポリシーの適用、プロキシサービスの主要な機能とは別に接続の制限を提供します。この記事では、Ubuntu16.04でhaproxyをセットアップする方法について説明します。
1。ネットワークのセットアップ
Apache2で実行される3つのWebサーバーと、ネットワーク内の3つのWebサービスのすべての要求/応答をプロキシする1つのHAPROXYサーバーを追加します。
以下に、ネットワーク内のWebサーバーの詳細を示します。
Server 1: site1.local 10.0.1.116
Server 2: site2.local 10.0.1.117
Server 3: site3.local 10.0.1.119
HAProxyサーバー:
load-balancer.local 10.0.1.118
また、パブリックドメインからアクセスできるように、1つのパブリックIPをload-balancer.localにアタッチします(オプション)。パブリックドメインからアクセスしたくない場合は、ネットワーク内のプロキシサーバーにアクセスすることを前提として、パブリックIPの接続をスキップできます。
2。ホスト名を構成する
ロードバランサーとWebサーバーに(IPADDRESSではなく)名前でアクセスするため、3つのWebサーバーと1つのプロキシサーバーのホスト名を設定します。 3つのWebサーバーとプロキシサーバーのホスト名を、それぞれsite1.local、site2.local、site3.local、load-balancer.localとして設定します。
/ etc/hostsおよび/etc/ hostname
でsite1.localとして10.0.1.116のホスト名を設定しますroot@site1:~# vi /etc/hosts
127.0.0.1 localhost
10.0.1.116 site1.local
root@site1:~# vi /etc/hostname
site1.local
ネットワークを再起動します
root@site1:~# service networking restart
apacheをインストールして有効にします。
root@site1:~# apt-get install apache2
root@site1:~# service apache2 enable
root@site1:~# service apache2 start
site1.localのインデックスファイルを作成します
root@site1:~# vi /var/www/html/index.html
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.116 </h1>
</body>
</html>
http
のファイアウォールルールを追加します# ufw allow 80/tcp
# ufw reload
次に、site1にアクセスできるかどうかを確認します
root@site1:~# curl -I site1.local
HTTP/1.1 200 OK
Date: Sun, 14 Aug 2016 14:30:29 GMT
Server: Apache/2.4.18 (Ubuntu)
Last-Modified: Sun, 14 Aug 2016 03:50:35 GMT
ETag: "ec-53a0004a26c6d"
Accept-Ranges: bytes
Content-Length: 236
Vary: Accept-Encoding
Content-Type: text/html
または
root@site1:~# curl site1.local
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.116 </h1>
</body>
</html>
site2(10.0.1.117)とsite3(10.0.1.119)に対して手順2を繰り返します。
プロキシサーバーで、独自のホスト名とは別に、3つすべてのWebサーバーエントリ(IPADDRESS HOSTNAME)をload-balancer.local
として追加します。root@load-balancer:~# vi /etc/hosts
127.0.0.1 localhost
10.0.1.118 load-balancer.local
10.0.1.116 site1.local
10.0.1.117 site2.local
10.0.1.119 site3.local
プロキシサーバーのホスト名を設定する
root@load-balancer:~# vi /etc/hostname
load-balancer.local
3。 HAProxyをインストールする
インストールする前に、Ubuntuを更新してください。 rootとして、またはsudoを使用してubuntuを更新するには、次のコマンドを実行します。
root@load-balancer:~# apt-get update
次に、システム上のパッケージを更新します。
root@load-balancer:~# apt-get upgrade
ターミナルで次のコマンドを実行してインストールします。
root@load-balancer:~# apt-get install haproxy
サービスをデーモンとして有効にするには、/ etc / defaults / haproxyを編集して、次の行を追加します。
ENABLED =1
root@load-balancer:~# vi /etc/defaults/haproxy
ENABLED=1
# Add extra flags here
#EXTRAOPTS="-de -m 16"
サービスを開始する
root@load-balancer:~# service haproxy start
4。 HAProxyを構成する
/etc/haproxy/haproxy.cfgにある構成ファイルには、グローバルとプロキシの2つの部分があります。グローバルセクションはプロセス全体のパラメータを設定し、プロキシセクションはデフォルト、リッスン、フロントエンド、バックエンドの各セクションで構成されます。
テキストエディタviで構成ファイルを編集します
root@load-balancer:~# vi /etc/haproxy/haproxy.cfg
デフォルトの構成ファイルは次のようになります。グローバルセクションとデフォルトセクションはそのままにします。
グローバルセクション
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
# Default ciphers to use on SSL-enabled listening sockets.
# For more information, see ciphers(1SSL). This list is from:
# https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH
+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
ssl-default-bind-options no-sslv3
デフォルトセクション
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
リスナーの追加:
「フロントエンド」セクションでは、クライアント接続を受け入れる一連のリスニングソケットについて説明します。フロントエンドは、リクエストを処理してバックエンドサーバーに送信する方法を定義します。
frontend Local_Server
bind 10.0.1.118:80
mode http
default_backend My_Web_Servers
バックエンドWebサーバーの追加:
「バックエンド」セクションでは、プロキシが接続して着信接続を転送するサーバーのセットについて説明します。上記の構成に従って、ロードバランサーはポート80でリッスンしています。次に、リクエストを送信するバックエンドWebサーバーを定義します。
backend My_Web_Servers
mode http
balance roundrobin
option forwardfor
http-request set-header X-Forwarded-Port %[dst_port]
http-request add-header X-Forwarded-Proto https if { ssl_fc }
option httpchk HEAD / HTTP/1.1rnHost:localhost
server site1.local 10.0.1.116:80
server site2.local 10.0.1.117:80
server site3.local 10.0.1.119:80
上記の3行の最後に「チェック」パラメータを追加して、Webサーバーのヘルスパラメータをチェックできます。
要件に応じて、他のバランシングアルゴリズムを使用できます。
Leastconn
接続数が最も少ないサーバーを選択します。セッションが長い場合に推奨されます。同じバックエンド内のサーバーもラウンドロビン方式でローテーションされます。
ソース
これにより、送信元IPのハッシュ(ユーザーのIPアドレス)に基づいて使用するサーバーが選択されます。これは、ユーザーが同じサーバーに接続することを保証する1つの方法です。
統計を有効にする(オプション)
必要に応じて、構成ファイルに以下を追加して統計を有効にできます。
listen stats
bind :9000
stats enable
stats hide-version
stats refresh 20s
stats show-node
stats uri /stats
5。 HAProxyを再起動します
プロキシサーバーに必要なすべての構成が完了したので、次のコマンドを使用してサービスを再起動する前に、構成ファイルを確認してください。
root@load-balancer:~# haproxy -c -f /etc/haproxy/haproxy.cfg
上記のコマンドが「構成ファイルが有効です」として出力を返した場合は、HAProxyサービスを再起動します
root@load-balancer:~# service haproxy restart
次に、HAProxyサーバーのステータスを確認します。
root@load-balancer:~# service haproxy status
6。 HAProxyをテストする
テストする前に、load-balancer.localからWebサーバー(site1.local、site2.local、site3.local)にpingできることを確認してください
root@load-balancer:~# ping site1.local
PING site1.local (10.0.1.116) 56(84) bytes of data.
64 bytes from site1.local (10.0.1.116): icmp_seq=1 ttl=64 time=0.906 ms
64 bytes from site1.local (10.0.1.116): icmp_seq=2 ttl=64 time=0.906 ms
64 bytes from site1.local (10.0.1.116): icmp_seq=3 ttl=64 time=0.648 ms
root@load-balancer:~# ping site2.local
PING site2.local (10.0.1.117) 56(84) bytes of data.
64 bytes from site2.local (10.0.1.117): icmp_seq=1 ttl=64 time=3.02 ms
64 bytes from site2.local (10.0.1.117): icmp_seq=2 ttl=64 time=0.687 ms
64 bytes from site2.local (10.0.1.117): icmp_seq=3 ttl=64 time=0.778 ms
root@load-balancer:~# ping site3.local
PING site3.local (10.0.1.119) 56(84) bytes of data.
64 bytes from site3.local (10.0.1.119): icmp_seq=1 ttl=64 time=0.830 ms
64 bytes from site3.local (10.0.1.119): icmp_seq=2 ttl=64 time=0.631 ms
64 bytes from site3.local (10.0.1.119): icmp_seq=3 ttl=64 time=0.771 ms
CURLを使用してHAPROXYをテストする
ターミナルから次のスクリプトをテスト実行すると、ロードバランサーがラウンドロビン方式で3つのWebサーバーにリクエストを送信していることがわかります。
root@load-balancer:~# while true; do curl http://10.0.1.118; sleep 1; done
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.119 </h1>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.116 </h1>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.117 </h1>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.119 </h1>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.116 </h1>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.117 </h1>
</body>
</html>
...............................
...............................
...............................
ブラウザでテストする:
ブラウザでhttp://load-balancer.localまたはhttp:// Server-Public-IPを指定すると、3つのWebサーバーからラウンドロビン方式で応答が返され、期待どおりに機能していることが確認されます。更新するたびに、プロキシサーバーはバックエンドWebサーバーに1つずつリクエストを送信します。
構成ファイルの最後のセクションで構成されている統計URLにアクセスして、ポートがトラフィック用に開かれていることを確認することもできます。ポート9000でパブリックIPまたはhttp://load-balancer.localに移動するだけです。
たとえば、http://load-balancer.local:9000 / stats
に移動します
HATOPを使用して端末からサーバーの状態を監視することもできます。 HATOPは、ロードバランサーによって作成されたソケットファイルから統計を抽出するサードパーティツールです。端末から次のコマンドを実行してHATOPをインストールします。
root@load-balancer:~# apt-get install hatop
通常、HATOPを実行するときは、コマンドsudo hatop-s/var/run/haproxy.sockで-sパラメータを使用する必要があります。 HATOPを呼び出すときに-sパラメータを入力する必要がないように、〜/.bashrcファイルに次の行を挿入できます。
unix-socket =/ var / run / haproxy.sock
をエクスポートします7。 HAProxyのロギング
/etc/rsyslog.d/haproxy.confを編集して、次の行を追加します。
local0.* -/var/log/haproxy_0.log
local1.* -/var/log/haproxy_1.log
rsyslogを再起動します
root@load-balancer:~# service rsyslog restart
次のコマンドを使用してログを確認します
root@load-balancer:~# tail -f /var/log/haproxy*.log
また、詳細ログ用の構成ファイルのグローバルセクションに「debug」という行を追加します。
結論
HAProxyを使用すると、Webアプリケーションのパフォーマンスと可用性を向上させることができます。このチュートリアルは、このチュートリアルで説明されている以上のことを実行できますが、負荷分散の概要にすぎません。複数のロードバランサー間にフローティングIPを設定して、単一のロードバランサーの障害から保護することで、高可用性を向上させることができます。