負荷分散装置は、振り分け先のサーバ(リアルサーバ)が動いているかをヘルスチェックで監視します。サーバのダウンを検知すると、そのサーバを負荷分散の対象から外し、残りのサーバだけに振り分けます。この記事では、A10 Thunder(vThunder、ACOS 5.2.0)で基本となるヘルスチェックの設定と動作を確かめます。
- 既定で動くヘルスチェック(サーバへの Ping、公開ポートへの TCP 接続)
- ヘルスチェックの状態の確認方法(
show health statとパケットキャプチャ) - サーバへのヘルスチェックを無効にする方法
- カスタムのヘルスモニタ(ICMP と HTTP)を作って割り当てる方法
構成は 【A10 Thunder】サーバ負荷分散(L4)の基本設定と動作確認 5.2.0 のものを使い、Web サーバ Web-01(10.0.200.100、公開ポート TCP 80)をヘルスチェックの対象にします。先にこちらの記事をお読みください。
ヘルスチェック(デフォルト)
Ping によるヘルスチェック
リアルサーバを登録すると、何も設定しなくても、サーバに対して Ping(ICMP)によるヘルスチェックが行われます。既定のヘルスモニタは、GUI の ADC ›› Health Monitors ›› Health Monitors で確認できます。
この記事の画面は、実際の画面ではなく、検証時の画面から見るポイントや設定する項目を抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。
| Name | Method | Retry | Up Retry | Interval | Timeout | Actions |
|---|---|---|---|---|---|---|
| 1ping | ICMP | 3 | 1 | 5 | 5 | Edit |
一覧にある ping が既定のヘルスモニタです。各項目の意味と既定値は次のとおりです。
| 項目 | 意味 | 既定値 |
|---|---|---|
| Method | ヘルスチェックの方式 | ICMP |
| Retry | 失敗したときに再試行する回数。再試行しても応答がなければ、サーバを DOWN と判定します。 | 3 回 |
| Up Retry | DOWN のサーバを UP に戻すまでに、続けて成功する必要がある回数 | 1 回 |
| Interval | ヘルスチェックを送る間隔 | 5 秒 |
| Timeout | 応答を待つ時間。Interval 以下の値にします。 | 5 秒 |
CLI では show health monitor で確認できます。
vThunder
vThunder#show health monitor
Idle = Not used by any server In use = Used by server
Monitor Name Interval Retries Timeout Up-Retries Method Status
-----------------------------------------------------------------------
ping 5 3 5 1 ICMP In use
Status の In use は、このヘルスモニタがサーバで使われていることを表します(どのサーバでも使われていなければ Idle)。
L4 ポートによるヘルスチェック
リアルサーバに公開ポートを登録すると、そのポートにも既定のヘルスチェックが行われます。TCP のポートなら、vThunder がそのポートに TCP で接続できるかを確かめます。
デフォルトの動作例
リアルサーバ 10.0.200.100 に公開ポート TCP 80 を登録すると、サーバには Ping によるヘルスチェック、TCP 80 には L4 ポートのヘルスチェックが、どちらも既定で行われます。CLI の設定と、既定のヘルスチェックの対応は次の図のとおりです。
ヘルスチェックの状態は、CLI の show health stat で確認できます。
vThunder
vThunder#show health stat ・ ・ IP address Port Health monitor Status Cause(Up/Down) Reason(Up/Down) Retry PIN -------------------------------------------------------------------------------------------------------------------------- 10.0.200.100 default UP 11 /0 @0 ICMP Receive OK 0 0 /0 0 10.0.200.100 80 default UP 20 /0 @0 TCP Verify Connection OK 0 0 /0 0
| 表示 | 意味 |
|---|---|
| Port(空欄) | サーバ単位のヘルスチェックです。ここでは既定の Ping です。 |
| Port 80 | 公開ポート TCP 80 に対するヘルスチェックです。 |
| Health monitor | 使われているヘルスモニタです。default は既定のヘルスチェックを表します。 |
| Status UP | ヘルスチェックに成功しており、負荷分散の対象になっています。 |
| ICMP Receive OK | Ping の応答を受け取れたことを表します。 |
| TCP Verify Connection OK | TCP 80 への接続を確かめられたことを表します。 |
Web サーバでパケットをキャプチャすると、vThunder(10.0.200.149)から 5 秒ごとに Ping(Echo request)が届き、Web サーバが応答していることがわかります。
| Time | Source | Destination | Protocol | Info |
|---|---|---|---|---|
| 14.307502 | 10.0.200.149 | 10.0.200.100 | ICMP | Echo (ping) request |
| 4.307573 | 10.0.200.100 | 10.0.200.149 | ICMP | Echo (ping) reply |
| 29.359308 | 10.0.200.149 | 10.0.200.100 | ICMP | Echo (ping) request |
| 9.359404 | 10.0.200.100 | 10.0.200.149 | ICMP | Echo (ping) reply |
| 14.435024 | 10.0.200.149 | 10.0.200.100 | ICMP | Echo (ping) request |
| 14.435128 | 10.0.200.100 | 10.0.200.149 | ICMP | Echo (ping) reply |
| 19.470869 | 10.0.200.149 | 10.0.200.100 | ICMP | Echo (ping) request |
| 19.470948 | 10.0.200.100 | 10.0.200.149 | ICMP | Echo (ping) reply |
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Echo (ping) request/reply | vThunder から Ping が届き、Web サーバがすぐに応答しています。 |
| 2 | Time(4.3 秒 → 9.4 秒) | 次の Ping は約 5 秒後で、Interval の既定値 5 秒と合っています。 |
TCP 80 にも、5 秒ごとにヘルスチェックが届いています。vThunder は TCP の 3 ウェイハンドシェイクで接続を確立すると、すぐに FIN を送り、Web サーバが RST で応えて接続が終わります。
| Time | Source | Destination | Protocol | Info |
|---|---|---|---|---|
| 10.119672 | 10.0.200.149 | 10.0.200.100 | TCP | 60922 → 80 [SYN] |
| 0.119747 | 10.0.200.100 | 10.0.200.149 | TCP | 80 → 60922 [SYN, ACK] |
| 0.139745 | 10.0.200.149 | 10.0.200.100 | TCP | 60922 → 80 [ACK] |
| 20.231330 | 10.0.200.149 | 10.0.200.100 | TCP | 60922 → 80 [FIN, ACK] |
| 30.231384 | 10.0.200.100 | 10.0.200.149 | TCP | 80 → 60922 [RST, ACK] |
| 45.179286 | 10.0.200.149 | 10.0.200.100 | TCP | 60956 → 80 [SYN] |
| 5.179351 | 10.0.200.100 | 10.0.200.149 | TCP | 80 → 60956 [SYN, ACK] |
| 5.195155 | 10.0.200.149 | 10.0.200.100 | TCP | 60956 → 80 [ACK] |
| 5.287476 | 10.0.200.149 | 10.0.200.100 | TCP | 60956 → 80 [FIN, ACK] |
| 5.287517 | 10.0.200.100 | 10.0.200.149 | TCP | 80 → 60956 [RST, ACK] |
| 10.219303 | 10.0.200.149 | 10.0.200.100 | TCP | 60958 → 80 [SYN] |
| 10.219411 | 10.0.200.100 | 10.0.200.149 | TCP | 80 → 60958 [SYN, ACK] |
| 10.235356 | 10.0.200.149 | 10.0.200.100 | TCP | 60958 → 80 [ACK] |
| 10.335092 | 10.0.200.149 | 10.0.200.100 | TCP | 60958 → 80 [FIN, ACK] |
| 10.339479 | 10.0.200.100 | 10.0.200.149 | TCP | 80 → 60958 [RST, ACK] |
| No. | 表示 | 意味 |
|---|---|---|
| 1 | [SYN] → [SYN, ACK] → [ACK] | 3 ウェイハンドシェイクで TCP 80 に接続できたので、ポートは UP と判定されます。 |
| 2 | [FIN, ACK] | 接続を確かめたあと、vThunder がすぐに接続を閉じます。 |
| 3 | [RST, ACK] | Web サーバが RST を返し、接続が終わります。 |
| 4 | Time(0.1 秒 → 5.2 秒 → 10.2 秒) | 約 5 秒ごとに、送信元ポートを変えて新しい接続でチェックしています。 |
ヘルスチェックの無効化
既定のヘルスチェックのうち、サーバへの Ping によるヘルスチェックを止めたいときは、リアルサーバの設定で health-check-disable を設定します。
vThunder
vThunder(config)#slb server Web-01 10.0.200.100
vThunder(config-real server)#health-check-disable
show health stat を見ると、ICMP のヘルスチェックの行がなくなり、TCP 80 の行だけが残っています。
vThunder
vThunder#show health stat
IP address Port Health monitor Status Cause(Up/Down) Reason(Up/Down) Retry PIN
--------------------------------------------------------------------------------------------------------------------------
10.0.200.100 80 default UP 20 /0 @0 TCP Verify Connection OK 0 0 /0 0
GUI では、ADC ›› SLB ›› Servers でリアルサーバ(Web-01)を開き、Disable Health Check にチェックを入れます。
| Name | Web-01 |
| Type | ◉ IPv4○ IPv6○ FQDN |
| Host | 10.0.200.100 |
| Action | Enable |
| 1Disable Health Check | ☑ |
| Connection Limit | 64000000 |
| No Logging | ☐ |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | Disable Health Check | チェックを入れると、サーバ単位のヘルスチェックを行いません。CLI の health-check-disable にあたります。 |
サーバ単位のヘルスチェックを無効にしても、公開ポートのヘルスチェック(TCP 80)は続きます。ポートのヘルスチェックも止めると、サーバが止まっていても振り分けの対象から外れなくなるため、無効にする範囲には注意してください。
ヘルスチェック(カスタム)
ヘルスチェックの方式、送る間隔、タイムアウトなどをヘルスモニタとして作り、リアルサーバやその公開ポートに割り当てることができます。ここでは、サーバに ICMP のヘルスモニタ custom_ping、公開ポート TCP 80 に HTTP のヘルスモニタ hc_http を割り当てます。
ヘルスモニタは、ADC ›› Health Monitors ›› Health Monitors の Create から追加します。作成画面は、はじめは次のように既定値が入っています。Method Type で、ICMP のほかに TCP、UDP、HTTP などの方式を選べます。
| Name | |
| 1Method Type |
選べる方式
ICMP
TCP UDP HTTP FTP SNMP SMTP DNS POP3 IMAP SIP Radius LDAP RTSP Database External HTTPS NTP Compound Kerberos KDC Tacplus |
| Retry | 3 |
| Up Retry | 1 |
| Interval | 5 |
| Timeout | 5 |
| Override IPv4 | |
| Override IPv6 | |
| ⋮ (中略) | |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | Method Type | ヘルスチェックの方式です。既定は ICMP です。 |
作ったヘルスモニタは、リアルサーバやその公開ポートに割り当てると使われます。
Ping によるカスタムヘルスチェック
Ping を送る間隔(Interval)を 3 秒、タイムアウトを 1 秒にしたヘルスモニタ custom_ping を作ります。ADC ›› Health Monitors ›› Health Monitors の Create で次のように入力し、Create をクリックします。
| 1Name | custom_ping |
| Method Type | ICMP |
| Retry | 3 |
| Up Retry | 1 |
| 2Interval | 3 |
| Timeout | 1 |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | Name | ヘルスモニタの名前。custom_ping にします。Method Type は ICMP のままです。 |
| 2 | Interval/Timeout | Interval を 3、Timeout を 1(秒)にします。Timeout は Interval 以下にします。 |
| 3 | Create | ヘルスモニタを作成します。 |
一覧に custom_ping が追加されます。
| Name | Method | Retry | Up Retry | Interval | Timeout | Actions |
|---|---|---|---|---|---|---|
| ping | ICMP | 3 | 1 | 5 | 5 | Edit |
| 1custom_ping | ICMP | 3 | 1 | 3 | 1 | Edit |
これをリアルサーバに割り当てます。ADC ›› SLB ›› Servers でリアルサーバ(Web-01)をクリックし、Health Monitor で custom_ping を選んで、Update をクリックします。前の手順で Disable Health Check にチェックを入れた場合は、チェックを外します。
| Name | Web-01 |
| Type | ◉ IPv4○ IPv6○ FQDN |
| Host | 10.0.200.100 |
| Action | Enable |
| 1Disable Health Check | ☐ |
| 2Health Monitor | custom_ping |
| Connection Limit | 64000000 |
| No Logging | ☐ |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | Disable Health Check | チェックを外します。ヘルスチェックの無効化と、ヘルスモニタの割り当ては同時には設定できません。 |
| 2 | Health Monitor | サーバ単位で使うヘルスモニタ。custom_ping を選びます。 |
| 3 | Update | 設定を反映します。 |
サーバの一覧で、Web-01 の Status が UP(緑の上向き矢印)になり、Health Monitor が custom_ping になっていることを確認できます。
| Status | Name | IP Address | Health Monitor |
|---|---|---|---|
| 1 | Web-01 | 10.0.200.100 | 2custom_ping |
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Status(緑) | ヘルスチェックに成功し、サーバが UP になっています。 |
| 2 | Health Monitor | サーバに割り当てたヘルスモニタ custom_ping です。 |
CLI で設定する場合は、次のとおりです。health monitor でヘルスモニタを作り、リアルサーバで health-check に名前を指定します。
vThunder
vThunder(config)#health monitor custom_ping vThunder(config-health:monitor)# interval 3 timeout 1 vThunder(config)#slb server Web-01 10.0.200.100 vThunder(config-real server)# health-check custom_ping
show health stat で、サーバ単位のヘルスチェックに custom_ping が使われていることを確認できます。
vThunder
vThunder# show health stat
IP address Port Health monitor Status Cause(Up/Down) Reason(Up/Down) Retry PIN
--------------------------------------------------------------------------------------------------------------------------
10.0.200.100 custom_ping UP 11 /0 @0 ICMP Receive OK 0 0 /0 0
10.0.200.100 80 default UP 20 /0 @0 TCP Verify Connection OK 0 0 /0 0
HTTP によるカスタムヘルスチェック
TCP の接続(L4)だけでなく、アプリケーション(L7)のレベルでもヘルスチェックできます。TCP のチェックでは、ポートが開いていれば、Web アプリケーションがエラーを返していても UP と判定されます。HTTP のチェックなら、Web サーバの応答の中身まで確かめられます。ここでは HTTP のヘルスチェックの動きを確かめます。
Method Type が HTTP のヘルスモニタを、ADC ›› Health Monitors ›› Health Monitors の Create で作ります。General Fields で Name(hc_http)と Method Type(HTTP)を設定し、Create をクリックします。
| 1Name | hc_http |
| 2Method Type | HTTP |
| Retry | 3 |
| Up Retry | 1 |
| Interval | 5 |
| Timeout | 5 |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | Name | ヘルスモニタの名前。hc_http にします。 |
| 2 | Method Type | HTTP を選びます。ほかの項目は既定値のままです。 |
| 3 | Create | ヘルスモニタを作成します。 |
一覧に hc_http が追加されます。
| Name | Method | Retry | Up Retry | Interval | Timeout |
|---|---|---|---|---|---|
| ping | ICMP | 3 | 1 | 5 | 5 |
| custom_ping | ICMP | 3 | 1 | 3 | 1 |
| 1hc_http | HTTP | 3 | 1 | 5 | 5 |
これをリアルサーバ Web-01 の公開ポートに割り当てます。ADC ›› SLB ›› Servers で Web-01 をクリックし、Port の一覧で公開ポート 80 の Edit をクリックします。
| Port | Protocol | Weight | Conn Limit | Health Check | Actions |
|---|---|---|---|---|---|
| 80 | tcp | 1 | 64000000 | Default | 1Edit |
Health Check で Monitor を選び、Health Monitor で hc_http を選んで、Update をクリックします。
| Port or Port Range | 80 |
| Protocol | tcp |
| 1Health Check | ○ Default○ Disable◉ Monitor○ Follow Port |
| 2Health Monitor |
選べるヘルスモニタ
ping custom_ping hc_http |
| Follow Port Protocol | |
| Follow Port | |
| Connection Limit | 64000000 |
| No Logging | ☐ |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | Health Check | ポートのヘルスチェックの方法。Default(既定のチェック)、Disable(無効)、Monitor(ヘルスモニタを指定)、Follow Port(ほかのポートの状態に合わせる)から、Monitor を選びます。 |
| 2 | Health Monitor | ポートで使うヘルスモニタ。hc_http を選びます。 |
| 3 | Update | 設定を反映します。 |
サーバの一覧で Web-01 を展開すると、ポート(tcp 80)の Status が UP(緑の上向き矢印)になっていることを確認できます。
| Status | Name | IP Address |
|---|---|---|
| Web-01 | 10.0.200.100 | |
| 1 | tcp | 80 |
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Status(緑) | HTTP のヘルスチェックに成功し、ポート 80 が UP になっています。 |
CLI で設定する場合は、次のとおりです。ヘルスモニタで method http を指定し、リアルサーバの port 80 tcp の中で health-check に名前を指定します。
vThunder
vThunder(config)#health monitor hc_http vThunder(config-health:monitor)#method http vThunder(config)#slb server Web-01 10.0.200.100 vThunder(config-real server)#port 80 tcp vThunder(config-real server-node port)#health-check hc_http
show health stat で、ポート 80 のヘルスチェックに hc_http が使われ、Reason が HTTP Status Code OK になっていることを確認できます。
vThunder
vThunder#show health stat IP address Port Health monitor Status Cause(Up/Down) Reason(Up/Down) Retry PIN -------------------------------------------------------------------------------------------------------------------------- 10.0.200.100 custom_ping UP 11 /0 @0 ICMP Receive OK 0 0 /0 0 10.0.200.100 80 hc_http UP 10 /0 @0 HTTP Status Code OK
HTTP のヘルスモニタは、既定ではポート 80 に GET / を送り、Web サーバの応答のステータスコードで UP かどうかを判定します。既定の設定では、200 OK が返ると UP と判定されます。
Web サーバでパケットをキャプチャすると、5 秒ごとに HTTP のヘルスチェック(GET / HTTP/1.1)が届き、Web サーバが 200 OK を返していることがわかります。
| Time | Source | Destination | Protocol | Info |
|---|---|---|---|---|
| 14.256595 | 10.0.200.149 | 10.0.200.100 | HTTP | GET / HTTP/1.1 |
| 24.256990 | 10.0.200.100 | 10.0.200.149 | HTTP | HTTP/1.1 200 OK (text/html) |
| 9.296789 | 10.0.200.149 | 10.0.200.100 | HTTP | GET / HTTP/1.1 |
| 9.297130 | 10.0.200.100 | 10.0.200.149 | HTTP | HTTP/1.1 200 OK (text/html) |
| 14.352604 | 10.0.200.149 | 10.0.200.100 | HTTP | GET / HTTP/1.1 |
| 14.352964 | 10.0.200.100 | 10.0.200.149 | HTTP | HTTP/1.1 200 OK (text/html) |
| No. | 表示 | 意味 |
|---|---|---|
| 1 | GET / HTTP/1.1 | vThunder が送る HTTP のヘルスチェックです。約 5 秒ごとに届いています。 |
| 2 | HTTP/1.1 200 OK | Web サーバの応答です。200 OK なので、ポートは UP と判定されます。 |
HTTP のヘルスチェックは、Web サーバから見ると通常のアクセスと同じです。5 秒ごとに GET / が届くため、Web サーバのアクセスログにも記録されます。アクセスの集計をする場合は、送信元(今回は 10.0.200.149)でヘルスチェックの行を見分けられます。
まとめ
| やりたいこと | GUI | CLI |
|---|---|---|
| ヘルスモニタを確認する | ADC ›› Health Monitors ›› Health Monitors | show health monitor |
| ヘルスチェックの状態を確認する | ADC ›› SLB ›› Servers の Status | show health stat |
| サーバのヘルスチェックを無効にする | サーバの Disable Health Check にチェック | health-check-disable |
| ヘルスモニタを作る | Health Monitors の Create | health monitor 名前 |
| サーバに割り当てる | サーバの Health Monitor | slb server の中で health-check 名前 |
| 公開ポートに割り当てる | ポートの Health Check を Monitor にして Health Monitor を選ぶ | port 80 tcp の中で health-check 名前 |
リアルサーバと公開ポートを登録すると、サーバには Ping、TCP のポートには TCP の接続によるヘルスチェックが既定で行われます。間隔や方式を変えたいときはヘルスモニタを作って割り当て、Web サーバなら HTTP のヘルスモニタで応答の中身まで確かめられます。
コメント