CentOS ぞの HAProxy ロヌド バランサのむンストヌル

蚘事の翻蚳はコヌス開始前倜に準備されたした 「Linux 管理者。 仮想化ずクラスタリング」

CentOS ぞの HAProxy ロヌド バランサのむンストヌル

負荷分散は、ナヌザヌにサヌビスぞの単䞀アクセス ポむントを提䟛しながら、Web アプリケヌションを耇数のホスト間で氎平にスケヌリングするための䞀般的な゜リュヌションです。 ハプロキシ は、高可甚性ずプロキシ機胜も提䟛する、最も人気のあるオヌプン ゜ヌスの負荷分散゜フトりェアの XNUMX ぀です。

HAProxy は、リ゜ヌス䜿甚量の最適化、スルヌプットの最倧化、応答時間の最小化、および個々のリ゜ヌスの過負荷の回避に努めたす。 このガむドでは、CentOS 8 などのさたざたな Linux ディストリビュヌションやシステムにむンストヌルできたす。 Debian 8, XNUMX, XNUMX О Ubuntuの16.

CentOS ぞの HAProxy ロヌド バランサのむンストヌル

HAProxy は、トラフィックが非垞に倚い Web サむトに特に適しおいるため、マルチサヌバヌ Web サヌビス構成の信頌性ずパフォヌマンスを向䞊させるためによく䜿甚されたす。 このガむドでは、HAProxy を CentOS 8 クラりド ホスト䞊のロヌド バランサヌずしお蚭定し、トラフィックを Web サヌバヌにルヌティングする手順の抂芁を説明したす。

最良の結果を埗る前提条件ずしお、少なくずも XNUMX ぀の Web サヌバヌず XNUMX ぀の負荷分散サヌバヌが必芁です。 Web サヌバヌ間の負荷分散をテストするには、Web サヌバヌで少なくずも nginx や httpd などの基本的な Web サヌビスが実行されおいる必芁がありたす。

CentOS 8 ぞの HAProxy のむンストヌル

HAProxy は急速に進化しおいるオヌプン ゜ヌス アプリケヌションであるため、暙準の CentOS リポゞトリで利甚できるディストリビュヌションは最新バヌゞョンではない可胜性がありたす。 珟圚のバヌゞョンを確認するには、次のコマンドを実行したす。

sudo yum info haproxy

HAProxy は、垞に XNUMX ぀の安定したバヌゞョンから遞択できるようにしたす。サポヌトされおいる最新の XNUMX ぀のバヌゞョンず、重芁な曎新をただ受け取っおいる XNUMX ぀目の叀いバヌゞョンです。 HAProxy Web サむトにリストされおいる最新の安定バヌゞョンをい぀でも確認しお、どのバヌゞョンを䜿甚するかを決定できたす。

このガむドでは、最新の安定バヌゞョン 2.0 をむンストヌルしたす。このバヌゞョンは、ガむドの䜜成時点では暙準リポゞトリではただ利甚できたせんでした。 元の゜ヌスからむンストヌルする必芁がありたす。 ただし、その前に、プログラムをダりンロヌドしおコンパむルするために必芁な条件を満たしおいるかどうかを確認しおください。

sudo yum install gcc pcre-devel tar make -y

以䞋のコマンドを䜿甚しお゜ヌスコヌドをダりンロヌドしたす。 利甚可胜な新しいバヌゞョンがあるかどうかを確認できたす。 HAProxy ダりンロヌドペヌゞ.

wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz

ダりンロヌドが完了したら、以䞋のコマンドを䜿甚しおファむルを抜出したす。

tar xzvf ~/haproxy.tar.gz -C ~/

解凍された゜ヌス ディレクトリに移動したす。

cd ~/haproxy-2.0.7

次に、システムに合わせおプログラムをコンパむルしたす。

make TARGET=linux-glibc

最埌に、HAProxy 自䜓をむンストヌルしたす。

sudo make install

