HAProxyまたは高可用性プロキシは、オープンソースのTCPおよびHTTPロードバランサーおよびプロキシサーバーソフトウェアです。 HAProxyはCでWillyTarreauによって作成されており、SSL、圧縮、キープアライブ、カスタムログ形式、およびヘッダーの書き換えをサポートしています。 HAProxyは、メモリフットプリントが小さく、CPU使用率が低い、高速で軽量のプロキシサーバーおよびロードバランサーです。 Github、StackOverflow、Reddit、Tumblr、Twitterなどの大規模なサイトで使用されています。過去数年間で最も人気のあるソフトウェアロードバランサーおよびプロキシサーバーになりました。
このチュートリアルでは、3台のサーバー、1台のロードバランサー、および2台のNginxWebサーバーのHAProxyのインストールと構成について説明します。単一のサーバーにHAProxyをインストールしてから、他のサーバーにNginxWebサーバーをインストールします。 HAProxyは、NginxWebサーバーのロードバランサーとして機能します。
HAProxyの基本概念
HAProxyは、TCPモードのレイヤー4とHTTPモードのレイヤー7の2つのモードで実行できます。レイヤー4 TCPモードでは、HAProxyはRAWTCPパケットをクライアントからアプリケーションサーバーに転送します。レイヤー7HTTPモードでは、HAProxyはHTTPヘッダーを解析してからアプリケーションサーバーに転送します。このチュートリアルでは、レイヤー7HTTPモードのみをサポートするWebサーバーとしてNginxを使用します。
これは、負荷分散を行うときにサーバーを選択するためにHAProxyによって使用されるアルゴリズムです。次のモードを使用できます。
ラウンドロビン
これは最も単純なバランスアルゴリズムです。新しい接続ごとに、次のバックエンドサーバーによって処理されます。リストの最後のバックエンドサーバーに到達すると、バックエンドリストの先頭から再起動します。
ラストコン
新しい接続は、接続数が最も少ないバックエンドサーバーによって処理されます。これは、リクエストの時間と負荷が大きく異なる場合に役立ちます。
ソース
これはスティッキーセッション用です。クライアントIPはハッシュされ、このIPから最後のリクエストを受信したバックエンドサーバーを判別します。したがって、IP Aは常にバックエンド1によって処理され、IPBはセッションを中断しないように常にbanckend2によって処理されます
oその他のアルゴリズムがあります。詳細については、公式のHAProxyサイトを確認してください。
- 3 CentOS 7
ロードバランサー
192.168.1.102
nginx1
192.168.1.104
nginx2
192.168.1.105
- 3台すべてのサーバーでのルート権限。
ロードバランサーサーバーにログインし、/ etc/hostsファイルを編集します。
ssh[メール保護]
sudo su
vi / etc / hosts
nginx1およびnginx2のホスト名を追加します:
192.168.1.104 nginx1.loadbalancer.me nginx1
192.168.1.105 nginx2.loadbalancer.me nginx2
ファイルを保存してエディタを終了します。
次に、Nginxサーバー(nginx1およびnginx2)のhostsファイルを編集します。
ssh[メール保護]
ssh[メール保護]
ホストファイルのロードバランサーの新しい行を編集して追加します:
vi / etc / host
各nginxサーバーにロードバランサーのホスト名を追加します:
192.168.1.102ロードバランサー
nginx1およびnginx2サーバーでこれを実行します。
HAProxyはCentOS7リポジトリで利用可能であり、ロードバランサーサーバーにログインして、パッケージリストを更新します。
ssh[メール保護]
yum -y update
次に、次のyumコマンドを使用してHAProxyをインストールします。
yum -y install haproxy
インストールが完了したら、「/ etc / haproxy /」ディレクトリに移動し、元の構成ファイルをバックアップします。
cd / etc / haproxy /
mv haproxy.cfg haproxy.cfg.orig
次に、viエディターを使用して新しいHAProxy構成ファイル「haproxy.cfg」ファイルを追加します。
vi haproxy.cfg
以下に設定を貼り付けます:
#---------------------------------------------- -----------------------
#グローバル設定
#--------------- -------------------------------------------------- ----
global
log 127.0.0.1 local2 #Log configuration
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
ユーザーhaproxy#Haproxyがユーザーおよびグループ「haproxy」の下で実行されている
グループ統計ソケット/var/ lib / haproxy / stats
#------------------------------- --------------------------------------
#すべての'がリッスンする一般的なデフォルト'および'backend'セクションは
#ブロックで指定されていない場合に使用されます
#-------------------------- -------------------------------------------
デフォルト
モードhttp
ロググローバル
オプションhttplog
オプションdontlognull
オプションhttp-server-close
オプションforwardfor127.0.0.0/8
オプションhttp
タイムアウトキュー1m
タイムアウト接続10秒
タイムアウトクライアント1m
タイムアウトサーバー1m
タイムアウトhttp-keep-alive10s
#--------------------------------------- ------------------------------
#HAProxy Monitoring Config
#------- -------------------------------------------------- ------------
listen haproxy3-monitoring *:8080#HaproxyMonitoringはポート8080で実行されます
モードhttp
オプションforwardfor
オプションhttpclose
stats enable
stats show-legends
stats refresh 5s
stats uri / stats #UR LforHAProxyモニタリング
statsrealm Haproxy \ Statistics
stats auth howtoforge:howtoforge#モニタリングダッシュボードにログインするためのユーザーとパスワード
stats admin if TRUE
default_backend app-main#オプションでバックエンドを監視するためのものです
#------------------------------------ ---------------------------------
#フロントエンド構成
#----- -------------------------------------------------- --------------
frontend main
bind *:80
option http-server-close
option forwardfor
default_backend app -メイン
#------------------------------------------------------- ------------------------------
#バランスアルゴリズムとしてのバックエンドラウンドロビン
#----- -------------------------------------------------- --------------
バックエンドアプリ-メイン
バランスラウンドロビン#バランスアルゴリズム
オプションhttpchk HEAD / HTTP / 1.1 \ r \ nホスト:\ localhost# Chサーバーアプリケーションが稼働していることを確認します-200ステータスコード
servernginx1 192.168.1.104:80 check#Nginx1
server nginx2 192.168.1.105:80 check pre> #Nginx構成ファイルを保存して終了します。
次に、HAProxyのrsyslogを構成します。
HAProxy統計をログに記録するようにrsyslogデーモンを構成します。 rsyslog.confファイルを編集して、UDPポート514をrsyslogで使用できるようにします。
vi /etc/rsyslog.confこの行のコメントを解除して、UDP接続を有効にします。
$ ModLoad imudp
$ UDPServerRun 514特定のIPを使用する場合は、次のような新しい行を追加できます。
$ UDPServerAddress 127.0.0.1ファイルを保存して終了します。
次に、rsyslogの新しいhaproxy構成ファイルを作成します。
cd /etc/rsyslog.d/
vi haproxy.conf以下に構成を貼り付けます:
local2。=info/var/log/haproxy-access.log#アクセスログの場合
local2.notice /var/log/haproxy-info.log#サービス情報の場合-バックエンド、ロードバランサー保存して終了します。
次に、rsyslogを再起動してから、haproxyを起動します。
systemctl restart rsyslog
systemctl start haproxy起動時に開始するhaproxyを追加します:
systemctl enable haproxy
ステップ3-Nginxをインストールして構成する このセクションでは、nginx1およびnginx2サーバーのepelリポジトリからNginxをインストールします。
サーバーにログインします:
ssh[メール保護]
ssh[メール保護]以下のyumコマンドを使用してepelリポジトリをインストールします。
yum -y install epel-releaseこれで、Nginxをインストールできます:
yum -y install nginxNginxがインストールされています。 Webディレクトリに移動し、インデックスファイルを変更して、2つのサーバーのどちらがhtmlファイルを配信したかを確認します。
cd / usr / share / nginx / html /
echo "nginx1.loadbalance.me
"> index.html#nginx1サーバーの場合
echo "nginx2 .loadbalance.me
"> index.html#nginx2サーバーの場合次に、Nginxを追加して起動時に開始し、次に開始します:
systemctl enable nginx
systemctl start nginxnginx1およびnginx2サーバーでこの手順を実行していることを確認してください。
ステップ4-テスト ロードバランサーIPにアクセスしてブラウザーからテストする: 192.168.1.102
![]()
![]()
curlコマンドを使用したテスト:
curl 192.168.1.102
![]()
ユーザー名とパスワード「howtoforge」を使用してポート8080で実行されているHAProxyWebモニタリングにログインするためのテスト:
http://192.168.1.102:8080/stats
![]()
HAProxyは正常に機能しており、2つのNginxウェブサーバーのロードバランサーとして機能します。
結論 HAProxyまたは高可用性プロキシは、TCPベースのサービスに高可用性を提供するオープンソースソフトウェアであり、HTTPロードバランサーおよびプロキシサーバーとして動作します。このソフトウェアはCで記述されており、SSL、キープアライブ、および圧縮をサポートしています。 HAProxyは、メモリフットプリントが小さく、CPU使用率が低く、高速で軽量なロードバランサーとプロキシサーバーを必要とするすべての人に最適です。 Haproxyは、レイヤー4TCPモードとレイヤー7HTTPモードで実行できます。 Nginxは、HAProxyを使用したレイヤー7HTTPモードのみをサポートします。レイヤー4TCPモードを使用する場合は、apacheなどの他のWebサーバーを使用できます。 CentOS 7では、HAProxyはデフォルトのリポジトリで利用できます。インストールと構成は簡単です。
Cent OS