【A10 Thunder】サーバ負荷分散ヘルスチェックと動作確認 5.2.0

負荷分散装置は、振り分け先のサーバ(リアルサーバ)が動いているかをヘルスチェックで監視します。サーバのダウンを検知すると、そのサーバを負荷分散の対象から外し、残りのサーバだけに振り分けます。この記事では、A10 Thunder(vThunder、ACOS 5.2.0)で基本となるヘルスチェックの設定と動作を確かめます。

この記事でわかること
  1. 既定で動くヘルスチェック(サーバへの Ping、公開ポートへの TCP 接続)
  2. ヘルスチェックの状態の確認方法(show health stat とパケットキャプチャ)
  3. サーバへのヘルスチェックを無効にする方法
  4. カスタムのヘルスモニタ(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 で確認できます。

画面イメージについて

この記事の画面は、実際の画面ではなく、検証時の画面から見るポイントや設定する項目を抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。

vThunder 設定画面(GUI)画面イメージ
ADC ›› Health Monitors ›› Health Monitors
NameMethodRetryUp RetryIntervalTimeoutActions
1pingICMP3155Edit
図1 ヘルスモニタの一覧(実際の画面ではなく、表示のポイントを示したイメージです)

一覧にある ping が既定のヘルスモニタです。各項目の意味と既定値は次のとおりです。

項目意味既定値
Methodヘルスチェックの方式ICMP
Retry失敗したときに再試行する回数。再試行しても応答がなければ、サーバを DOWN と判定します。3 回
Up RetryDOWN のサーバを 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 の設定と、既定のヘルスチェックの対応は次の図のとおりです。

vThunder 10.0.200.149 ICMP Echo(5 秒ごと) TCP 80 に接続(5 秒ごと) Web-01(10.0.200.100) サーバ:slb server Web-01 ヘルスモニタ:ping(既定) ICMP の応答で判定 ポート:port 80 tcp ヘルスモニタ:default TCP の接続ができるかで判定
図2 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 OKPing の応答を受け取れたことを表します。
TCP Verify Connection OKTCP 80 への接続を確かめられたことを表します。

Web サーバでパケットをキャプチャすると、vThunder(10.0.200.149)から 5 秒ごとに Ping(Echo request)が届き、Web サーバが応答していることがわかります。

パケットキャプチャ(Web-01 で取得)画面イメージ
TimeSourceDestinationProtocolInfo
14.30750210.0.200.14910.0.200.100ICMPEcho (ping) request
4.30757310.0.200.10010.0.200.149ICMPEcho (ping) reply
29.35930810.0.200.14910.0.200.100ICMPEcho (ping) request
9.35940410.0.200.10010.0.200.149ICMPEcho (ping) reply
14.43502410.0.200.14910.0.200.100ICMPEcho (ping) request
14.43512810.0.200.10010.0.200.149ICMPEcho (ping) reply
19.47086910.0.200.14910.0.200.100ICMPEcho (ping) request
19.47094810.0.200.10010.0.200.149ICMPEcho (ping) reply
図3 Ping によるヘルスチェック(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1Echo (ping) request/replyvThunder から Ping が届き、Web サーバがすぐに応答しています。
2Time(4.3 秒 → 9.4 秒)次の Ping は約 5 秒後で、Interval の既定値 5 秒と合っています。

TCP 80 にも、5 秒ごとにヘルスチェックが届いています。vThunder は TCP の 3 ウェイハンドシェイクで接続を確立すると、すぐに FIN を送り、Web サーバが RST で応えて接続が終わります。

パケットキャプチャ(Web-01 で取得)画面イメージ
TimeSourceDestinationProtocolInfo
10.11967210.0.200.14910.0.200.100TCP60922 → 80 [SYN]
0.11974710.0.200.10010.0.200.149TCP80 → 60922 [SYN, ACK]
0.13974510.0.200.14910.0.200.100TCP60922 → 80 [ACK]
20.23133010.0.200.14910.0.200.100TCP60922 → 80 [FIN, ACK]
30.23138410.0.200.10010.0.200.149TCP80 → 60922 [RST, ACK]
45.17928610.0.200.14910.0.200.100TCP60956 → 80 [SYN]
5.17935110.0.200.10010.0.200.149TCP80 → 60956 [SYN, ACK]
5.19515510.0.200.14910.0.200.100TCP60956 → 80 [ACK]
5.28747610.0.200.14910.0.200.100TCP60956 → 80 [FIN, ACK]
5.28751710.0.200.10010.0.200.149TCP80 → 60956 [RST, ACK]
10.21930310.0.200.14910.0.200.100TCP60958 → 80 [SYN]
10.21941110.0.200.10010.0.200.149TCP80 → 60958 [SYN, ACK]
10.23535610.0.200.14910.0.200.100TCP60958 → 80 [ACK]
10.33509210.0.200.14910.0.200.100TCP60958 → 80 [FIN, ACK]
10.33947910.0.200.10010.0.200.149TCP80 → 60958 [RST, ACK]
図4 TCP 80 へのヘルスチェック(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1[SYN] → [SYN, ACK] → [ACK]3 ウェイハンドシェイクで TCP 80 に接続できたので、ポートは UP と判定されます。
2[FIN, ACK]接続を確かめたあと、vThunder がすぐに接続を閉じます。
3[RST, ACK]Web サーバが RST を返し、接続が終わります。
4Time(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 にチェックを入れます。

vThunder 設定画面(GUI)画面イメージ
ADC ›› SLB ›› Servers ›› Web-01(Edit)
NameWeb-01
Type◉ IPv4○ IPv6○ FQDN
Host10.0.200.100
ActionEnable
1Disable Health Check☑
Connection Limit64000000
No Logging☐
図5 サーバのヘルスチェックの無効化(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1Disable Health Checkチェックを入れると、サーバ単位のヘルスチェックを行いません。CLI の health-check-disable にあたります。
無効にしたときの注意

サーバ単位のヘルスチェックを無効にしても、公開ポートのヘルスチェック(TCP 80)は続きます。ポートのヘルスチェックも止めると、サーバが止まっていても振り分けの対象から外れなくなるため、無効にする範囲には注意してください。

ヘルスチェック(カスタム)

ヘルスチェックの方式、送る間隔、タイムアウトなどをヘルスモニタとして作り、リアルサーバやその公開ポートに割り当てることができます。ここでは、サーバに ICMP のヘルスモニタ custom_ping、公開ポート TCP 80 に HTTP のヘルスモニタ hc_http を割り当てます。

vThunder 10.0.200.149 ICMP Echo(3 秒ごと) HTTP GET /(5 秒ごと) Web-01(10.0.200.100) サーバ:slb server Web-01 ヘルスモニタ:custom_ping ICMP/Interval 3 秒/Timeout 1 秒 ポート:port 80 tcp ヘルスモニタ:hc_http HTTP のステータスコードで判定
図6 この記事で作るカスタムのヘルスモニタと割り当て先

ヘルスモニタは、ADC ›› Health Monitors ›› Health Monitors の Create から追加します。作成画面は、はじめは次のように既定値が入っています。Method Type で、ICMP のほかに TCP、UDP、HTTP などの方式を選べます。

vThunder 設定画面(GUI)画面イメージ
ADC ›› Health Monitors ›› Health Monitors ›› Create
General Fields
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
Retry3
Up Retry1
Interval5
Timeout5
Override IPv4 
Override IPv6 
⋮ (中略)
図7 ヘルスモニタの作成画面(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1Method Typeヘルスチェックの方式です。既定は ICMP です。

作ったヘルスモニタは、リアルサーバやその公開ポートに割り当てると使われます。

Ping によるカスタムヘルスチェック

Ping を送る間隔(Interval)を 3 秒、タイムアウトを 1 秒にしたヘルスモニタ custom_ping を作ります。ADC ›› Health Monitors ›› Health Monitors の Create で次のように入力し、Create をクリックします。

vThunder 設定画面(GUI)画面イメージ
ADC ›› Health Monitors ›› Health Monitors ›› Create
1Namecustom_ping
Method TypeICMP
Retry3
Up Retry1
2Interval3
Timeout1
Cancel3Create
図8 custom_ping の作成(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1Nameヘルスモニタの名前。custom_ping にします。Method Type は ICMP のままです。
2Interval/TimeoutInterval を 3、Timeout を 1(秒)にします。Timeout は Interval 以下にします。
3Createヘルスモニタを作成します。

一覧に custom_ping が追加されます。

vThunder 設定画面(GUI)画面イメージ
ADC ›› Health Monitors ›› Health Monitors
NameMethodRetryUp RetryIntervalTimeoutActions
pingICMP3155Edit
1custom_pingICMP3131Edit
図9 custom_ping を追加した一覧(実際の画面ではなく、表示のポイントを示したイメージです)

これをリアルサーバに割り当てます。ADC ›› SLB ›› Servers でリアルサーバ(Web-01)をクリックし、Health Monitor で custom_ping を選んで、Update をクリックします。前の手順で Disable Health Check にチェックを入れた場合は、チェックを外します。

vThunder 設定画面(GUI)画面イメージ
ADC ›› SLB ›› Servers ›› Web-01(Edit)
NameWeb-01
Type◉ IPv4○ IPv6○ FQDN
Host10.0.200.100
ActionEnable
1Disable Health Check☐
2Health Monitorcustom_ping
Connection Limit64000000
No Logging☐
Cancel3Update
図10 サーバへの custom_ping の割り当て(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1Disable Health Checkチェックを外します。ヘルスチェックの無効化と、ヘルスモニタの割り当ては同時には設定できません。
2Health Monitorサーバ単位で使うヘルスモニタ。custom_ping を選びます。
3Update設定を反映します。

サーバの一覧で、Web-01 の Status が UP(緑の上向き矢印)になり、Health Monitor が custom_ping になっていることを確認できます。

vThunder 設定画面(GUI)画面イメージ
ADC ›› SLB ›› Servers
StatusNameIP AddressHealth Monitor
1Web-0110.0.200.1002custom_ping
図11 custom_ping を割り当てたサーバの状態(実際の画面ではなく、表示のポイントを示したイメージです)
No.表示意味
1Status(緑)ヘルスチェックに成功し、サーバが UP になっています。
2Health 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 をクリックします。

vThunder 設定画面(GUI)画面イメージ
ADC ›› Health Monitors ›› Health Monitors ›› Create
1Namehc_http
2Method TypeHTTP
Retry3
Up Retry1
Interval5
Timeout5
Cancel3Create
図12 hc_http の作成(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1Nameヘルスモニタの名前。hc_http にします。
2Method TypeHTTP を選びます。ほかの項目は既定値のままです。
3Createヘルスモニタを作成します。

一覧に hc_http が追加されます。

vThunder 設定画面(GUI)画面イメージ
ADC ›› Health Monitors ›› Health Monitors
NameMethodRetryUp RetryIntervalTimeout
pingICMP3155
custom_pingICMP3131
1hc_httpHTTP3155
図13 hc_http を追加した一覧(実際の画面ではなく、表示のポイントを示したイメージです)

これをリアルサーバ Web-01 の公開ポートに割り当てます。ADC ›› SLB ›› Servers で Web-01 をクリックし、Port の一覧で公開ポート 80 の Edit をクリックします。

vThunder 設定画面(GUI)画面イメージ
ADC ›› SLB ›› Servers ›› Web-01(Edit) ›› Port
PortProtocolWeightConn LimitHealth CheckActions
80tcp164000000Default1Edit
図14 サーバの公開ポートの一覧(実際の画面ではなく、表示のポイントを示したイメージです)

Health Check で Monitor を選び、Health Monitor で hc_http を選んで、Update をクリックします。

vThunder 設定画面(GUI)画面イメージ
ADC ›› SLB ›› Servers ›› Web-01(Edit) ›› Port 80(Edit)
Port or Port Range80
Protocoltcp
1Health Check○ Default○ Disable◉ Monitor○ Follow Port
2Health Monitor 選べるヘルスモニタ ping
custom_ping
hc_http
Follow Port Protocol 
Follow Port 
Connection Limit64000000
No Logging☐
Cancel3Update
図15 公開ポートへの hc_http の割り当て(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1Health Checkポートのヘルスチェックの方法。Default(既定のチェック)、Disable(無効)、Monitor(ヘルスモニタを指定)、Follow Port(ほかのポートの状態に合わせる)から、Monitor を選びます。
2Health Monitorポートで使うヘルスモニタ。hc_http を選びます。
3Update設定を反映します。

サーバの一覧で Web-01 を展開すると、ポート(tcp 80)の Status が UP(緑の上向き矢印)になっていることを確認できます。

vThunder 設定画面(GUI)画面イメージ
ADC ›› SLB ›› Servers
StatusNameIP Address
Web-0110.0.200.100
1tcp80
図16 hc_http を割り当てたポートの状態(実際の画面ではなく、表示のポイントを示したイメージです)
No.表示意味
1Status(緑)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 を返していることがわかります。

パケットキャプチャ(Web-01 で取得)画面イメージ
TimeSourceDestinationProtocolInfo
14.25659510.0.200.14910.0.200.100HTTPGET / HTTP/1.1
24.25699010.0.200.10010.0.200.149HTTPHTTP/1.1 200 OK (text/html)
9.29678910.0.200.14910.0.200.100HTTPGET / HTTP/1.1
9.29713010.0.200.10010.0.200.149HTTPHTTP/1.1 200 OK (text/html)
14.35260410.0.200.14910.0.200.100HTTPGET / HTTP/1.1
14.35296410.0.200.10010.0.200.149HTTPHTTP/1.1 200 OK (text/html)
図17 HTTP によるヘルスチェック(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1GET / HTTP/1.1vThunder が送る HTTP のヘルスチェックです。約 5 秒ごとに届いています。
2HTTP/1.1 200 OKWeb サーバの応答です。200 OK なので、ポートは UP と判定されます。
ヘルスチェックのアクセスとログ

HTTP のヘルスチェックは、Web サーバから見ると通常のアクセスと同じです。5 秒ごとに GET / が届くため、Web サーバのアクセスログにも記録されます。アクセスの集計をする場合は、送信元(今回は 10.0.200.149)でヘルスチェックの行を見分けられます。

まとめ

やりたいことGUICLI
ヘルスモニタを確認するADC ›› Health Monitors ›› Health Monitorsshow health monitor
ヘルスチェックの状態を確認するADC ›› SLB ›› Servers の Statusshow health stat
サーバのヘルスチェックを無効にするサーバの Disable Health Check にチェックhealth-check-disable
ヘルスモニタを作るHealth Monitors の Createhealth monitor 名前
サーバに割り当てるサーバの Health Monitorslb server の中で health-check 名前
公開ポートに割り当てるポートの Health Check を Monitor にして Health Monitor を選ぶport 80 tcp の中で health-check 名前

リアルサーバと公開ポートを登録すると、サーバには Ping、TCP のポートには TCP の接続によるヘルスチェックが既定で行われます。間隔や方式を変えたいときはヘルスモニタを作って割り当て、Web サーバなら HTTP のヘルスモニタで応答の中身まで確かめられます。

コメント