はじめに
みなさんこんにちは。サイオステクノロジーのNakayaです。
今回、HAProxyという多機能ロードバランサーのアクティブヘルスチェック機能を試してみました。
パラメータの詳細については以下のHAProxyドキュメントを参照していただくと良いかと思います。
http://cbonte.github.io/haproxy-dconv/2.5/intro.html#3.1
アクティブヘルスチェックとは
アクティブヘルスチェックとはロードバランサーがバックエンドの稼働状況をチェックする方法の一つです。ロードバランサーはバックエンドのサーバに対し、定期的にヘルスチェックのためのリクエストを送り、そのレスポンスを確認します。
今回はヘルスチェックとしてバックエンドサーバに対しHTTPリクエストを送信するL7レベルのヘルスチェックを試してみます。
検証環境の構築
今回は簡単にDocker、docker-composeを使用して検証します。
以下がディレクトリ構成です。
.
├── docker-compose.yaml
└── haproxy
└── haproxy.cfg
docker-compose.yamlはhaproxyコンテナが1台、nginxコンテナを2台立てます。nginxはどちらのコンテナなのかを判別しやすいようにentorypointでコンテナ名をindex.htmlを起動時に書き込むようにしています。
version: '3'
services:
haproxy:
image: haproxy:lts-alpine3.19
container_name: haproxy
ports:
- '127.0.0.1:8080:8080'
- '127.0.0.1:8081:8081'
volumes:
- ./haproxy:/usr/local/etc/haproxy/
tty: true
web1:
image: nginx:alpine
container_name: web1
entrypoint: >
sh -c "
echo 'web1' > /usr/share/nginx/html/index.html
nginx -g 'daemon off;'
"
expose:
- '80'
tty: true
web2:
image: nginx:alpine
container_name: web2
entrypoint: >
sh -c "
echo 'web2' > /usr/share/nginx/html/index.html
nginx -g 'daemon off;'
"
expose:
- '80'
tty: true
global
log stdout format raw daemon debug
defaults
log global
mode http
maxconn 5000
timeout connect 5s
timeout client 20s
timeout server 50s
frontend public
bind *:8080
default_backend web
option forwardfor
frontend stats
bind *:8081
stats enable
stats uri /
stats refresh 1s
backend web
option httpchk
http-check send meth GET uri /
http-check expect status 200
server web1 web1:80 check inter 3s fall 3 rise 2
server web2 web2:80 check backup inter 3s fall 3 rise 2
backend web
のserver
指定したサーバに転送します。上記の設定ではweb1をマスターとし、web2をマスターサーバーのバックアップサーバとして機能させています。server
部分にcheck
とつけます。check
と記載したサーバにはアクティブヘルスチェックが有効になり、server
で指定したサーバを死活監視してくれます。/
にアクセスし、返却されるステータスコードが200であることを期待しています。起動
docker compose up -d
http://localhost:8081
に アクセスしてみます。アクセスすると、WEB UIが開き、web1、web2がそれぞれUP状態であることが確認できます。http://localhost:8080
に アクセスしてみます。アクセスすると、web1と表示されているのがわかります。検証
docker stop web1
http://localhost:8080
に アクセスしてみます。アクセスすると、web2と表示されているのがわかります。http://localhost:8081
にアクセスしてみると、web1がDOWN状態になっていることが確認できます。docker start web1
http://localhost:8080
に アクセスしてみます。アクセスすると表示がweb1に戻っていることがわかります。http://localhost:8081
にアクセスしてみると、web1がUP状態になっていることが確認できます。さいごに
今回はHAProxyを利用してアクティブヘルスチェックの機能を検証してみました。
Nginxの商用版(NGINX Plus)でも同様の機能がありますが、HAProxyであれば無償で利用できるので、SSLの終端サーバ + アクティブヘルスチェック ぐらいの利用用途であればHAProxyは有力な選択肢になるかと思います。 m(_ _)m
Be the first to comment