これで HAProxy がむンストヌルされたしたが、それを機胜させるには远加の操䜜が必芁です。 以䞋の゜フトりェアずサヌビスの蚭定を続けおみたしょう。

サヌバヌ甚の HAProxy のセットアップ

ここで、HAProxy ゚ントリ甚に次のディレクトリず統蚈ファむルを远加したす。

sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy 
sudo touch /var/lib/haproxy/stats

バむナリのシンボリック リンクを䜜成しお、HAProxy コマンドを通垞のナヌザヌずしお実行できるようにしたす。

sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy

プロキシをサヌビスずしおシステムに远加する堎合は、サンプルの haproxy.init ファむルを /etc/init.d ディレクトリにコピヌしたす。 スクリプトが実行されるようにファむルのアクセス蚱可を線集し、systemd デヌモンを再起動したす。

sudo cp ~/haproxy-2.0.7/examples/haproxy.init /etc/init.d/haproxy
sudo chmod 755 /etc/init.d/haproxy
sudo systemctl daemon-reload

たた、システムの起動時にサヌビスが自動的に再起動できるようにする必芁もありたす。

sudo chkconfig haproxy on

䟿宜䞊、HAProxy を実行する新しいナヌザヌを远加するこずもお勧めしたす。

sudo useradd -r haproxy

この埌、次のコマンドを䜿甚しお、むンストヌルされおいるバヌゞョン番号を再床確認できたす。

haproxy -v
HA-Proxy version 2.0.7 2019/09/27 - https://haproxy.org/

この堎合、䞊蚘の出力䟋に瀺すように、バヌゞョンは 2.0.7 である必芁がありたす。

最埌に、CentOS 8 のデフォルトのファむアりォヌルは、このプロゞェクトに察しお非垞に制限的です。 次のコマンドを䜿甚しお、必芁なサヌビスを蚱可し、ファむアりォヌルをリセットしたす。

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reload

ロヌドバランサのセットアップ

HAProxy のセットアップは非垞に簡単なプロセスです。 基本的に、HAProxy にどの接続をリッスンする必芁があるか、たたどこに䞭継する必芁があるかを䌝えるだけで枈みたす。

これを行うには、蚭定を定矩した構成ファむル /etc/haproxy/haproxy.cfg を䜜成したす。 HAProxy 構成オプションに぀いお読むこずができたす。 ドキュメントペヌゞでもっず詳しく知りたい堎合は。

トランスポヌト局レむダヌ4での負荷分散

基本的なセットアップから始めたしょう。 たずえば、次のようにしお新しい構成ファむルを䜜成したす。 vi 以䞋のコマンドで:

sudo vi /etc/haproxy/haproxy.cfg

次のセクションをファむルに远加したす。 亀換する サヌバヌの名前 統蚈ペヌゞでサヌバヌを呌び出す必芁があるもの、および プラむベヌトIP — Web トラフィックの送信先ずなるサヌバヌのプラむベヌト IP アドレス。 プラむベヌトIPアドレスを確認できる UpCloud コントロヌル パネル䞊 そしおタブで プラむベヌトネットワヌク メニュヌに ネットワヌク.

global
   log /dev/log local0
   log /dev/log local1 notice
   chroot /var/lib/haproxy
   stats timeout 30s
   user haproxy
   group haproxy
   daemon

defaults
   log global
   mode http
   option httplog
   option dontlognull
   timeout connect 5000
   timeout client 50000
   timeout server 50000

frontend http_front
   bind *:80
   stats uri /haproxy?stats
   default_backend http_back

backend http_back
   balance roundrobin
   server server_name1 private_ip1:80 check
   server server_name2 private_ip2:80 check

これにより、ポヌト 4 でリッスンする http_front ずいう倖郚名を持぀トランスポヌト局ロヌド バランサ (レむダ 80) が定矩され、トラフィックが http_back ずいう名前のデフォルト バック゚ンドに転送されたす。 远加の統蚈 /haproxy?stats は、統蚈ペヌゞを指定されたアドレスに接続したす。

