【要注意】FortiGate v7.6.3 から全モデルでSSL VPNトンネルモードサポート終了> Membership

A10 Thunder SLB サーバのヘルスチェックについての基礎知識を解説

目次

本記事について

本記事では、A10ネットワークス社のロードバランサ製品である Thunder シリーズについて、SLBサーバのヘルスチェックの基礎知識として以下のような内容を解説します。

  • ヘルスチェックとは
  • 3種類のヘルスチェック
  • デフォルトのヘルスチェック動作
  • ヘルスチェック設定についての基礎知識
  • ヘルスチェック状態の確認コマンド
  • ヘルスチェックの設定例

動作確認環境

本記事は以下の環境にて動作確認した結果に基づいて作成されています。

  • A10 vThunder
    • version 5.2.1-P11

ヘルスチェックとは

ロードバランサにおけるヘルスチェックとはクライアントからの通信の転送先となるリアルサーバの状態を監視する機能のことです。

ロードバランサは定期的にリアルサーバに監視パケットを送信し、その応答を確認することでリアルサーバが正常に動作していることを確認します。

応答がないか異常を示す応答が返ってきたサーバについてはクライアント通信の転送先から除外されます。

この機能により、クライアント通信は常に正常なサーバに転送されるようになりサーバ障害発生時のサービス断時間を最小化することができます。

3種類のヘルスチェック

ヘルスチェックにはその適用対象によって以下の3種類があります。

3種類のヘルスチェック
  • サーバに対するヘルスチェック
  • サービスポートに対するヘルスチェック
  • サービスグループに対するヘルスチェック

サーバに対するヘルスチェック

サーバに対するヘルスチェックはレイヤ3のヘルスチェックでありそのサーバ自体が正常動作していることを確認するためのヘルスチェックです。サーバに対するヘルスチェックが失敗した場合、そのサーバ自体がDOWNと判定されます。

サービスポートに対するヘルスチェック

サービスポートに対するヘルスチェックはレイヤ4のヘルスチェックであり特定のサービスポートが正常に動作していることを確認するためのヘルスチェックです。サービスポートに対するヘルスチェックが失敗した場合、対象のサービスポートについてのみDOWNと判定されます。

サービスポートに対するヘルスチェックは、サーバに対するヘルスチェックが成功していることを前提としています。サーバに対するヘルスチェックが失敗している場合はサービスポートに対するヘルスチェックは実施されません。

サービスグループに対するヘルスチェック

サービスポートに対するヘルスチェックはそのグループのメンバーに対するヘルスチェックです。サービスグループに対するヘルスチェックが特定のメンバーに対して失敗した場合、そのサービスグループにおける対象メンバーの状態のみDOWNと判定されます。他のサービスグループの状態には影響を与えません。

サービスグループポートに対するヘルスチェックは、各メンバーサーバについてサーバに対するヘルスチェックとサービスポートに対するヘルスチェックの両方が成功していることを前提としています。これらの前提のヘルスチェックのいずれかが失敗しているメンバーについてはサービスグループに対するヘルスチェックが実施される以前にDOWN状態と判定されます。

3種類のヘルスチェックの設定箇所の違い

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

サービスグループに対するヘルスチェックの設定箇所は、以下のように対象service-group設定の配下となります。

slb service-group WebServerGrp tcp
  health-check sample-monitor '←★サービスグループに対するヘルスチェック設定'
  member WebServer01 80

一つのサービスポートに対してヘルスチェックは最大で3つ動作

上で説明した通り3種類のヘルスチェックがあり、それぞれは独立して設定できます。よって、一つのサービスポートに対して最大で3つのヘルスチェックを動作させることができるといえます。

デフォルトのヘルスチェック動作

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 と判定されます。

retry 設定は該当ヘルスモニタ設定がサーバに対して設定された場合にのみ有効です。ポートに対するヘルスチェックについては適用されたヘルスモニタ設定の retry 設定に関わらず1度ヘルスチェックに失敗した時点で 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 リクエストが送信されていることを確認できます。

まとめ

  • ロードバランサでは転送先サーバの状態を監視するヘルスチェックを行っている
  • ヘルスチェックにはサーバに対するヘルスチェックサービスポートに対するヘルスチェックサービスグループに対するヘルスチェックの3種類がある
  • 明示的に設定せずともデフォルトでサーバに対しては ICMP のヘルスチェックが、サービスポートに対しては TCP または UDP のヘルスチェックが実施される
  • show health statコマンドでヘルスチェック状態を確認できる

参考資料

A10 Networks Product Documentati...
Sign In | A10 Networks Product Documentation A10 Network customers with a valid support contract can register for an account to download the latest firmware versions, FAQs, application notes, and technical...

A10 Thunder の設計構築に役立つ関連記事一覧

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次