こんにちは。サイオステクノロジー 小林です。
今回は haproxyとkeepalivedを組み合わせた 冗長化ロードバランサを構築するお話しです。
インストール編でhaproxyとkeepalivedの構築までをご紹介しましたが、今回はその動作確認になります。
クライアントアクセス確認
単純にクライアントからHTTPリクエストを送信するだけでは、インストール編で実施した簡易動作確認と変わらないので、今回は Apache Jmeterを使用して以下のシナリオで確認してみたいと思います。
Jmeterのスレッドグループを以下とします
- Number of Threads (users):100
- Ramp-Up Period (in seconds):10
- Loop Count:100
送信するHTTPリクエストの設定を以下とします
- Protocol:https
- Server Name:192.168.188.10
- METHOD:GET
- Path:/index.html
テスト実行
クライアント端末に導入したJmeterより、上記のスレッドグループでからトからVIPに対してHTTPリクエストを送信します。 ログ上でもリクエストが受信されていることを確認します。
【PROXY01で実施】
# tail -f /var/log/haproxy/haproxy.log 2019-06-21 16:55:42.336 haproxy[13580]: <client address>:58483 [21/Jun/2019:16:55:42.049] https-ex~ TEST-WEB/WEB03 111/0/47/49/207 200 244 - - ---- 50/49/20/7/0 0/0 "GET /index.html HTTP/1.1" 2019-06-21 16:55:42.336 haproxy[13580]: <client address>:58482 [21/Jun/2019:16:55:42.049] https-ex~ TEST-WEB/WEB02 111/0/47/49/207 200 244 - - ---- 50/49/19/7/0 0/0 "GET /index.html HTTP/1.1" 2019-06-21 16:55:42.338 haproxy[13580]: <client address>:58481 [21/Jun/2019:16:55:42.049] https-ex~ TEST-WEB/WEB01 111/0/47/49/207 200 244 - - ---- 50/49/18/7/0 0/0 "GET /index.html HTTP/1.1" 2019-06-21 16:55:42.339 haproxy[13580]: <client address>:58480 [21/Jun/2019:16:55:42.049] https-ex~ TEST-WEB/WEB03 111/0/47/49/207 200 244 - - ---- 50/49/17/6/0 0/0 "GET /index.html HTTP/1.1" 2019-06-21 16:55:42.339 haproxy[13580]: <client address>:58479 [21/Jun/2019:16:55:42.049] https-ex~ TEST-WEB/WEB02 111/0/47/49/207 200 244 - - ---- 50/49/16/6/0 0/0 "GET /index.html HTTP/1.1" ~ 略 ~
プロキシステータス確認
haproxyは、設定ファイル(haproxy.cfg)上の各セクションにて`stats enable`を指定すれば、WEBリクエスト処理件数等といった統計リポートをGUIで確認できます。
【PROXY01で実施】
# vim /etc/haproxy/haproxy.cfg global - 中略 - stats socket /var/lib/haproxy/stats listen bind 192.168.188.8:9090 mode https maxconn 64 stats enable stats uri /haproxy/ stats refresh 10s stats auth admin:yourpassword
ブラウザより、上記設定したポートにアクセス(https://192.168.188.8:9090/haproxy/)してみます。
※今回の設定はstats authを有効にし、アクセス時にユーザ認証を設定しております。
VIP切り替え
PROXY01のhaproxyがプロセス障害になった場合にフェイルオーバーするか確認します。
【PROXY01で実施】
# kill -kill `pgrep -f haproxy` # tail -n100 /var/log/keepalived/keepalived.log Jun 21 15:34:47 proxy01 Keepalived_vrrp[7832]: /usr/bin/killall -0 haproxy exited with status 1 Jun 21 15:34:47 proxy01 Keepalived_vrrp[7832]: VRRP_Script(chk_haproxy) failed Jun 21 15:34:48 proxy01 Keepalived_vrrp[7832]: VRRP_Instance(VI_1) Entering FAULT STATE Jun 21 15:34:48 proxy01 Keepalived_vrrp[7832]: VRRP_Instance(VI_1) removing protocol VIPs. Jun 21 15:34:48 proxy01 Keepalived_vrrp[7832]: VRRP_Instance(VI_1) Now in FAULT state
PROXY02側にVIIPが切り替わっていることを確認します。
【PROXY02で実施】
# ip a show 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:8e:e4:bd brd ff:ff:ff:ff:ff:ff inet 192.168.188.9/24 brd 192.168.188.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever inet 192.168.188.10/32 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe8e:e4bd/64 scope link valid_lft forever preferred_lft forever
ログ上でもPROXY01からPROXY02へVIPが移動されたことが確認できます。
【PROXY02で実施】
# tail -n100 /var/log/keepalived/keepalived.log Jun 21 15:34:49 proxy02 Keepalived_vrrp[7847]: VRRP_Instance(VI_1) Transition to MASTER STATE Jun 21 15:34:50 proxy02 Keepalived_vrrp[7847]: VRRP_Instance(VI_1) Entering MASTER STATE Jun 21 15:34:50 proxy02 Keepalived_vrrp[7847]: VRRP_Instance(VI_1) setting protocol VIPs. Jun 21 15:34:50 proxy02 Keepalived_vrrp[7847]: Sending gratuitous ARP on eth0 for 192.168.188.10 Jun 21 15:34:50 proxy02 Keepalived_vrrp[7847]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on eth0 for 192.168.188.10
インストール編に続き、お付き合いいただきありがとうございました。