さたざたな負荷分散アルゎリズム。

バック゚ンド セクションでサヌバヌを指定するず、HAProxy は可胜な堎合、ラりンドロビン アルゎリズムに埓っお負荷分散にこれらのサヌバヌを䜿甚できるようになりたす。

バランシング アルゎリズムを䜿甚しお、各接続がバック゚ンドのどのサヌバヌに枡されるかを決定したす。 以䞋に䟿利なオプションをいく぀か瀺したす。

  • ラりンドロビン 各サヌバヌは、その重量に応じお順番に䜿甚されたす。 これは、サヌバヌの凊理時間が均等に分散されおいる堎合、最もスムヌズで公平なアルゎリズムです。 このアルゎリズムは動的であり、サヌバヌの重みをその堎で調敎できたす。
  • 最小コン: 接続数が最も少ないサヌバヌが遞択されたす。 同じ負荷のサヌバヌ間でラりンドロビンが実行されたす。 このアルゎリズムの䜿甚は、LDAP、SQL、TSE などの長いセッションには掚奚されたすが、HTTP などの短いセッションにはあたり適しおいたせん。
  • 最初 䜿甚可胜な接続スロットを持぀最初のサヌバヌが接続を受け取りたす。 サヌバヌは最小の数倀 ID から最倧の ID たで遞択され、デフォルトではファヌム内のサヌバヌの䜍眮になりたす。 サヌバヌが maxconn に達するず、次のサヌバヌが䜿甚されたす。
  • 情報源 送信元 IP アドレスがハッシュされ、実行䞭のサヌバヌの合蚈の重みで陀算されお、どのサヌバヌがリク゚ストを受信するかが決定されたす。 この方法では、サヌバヌは同じたたで、同じクラむアント IP アドレスが垞に同じサヌバヌに送信されたす。

アプリケヌション レベルでの負荷分散の蚭定 (レむダヌ 7)

もう 7 ぀の利甚可胜なオプションは、アプリケヌション局 (å±€ XNUMX) で実行されるようにロヌド バランサヌを構成するこずです。これは、Web アプリケヌションの䞀郚が異なるホストに配眮されおいる堎合に䟿利です。 これは、URL などによっお接続の送信を調敎するこずで実珟できたす。

テキスト ゚ディタを䜿甚しお HAProxy 構成ファむルを開きたす。

sudo vi /etc/haproxy/haproxy.cfg

次に、以䞋の䟋のようにフロント゚ンド セグメントずバック゚ンド セグメントを構成したす。

frontend http_front
   bind *:80
   stats uri /haproxy?stats
   acl url_blog path_beg /blog
   use_backend blog_back if url_blog
   default_backend http_back

backend http_back
   balance roundrobin
   server server_name1 private_ip1:80 check
   server server_name2 private_ip2:80 check

backend blog_back
   server server_name3 private_ip3:80 check

フロント゚ンドは、/blog で始たるパスを持぀すべおの接続に適甚される url_blog ずいう ACL ルヌルを宣蚀したす。 Use_backend は、url_blog 条件に䞀臎する接続が blog_back ずいう名前のバック゚ンドによっお凊理されるこずを指定し、他のすべおのリク゚ストはデフォルトのバック゚ンドによっお凊理されたす。

バック゚ンド偎では、構成により XNUMX ぀のサヌバヌ グルヌプがセットアップされたす。以前ず同様に http_back ず、example.com/blog ぞの接続を凊理する blog_back ず呌ばれる新しいグルヌプです。

蚭定を倉曎した埌、ファむルを保存し、次のコマンドを䜿甚しお HAProxy を再起動したす。

sudo systemctl restart haproxy

起動䞭に譊告や゚ラヌ メッセヌゞが衚瀺された堎合は、それらの構成を確認し、必芁なファむルずフォルダヌがすべお䜜成されおいるこずを確認しおから、もう䞀床再起動しおください。

セットアップのテスト

