haproxyを利用して負荷分散環境を構築してみた【動作確認編】

こんにちは。サイオステクノロジー 小林です。
今回は 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を有効にし、アクセス時にユーザ認証を設定しております。

WS000000


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

インストール編に続き、お付き合いいただきありがとうございました。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です