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

Ubuntu16.04でHAProxyをセットアップする方法

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を設定して、単一のロードバランサーの障害から保護することで、高可用性を向上させることができます。


Ubuntu
  1. Ubuntu18.04LTSでRsyslogサーバーをセットアップする方法

  2. Ubuntu20.04でMariaDBGaleraクラスターをセットアップする方法

  3. Ubuntu18.04および16.04LTSでElasticsearchをセットアップする方法

  1. Ubuntu20.04でOpenVPNサーバーをセットアップする方法

  2. Ubuntu18.04でUFWファイアウォールを設定する方法

  3. Ubuntu 20.04でRsyslogサーバーをセットアップする-その方法は?

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

  2. Ubuntu18.04でRiakKVデータベースクラスターをセットアップする方法

  3. Ubuntu18.04でOdooOpenERPをセットアップする方法