ロードバランサーを適切に設定すると、Webサーバーがクラッシュすることなく、大量のトラフィックをスムーズに処理できるようになります。
負荷分散は、ワークロードを複数のサーバーに分散するプロセスです。これは、会社の日勤労働者と夜勤労働者の間でワークロードを分散するようなものです。負荷分散により、単一障害点を克服するため、サーバーの信頼性が向上します。
負荷分散のないサーバーの例を以下に示します。
この例では、Webサーバーがダウンすると、ユーザーのWebリクエストにリアルタイムでアクセスできなくなります。また、多数のユーザーが同時に同じWebページを要求する場合、単一のWebサーバーでユーザーのWeb要求を処理するのは遅いプロセスになる可能性があります。したがって、ロードバランサーは、サーバーのパフォーマンスを強化し、バックアップを提供し、障害を防ぐために使用されます。
このチュートリアルでは、Nginx、HAProxy、Keepalivedを使用してWebサーバーのロードバランサーを設定します。
ロードバランサーを備えたサーバーの例を以下に示します。
では、Nginx、Haproxy、Keepalivedとは何ですか?
Nginx
Nginxは、Engine-xと発音され、オープンソースのWebサーバーです。 Webサーバーだけでなく、リバースプロキシサーバー、メールプロキシサーバー、ロードバランサー、軽量ファイルサーバー、HTTPキャッシュとしても機能します。 Nginxは、BitBucket、WordPress、Pinterest、Quora、GoDaddyなどの多くの人気サイトで使用されています。
HAProxy
HAProxyはHighAvailabilityProxyの略です。これは、TCPおよびHTTPベースのアプリケーションに負荷分散、高可用性、およびプロキシソリューションを提供するオープンソースのロードバランサーです。サーバーのパフォーマンスと信頼性を向上させるために、複数のサーバーにワークロードを分散するのに最適です。
Haproxyの機能は、エンドユーザーから利用可能なWebサーバーの1つにWeb要求を転送することです。ラウンドロビン、最小接続などのさまざまな負荷分散アルゴリズムを使用できます。
HAProxyロードバランサーがダウンした場合はどうなりますか?
Keepalivedは、負荷分散と高可用性の両方をサポートするオープンソースプログラムです。これは基本的にルーティングソフトウェアであり、2種類の負荷分散を提供します。
- レイヤー4(トランスポート層)
- レイヤー7(アプリケーションレイヤー)
Keepalivedは、次の機能を実行できます。
- ヘルスチェック(サーバーが稼働しているかどうか)
- 負荷分散フェイルオーバーを処理するためにVRRP(仮想冗長ルーティングプロトコル)を実装します
キープアライブは、マスターロードバランサーとバックアップロードバランサーの間でフロートし、それらを切り替えるために使用されるフローティングIPとしてVIP(仮想IPアドレス)を使用します。マスターロードバランサーがダウンした場合、バックアップロードバランサーを使用してウェブリクエストを転送します。
Webサーバーの高可用性と負荷分散がどのように維持されるかのシミュレーションに移りましょう。
LinuxでNginx、HAProxy、Keepalivedを使用してロードバランサーを設定する
これはテストラボの実験です。つまり、開始するための単なるテストセットアップです。実サーバーに実装する場合は、微調整が必要になる場合があります。このチュートリアルは、自分で設定するために盲目的に従うのではなく、学習資料として使用してください。
このチュートリアルでは、CentOSLinuxディストリビューションを使用しました。他のLinuxディストリビューションを使用することもできますが、すべてのコマンド(特にインストールコマンド)が他のディストリビューションで機能するかどうかは保証できません。
4つのCentOSインストールシステム(このチュートリアルでは最小限のインストールで十分です)
- nginxでセットアップする2つのCentOS
- HAProxyとKeepalivedを使用してセットアップする2つのCentOS
このチュートリアルでは、例として次のIPアドレスを使用しました。これらは、システムに応じて変更できます。これらが静的IPだとは思わないでください。
Webサーバー:
- 10.13.211.169
- 10.13.211.158
LoadBalancer:
- 10.13.211.194
- 10.13.211.120
仮想IP:
- 10.13.211.10
LinuxコマンドラインでIPアドレスを簡単に取得できます。
ステップ1:Nginxを使用してWebサーバーをセットアップする
このパートでは、2つのCentOSシステムをWebサーバーとして使用します。最初にNginxをインストールする必要があります。
そのためには、nginxを含むリポジトリを追加し、そこからインストールします:
yum install epel-release
yum install nginx
nginxをインストールした後、Nginxサービスを開始します:
systemctl start nginx
起動するたびにnginxサービスを有効にする:
systemctl enable nginx
nginxサービスのステータスを確認します:
systemctl status nginx
CentOSファイアウォールによってデフォルトでブロックされているnginxのWebトラフィックを許可します。
firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd –reload
2番目のCentOSWebサーバーでも上記の手順を繰り返します。
次のステップに注意してください。
nginxのWebファイルは/usr/share/nginx/html
にあります Webサーバーを識別するためだけにindex.htmlファイルの内容を変更します。
最初のWebサーバーの場合:
echo “this is first webserver” > /usr/share/nginx/html/index.html
2番目のWebサーバーの場合:
echo “this is second webserver” > /usr/share/nginx/html/index.html
注:仮想マシンを使用している場合は、1つのシステムにNginxをインストールして構成してから、システムのクローンを作成することをお勧めします。その後、2番目のシステムで再構成できます。時間とエラーを節約します。
次に、ブラウザで次のURLにアクセスしてWebサーバーのステータスを確認します:http://SERVER_DOMAIN_NAMEまたはLocal_IP_Address。ここでの例:
http://10.13.211.169
または、ターミナルでLocal_IP_Addressをカールします。ここでの例:
curl 10.13.211.169
次のような出力が得られます:
ステップ2:HAProxyを使用してロードバランサーを設定する
他の2つのシステムでは、次のコマンドを使用してHAProxyをインストールします。
yum -y update
yum -y install haproxy
HAProxy設定ファイルは/etc/haproxyにあります。 cdコマンドを使用してディレクトリに移動し、編集する前にファイルをバックアップします。
cd /etc/haproxy/
mv haproxy.cfg haproxy.cfg_bac
新しいhaproxy.cfgファイルを作成し、任意のエディターでファイルを開きます。
touch haproxy.cfg
vim haproxy.cfg
次に、次の行をファイルに貼り付けます。
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
#---------------------------------
frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back
#round robin balancing backend http
#-----------------------------------
backend http_back
balance roundrobin
#balance leastconn
mode http
server webserver1 10.13.211.169:80 check # ip_address_of_1st_centos_webserver
server webserver2 10.13.211.158:80 check # ip_address_of_2nd_centos_webserver
次に、HAProxyサービスを有効にして開始します。
systemctl enable haproxy
systemctl start haproxy
HAProxyのステータスを確認します:
systemctl status haproxy
ブラウザのURLに移動して、haproxyのサービスを確認します:http:// load balancer’s IP Address / haproxy?stats。ここで使用される例:
http://10.13.211.194/haproxy?stats
または、ターミナルでコマンド$ curl LoadBalancer_IP_Address
を使用しますcurl 10.13.211.194
curl 10.13.211.194
curlを2回実行すると、curlコマンドの出力が異なります。これは、ロードバランサーでのリクエストに対して、さまざまなWebサーバーから(一度に1つずつ)応答が送信されるためです。
出力は次のようになります:
ステップ3:Keepalivedを使用して高可用性を設定する
Keepalivedは、両方のHAProxyロードバランサーCentOSシステム(上記で構成したばかり)にインストールする必要があります。 1つはマスター(メインロードバランサー)として機能し、もう1つはバックアップロードバランサーとして機能します。
両方のシステムで、次のコマンドを実行します。
yum install -y keepalived
Keepalivedの構成ファイルは、/etc/keepalived/keepalived.conf
にあります。 。元のkeepalived.confファイルをバックアップし、新しいkeepalived.confファイルで次の構成を使用します。
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf_bac
touch /etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf
次の行を構成ファイルに貼り付けます(メールアドレスを変更することを忘れないでください):
global_defs {
notification_email {
linuxhandbook.com
[email protected]
}
notification_email_from [email protected]
smtp_server 10.13.211.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface eth0 #put your interface name here. [to see interface name: $ ip a ]
virtual_router_id 51
priority 101 # 101 for master. 100 for backup. [priority of master> priority of backup]
advert_int 1
authentication {
auth_type PASS
auth_pass 1111 #password
}
virtual_ipaddress {
10.13.211.10 # use the virtual ip address.
}
}
注:仮想IPは、ネットワーク内の任意のライブIPにすることができます。ロードバランサーのIPアドレスの範囲に近い。ここで、ロードバランサーのIPは10.13.211.194と10.13.211.120であり、VIPは10.13.211.10です
システムの想定に従って構成ファイルを編集します。マスターとバックアップの構成に注意してください。ファイルを保存し、Keepalivedプロセスを開始して有効にします。
systemctl start keepalived
systemctl enable keepalived
キープアライブのステータスを表示するには:
systemctl status keepalived
注:仮想マシンを使用している場合は、HaproxyとKeepalivedを1つのシステムにインストールして構成してから、システムのクローンを作成することをお勧めします。その後、2番目のシステムで再構成できます。時間とエラーを節約します。
次に、高可用性ロードバランサーのステータスを確認するには、ターミナルに移動して次のボタンを押します。
$ while true; do ; curl 10.13.211.10 ; sleep 1; done;
ctrl+c
を押します ターミナルの実行を停止します。
出力は次のようになります:
ファイルのインストールと構成に不快感を感じる場合は、GitHubリポジトリからスクリプトをダウンロードして、実行するだけです。
このチュートリアルが、高可用性を備えたLinuxでのロードバランサーのセットアップに役立つことを願っています。もちろん、これは単純なセットアップでしたが、負荷分散と高可用性の処理についてのアイデアを確実に提供します。
質問や提案がある場合は、下にコメントを残してください。
作成者 :Rishi Raj Gautamは、Linux愛好家であり、オープンソースの活動家です。