本記事について
本記事では、A10ネットワークス社のロードバランサ製品である Thunder シリーズについて、SLBサーバのヘルスチェックの基礎知識として以下のような内容を解説します。
- ヘルスチェックとは
- サーバのヘルスチェックとポートのヘルスチェック
- デフォルトのヘルスチェック動作
- ヘルスチェック設定についての基礎知識
- ヘルスチェック状態の確認コマンド
- ヘルスチェックの設定例
動作確認環境
本記事は以下の環境にて動作確認した結果に基づいて作成されています。
- A10 vThunder
- version 5.2.1-P11
ヘルスチェックとは
ロードバランサにおけるヘルスチェックとは、クライアントからの通信の転送先となるリアルサーバの状態を監視する機能のことです。
ロードバランサは定期的にリアルサーバに監視パケットを送信し、その応答を確認することでリアルサーバが正常に動作していることを確認します。
応答がないか異常を示す応答が返ってきたサーバについてはクライアント通信の転送先から除外されます。
この機能により、クライアント通信は常に正常なサーバに転送されるようになりサーバ障害発生時のサービス断時間を最小化することができます。
サーバのヘルスチェックとポートのヘルスチェック
ヘルスチェックには以下の2種類があります。
- サーバに対するヘルスチェック
- サービスポートに対するヘルスチェック
サーバに対するヘルスチェック
サーバに対するヘルスチェックはレイヤ3のヘルスチェックでありそのサーバ自体が正常動作していることを確認するためのヘルスチェックです。サーバに対するヘルスチェックが失敗した場合、そのサーバ自体がDOWNと判定されます。
サービスポートに対するヘルスチェック
サービスポートに対するヘルスチェックはレイヤ4のヘルスチェックであり特定のサービスポートが正常に動作していることを確認するためのヘルスチェックです。サービスポートに対するヘルスチェックが失敗した場合、対象のサービスポートについてのみDOWNと判定されます。
サービスポートに対するヘルスチェックは、サーバに対するヘルスチェックが成功していることを前提としています。サーバに対するヘルスチェックが失敗している場合はサービスポートに対するヘルスチェックは実施されません。
2種類のヘルスチェックの設定箇所の違い
A10 Thunder におけるリアルサーバ(slb server)の設定は、以下のような、slb server
設定の中にサービスポートの設定が含まれるような構造になっています。
slb server Sample_Server 192.168.200.1
port 20000 tcp
port 20010 tcp
サーバに対するヘルスチェックの設定箇所は、以下のようにslb server
設定の直下となります。
slb server Sample_Server 192.168.200.1
health-check sample-monitor '←★サーバに対するヘルスチェック設定'
port 20000 tcp
port 20010 tcp
サービスポートに対するヘルスチェックの設定箇所は、以下のようにport
設定の配下となります。
slb server Sample_Server 192.168.200.1
port 20000 tcp
health-check sample-monitor '←★サービスポートに対するヘルスチェック設定'
port 20010 tcp
デフォルトのヘルスチェック動作
A10 Thunder では、slb serverに対してヘルスチェックの設定を明示的に行わなくてもサーバ、ポートそれぞれに対してデフォルトのヘルスチェックが実行されます。
サーバに対するデフォルトのヘルスチェック
サーバに対してはデフォルトで ICMP によるヘルスチェックが実行されます。ICMP ping (エコー要求) が 5 秒ごとに送信され、ping が 4 回連続して失敗すると (最初の試行の後に 3 回再試行)、ヘルスチェックが失敗と判定します。
以下のようなslb server設定がされているとします。
slb server Sample_Server 192.168.200.1
この場合にサーバ側でパケットキャプチャを行うと、以下のように A10 Thunder から ICMP パケットが送信されていることを確認できます。
サービスポートに対するデフォルトのヘルスチェック
サービスポートに対するデフォルトのヘルスチェックは、プロトコルが TCP か UDP かによって変わります。
TCP の場合、5秒間隔で指定された TCP ポートに TCP SYN を送信し、サーバが TCP SYN ACK で応答した場合ヘルスチェック成功と判定します。
以下のようなslb server設定がされているとします。
slb server Sample_Server 192.168.200.1
port 20000 tcp
この場合にサーバ側でパケットキャプチャを行うと、以下のように A10 Thunder から TCP SYN パケットが送信されていることを確認できます。
上記のキャプチャ例はTCPでフィルタしています。キャプチャ全体ではサーバに対するICMPのヘルスチェックとポートに対するTCPのヘルスチェックの両方がされていることを確認できます。
UDP の場合、5秒間隔で指定された UDP ポートに有効な UDP ヘッダーとガベージペイロードを含むパケットを送信し、サーバが応答しないか、または ICMP エラーメッセージ以外の任意のタイプのパケットで応答した場合ヘルスチェック成功と判定します。
以下のようなslb server設定がされているとします。
slb server Sample_Server 192.168.200.1
port 25000 udp
この場合にサーバ側でパケットキャプチャを行うと、以下のように A10 Thunder から UDP パケットが送信されていることを確認できます。
上記のキャプチャ例はUDPでフィルタしています。キャプチャ全体ではサーバに対するICMPのヘルスチェックとポートに対するUDPのヘルスチェックの両方がされていることを確認できます。
デフォルトのヘルスチェックの無効化
デフォルトのヘルスチェックを無効化してヘルスチェックを実施しないようにすることも可能です。
サーバに対するヘルスチェックを無効化するためには以下のようにslb server
設定直下でhealth-check-disable
と設定します。
slb server Sample_Server 192.168.200.1
health-check-disable
サービスポートに対するヘルスチェックを無効化するためには以下のようにport
設定配下でhealth-check-disable
と設定します。
slb server Sample_Server 192.168.200.1
port 20000 tcp
health-check-disable
ヘルスチェック設定についての基礎知識
ヘルスチェックの設定構造
ヘルスチェックの設定構造としては、ヘルスチェックの内容を定義したhealth monitor
設定を行った上で、slb server
内でサーバやサービスポートに対してhealth monitor
を適用するという構造になっています。
health monitor sample-monitor
method tcp port 25000
slb server Sample_Server 192.168.200.1
port 25000 tcp
health-check sample-monitor
ヘルスチェックの間隔、リトライ回数、復旧判定回数
health monitor
設定配下でヘルスチェックの間隔(interval
)、リトライ回数(retry
)、復旧判定回数(up-retry
)を設定できます。
デフォルトでは以下の通り5秒間隔でリトライ回数は3回です。また障害時1度ヘルスチェックに成功するとUPと判定されます。
vThunder(config-health:monitor)#interval ?
<1-180> Interval Value, in seconds (default 5)
vThunder(config-health:monitor)#retry ?
<1-10> Retry Count (default 3)
vThunder(config-health:monitor)#up-retry ?
<1-10> Up-retry count (default 1)
ヘルスチェックが失敗した場合、失敗後に設定されたリトライ回数まで再度ヘルスチェックを行います。リトライ回数を超えてヘルスチェックに失敗した場合、対象サーバは DOWN と判定されます。
retry が 5 の場合、7回連続でヘルスチェックに失敗した場合(1度失敗後、6回連続でヘルスチェックに失敗した場合)に DOWN と判定されます。
ヘルスチェックで使用できるプロトコル
ヘルスチェックで使用できるプロトコルとして以下のようなものがあります。
vThunder(config-health:monitor)#method ?
compound Compound type
database DATABASE type
dns DNS type
external EXTERNAL type
ftp FTP type
http HTTP type
https HTTPS type
icmp ICMP type
imap IMAP type
kerberos-kdc Kerberos KDC type
ldap LDAP type
ntp NTP type
pop3 POP3 type
radius RADIUS type
rtsp RTSP type
sip SIP type
smtp SMTP type
snmp SNMP type
tacplus TACACS+ type
tcp TCP type
udp UDP type
各プロトコルのヘルスチェックの設定方法について詳しくは公式マニュアルを参照してください。
ヘルスチェック状態の確認コマンド
show health stat
コマンドで各サーバのヘルスチェック状態を確認できます。
以下のようなslb server設定がされているとします。
slb server Sample_Server 192.168.200.1
port 20000 tcp
health-check sample-monitor
port 20010 tcp
この場合のshow health stat
コマンドの出力例は以下です。最初に統計情報が表示され、それに続き各サーバ・サービスポートのヘルスチェック状態一覧が表示されます。
vThunder#show health stat
Health monitor statistics
Total run time : 3 hours 2 minutes 48 seconds
Number of burst : 0
max scan jiffie : 77
min scan jiffie : 1
average scan jiffie : 2
Opened socket : 230
Open socket failed : 0
Close socket : 229
Connect failed : 0
Send packet : 506
Send packet failed : 0
Receive packet : 506
Receive packet failed : 0
Retry times : 0
Timeout : 0
Unexpected error : 0
Conn Immediate Success : 0
Socket closed before l7 : 0
Socket closed without fd notify : 0
SSL Post Handshake Packet : 0
Timeout with Packets : 0
Configured health-check rate(/500ms) : Auto configured
Current health-check rate(/500ms) : 1
External health-check max rate(/200ms) : 2
Total number : 3
Status UP : 3
Status DOWN : 0
Status UNKN : 0
Status OTHER : 0
IP address Port Health monitor Status Cause(Up/Down) Reason(Up/Down) Retry PIN
--------------------------------------------------------------------------------------------------------------------------
192.168.200.1 default UP 11 /0 @0 ICMP Receive OK 0 0 /0 0
192.168.200.1 20000 sample-monitor UP 10 /41 @10 HTTP Status Code OK 0 0 /0 0
192.168.200.1 20010 default UP 20 /0 @0 TCP Verify Connection OK 0 0 /0 0
デフォルトのヘルスチェックが使用されている場合、「Health monitor」列では「default」と表示されます。
ヘルスチェックの設定例
HTTP GET によるコンテンツチェック
Web サーバに対するヘルスチェックとして HTTP GET メソッドを使用したコンテンツチェックをすることがあります。
以下は Web サーバのパス /healthcheck に対して HTTP による GET リクエストを行い、レスポンスステータスコードが 200 となることを確認するヘルスチェックの設定例です。
health monitor sample-monitor
method http expect response-code 200 url GET /healthcheck
slb server Sample_Server 192.168.200.1
port 20000 tcp
health-check sample-monitor
この場合にサーバ側でパケットキャプチャを行うと、以下のように A10 Thunder から Web サーバのパス /healthcheck に対して GET リクエストが送信されていることを確認できます。
まとめ
- ロードバランサでは転送先サーバの状態を監視するヘルスチェックを行っている
- ヘルスチェックにはサーバに対するヘルスチェックとサービスポートに対するヘルスチェックの2種類がある
- 明示的に設定せずともデフォルトでサーバに対しては ICMP のヘルスチェックが、サービスポートに対しては TCP または UDP のヘルスチェックが実施される
show health stat
コマンドでヘルスチェック状態を確認できる
参考資料
A10 Thunder の設計構築に役立つ関連記事一覧
- 基礎知識
- ヘルスチェック
- aFleX
Amazon アフィリエイトリンク
以下は Amazon アフィリエイトリンクです。インフラエンジニアにそこそこおすすめなアイテムです。
note メンバーシップへの参加もお待ちしています!
【アフィリエイト】おすすめ WordPress テーマ【SWELL】
当サイトでは WordPress テーマとして SWELL を使用しています。以前は無料・高機能テーマとして知られる Cocoon を使用していて Cocoon も使いやすかったのですが、SWELL を使い始めてからは SWELL のほうが圧倒的に使いやすいなと思いました。そして何より読み込み速度が速い。SWELL を使い始めてから、過去の Cocoon のブログを見直したときに「あれ、こんなに表示遅かったっけ?」という感覚になりました。
また SWELL はデフォルトでもオシャレなデザインですが柔軟にカスタマイズすることもでき個性のあるサイトを作成できます。さらにブログパーツや広告タグといった再利用可能なブログの「部品」も作成することができ、ブログ作成効率も高いです。
技術ブログやアフィリエイト等での収益化を見据えたブログの作成に SWELL は最適です。初見では価格が高いなと思うと思いますが、私としては SWELL を採用して良かったしそれ以上の価値があると感じています。
ブログの新設やテーマ変更を考えている人は一度 SWELL を検討してみてください。
以下の画像リンクから詳細な情報を確認できます。
レンタルサーバーを探している人には安定性に定評のあるエックスサーバーをお勧めします。
当サイトもエックスサーバーを使用しています。WordPress のインストールも簡単にできます。
コメント