最近はネットワークばかりだったので、たまにはサーバーをやってみたいと思います。去年10月に再度合格したLinuC level3 304の復習も兼ねて、以前聴いたLPIC level3のセミナーの内容を真似して簡単なHAProxyサーバーを構築してみました。
◆構成図
◆目的
・host0にWebブラウザからアクセスして、更新するごとにWeb1~2の内容に切り替わることを確認する。
・Web3の起動後、Webブラウザを更新するごとにWeb1~3の内容に切り替わることを確認する。
*大手ショッピングサイトなどでアクセス集中を分散させる為の仕組みであり、本来は全てのWebサーバーで同じ内容のWebページを作成しますが、切り替わることを視覚的に理解する為、敢えて別の内容のWebページを作成しています。
◆ロードバランサ―の設定
[root@host0 ~]# vi /etc/hosts
(以下追記)
10.0.1.254 host0
[root@host0 ~]# dnf install haproxy -y
(前略)
インストール済み:
haproxy-2.8.14-1.el9_7.1.x86_64
[root@host0 ~]# cp -p /etc/haproxy/haproxy.cfg{,.org}
[root@host0 ~]# vi /etc/haproxy/haproxy.cfg
(前略、以下を追加)
frontend host0
bind *:80
default_backend servers
backend servers
balance roundrobin #負荷分散アルゴリズム。
server web1 10.0.1.101:80 check #check→ヘルスチェック。
server web2 10.0.1.102:80 check
server web3 10.0.1.103:80 check
[root@host0 ~]# chmod 600 /etc/haproxy/haproxy.cfg
[root@host0 ~]# firewall-cmd --zone=public --add-service=http
success
[root@host0 ~]# firewall-cmd --runtime-to-permanent
success
[root@host0 ~]# systemctl enable --now haproxy.service
[root@host0 ~]# systemctl is-active haproxy.service
active
◆各Webサーバーの設定
ここではNginxをインストールします。簡単なhtmlファイルを作成し、ファイアウォールとselinuxの設定を行います。
・Web1の設定
[root@web1 ~]# dnf install -y nginx
[root@web1 ~]# cp -p /usr/share/nginx/html/index.html {,.org}
[root@web1 ~]# vi /usr/share/nginx/html/index.html
<html><body style="background-color:skyblue;">
<h1 style="coler:blue;">WEB-1</h1>
</body></html>
[root@web1 ~]# systemctl enable --now nginx.service
[root@web1 ~]# systemctl is-active nginx.service
active
[root@web1 ~]# setsebool -P httpd_can_network_connect on
[root@web1 ~]# getsebool -a | grep httpd | grep 'on$'
httpd_builtin_scripting --> on
httpd_can_network_connect --> on
httpd_enable_cgi --> on
[root@web1 ~]# firewall-cmd --add-service=http --permanent
success
[root@web1 ~]# systemctl restart firewalld.service
[root@web1 ~]# systemctl is-active firewalld.service
active
・Web2の設定
設定はWeb1と同じですが、index.htmlのみ以下に変更。
[root@web2 ~]# vi /usr/share/nginx/html/index.html
<html><body style="background-color:Red;">
<h1 style="coler:black;">WEB-2</h1>
</body></html>
・Web3の設定
この設定もWeb1と同じですが、index.htmlのみ以下に変更。
[root@web3 ~]# vi /usr/share/nginx/html/index.html
<html><body style="background-color:green;">
<h1 style="coler:red;">WEB-3</h1>
</body></html>
設定終了後、検証の為、Web3のみ一旦シャットダウンします。
[root@web3 ~]# init 0
◆検証
・負荷分散の確認
Webブラウザでhost0にアクセスします。先ずは以下の様にWeb1の内容が表示されます。
引き続き、ブラウザをF5キーで更新すると、以下の様にWeb2の内容が表示されます。
以後、ブラウザの更新をするたびに、Web1とWeb2の内容が表示されることを確認します。
今回はラウンドロビンの設定なので、クライアントからのアクセスをバックエンドサーバに順に割り振る動作をするため、Web1とWeb2で交互に表示されます。
なお、スペックが高いサーバーを優先させる時などは、以下の様にWeight(重し)パラメーターを割り振ります。
server web1 10.0.1.101:80 check weight 2 #以下のサーバの2倍
server web2 10.0.1.102:80 check weight 1
server web3 10.0.1.103:80 check weight 1
この場合、web1が優先されます。
・ヘルスチェック機能の確認
上記検証時、checkパラメーターが無いと更新時にWeb3へアクセス時にエラーになります。checkパラメーターを記述することによって、起動していないWeb3を無視して、Web1へアクセスしています。その為、Web3起動時にWeb3へアクセス出来るのか確認します。
Web3サーバーを起動し、暫く待った後に、host0にアクセスしたブラウザを更新し、Web3の内容も表示されるようになることを確認します。
Web3表示後、ブラウザを更新する度にWeb1~3が表示されることを確認します。
◆LinuC例題
・
LinuCレベル3 304試験の出題範囲「334.2 ロードバランスクラスタ」
・
LinuCレベル3 304試験の出題範囲「334.2 ロードバランスクラスタ」