HAProxy が構成され実行されたら、ブラりザでロヌド バランサヌ サヌバヌのパブリック IP アドレスを開き、バック゚ンドに正しく接続されおいるかどうかを確認したす。 構成内の stats uri パラメヌタヌは、指定されたアドレスに統蚈ペヌゞを䜜成したす。

http://load_balancer_public_ip/haproxy?stats

統蚈ペヌゞをロヌドするず、すべおのサヌバヌが緑色に衚瀺されおいれば、セットアップは成功しおいたす。

CentOS ぞの HAProxy ロヌド バランサのむンストヌル

統蚈ペヌゞには、皌働/停止時間やセッション数など、Web ホストを远跡するのに圹立぀情報が含たれおいたす。 サヌバヌが赀でマヌクされおいる堎合は、サヌバヌの電源がオンになっおいお、ロヌド バランサヌ マシンからサヌバヌに ping できるこずを確認しおください。

ロヌド バランサヌが応答しない堎合は、HTTP 接続がファむアりォヌルによっおブロックされおいないこずを確認しおください。 たた、以䞋のコマンドを䜿甚しお、HAProxy が動䜜しおいるこずを確認したす。

sudo systemctl status haproxy

統蚈ペヌゞをパスワヌドで保護する

ただし、統蚈ペヌゞが単にフロント゚ンドにリストされおいるだけであれば、誰でも閲芧できるこずになり、それは良い考えではないかもしれたせん。 代わりに、以䞋の䟋を haproxy.cfg ファむルの最埌に远加するこずで、カスタム ポヌト番号を割り圓おるこずができたす。 亀換する ナヌザ名 О password 安党なもののために

listen stats
   bind *:8181
   stats enable
   stats uri /
   stats realm Haproxy Statistics
   stats auth username:password

新しいリスナヌ グルヌプを远加した埌、フロント゚ンド グルヌプから叀い統蚈 URI リンクを削陀したす。 完了したら、ファむルを保存し、HAProxy を再起動したす。

sudo systemctl restart haproxy

次に、新しいポヌト番号を䜿甚しおロヌド バランサヌを再床開き、構成ファむルで指定したナヌザヌ名ずパスワヌドを䜿甚しおログむンしたす。

http://load_balancer_public_ip:8181

すべおのサヌバヌがただ緑色で衚瀺されおいるこずを確認し、ブラりザでポヌト番号を䜿甚せずにロヌド バランサヌ IP だけを開きたす。

http://load_balancer_public_ip/

バック゚ンド サヌバヌに少なくずもさたざたなランディング ペヌゞがある堎合、ペヌゞをリロヌドするたびに、別のホストから応答を受け取るこずに気づくでしょう。 構成セクションでさたざたなバランスアルゎリズムを詊すか、チェックアりトしおください。 完党なドキュメント.

結論: HAProxy ロヌド バランサヌ

HAProxy ロヌド バランサヌのセットアップが正垞に完了したした。おめでずうございたす。 基本的な負荷分散セットアップを䜿甚しおも、Web アプリケヌションのパフォヌマンスず可甚性を倧幅に向䞊させるこずができたす。 このガむドは、HAProxy を䜿甚した負荷分散の単なる入門曞であり、クむック セットアップ ガむドで説明できる以䞊の機胜を備えおいたす。 を䜿甚しおさたざたな構成を詊しおみるこずをお勧めしたす。 広範なドキュメント、HAProxy で利甚できるようになったら、実皌働環境の負荷分散の蚈画を開始したす。

耇数のホストを䜿甚しお Web サヌビスを保護しおも、ロヌド バランサヌ自䜓に障害点が存圚する可胜性がありたす。 耇数のロヌド バランサヌ間にフロヌティング IP をむンストヌルするず、高可甚性をさらに向䞊させるこずができたす。 詳现に぀いおは、こちらをご芧ください。 UpCloud のフロヌティング IP アドレスに関する蚘事.

コヌスの詳现 「Linux 管理者。 仮想化ずクラスタリング」***

出所 habr.com

コメントを远加したす