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

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【4/18開催】VSCode Dev Containersで楽々開発環境構築祭り〜Python/Reactなどなど〜
Visual Studio Codeの拡張機能であるDev Containersを使ってReactとかPythonとかSpring Bootとかの開発環境をラクチンで構築する方法を紹介するイベントです。
https://tech-lab.connpass.com/event/311864/

こんにちは。サイオステクノロジー 小林です。
今回は 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

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

アバター画像
About サイオステクノロジーの中の人 4 Articles
サイオステクノロジーで働く中の人です。
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

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

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


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる