あけましておめでとうございます。2025年は当サイトが飛躍を遂げる年になります> Membership

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

目次

本記事について

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

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

動作確認環境

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

  • A10 vThunder
    • version 5.2.1-P11

ヘルスチェックとは

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

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

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

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

サーバのヘルスチェックとポートのヘルスチェック

ヘルスチェックには以下の2種類があります。

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

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 リクエストが送信されていることを確認できます。

まとめ

  • ロードバランサでは転送先サーバの状態を監視するヘルスチェックを行っている
  • ヘルスチェックにはサーバに対するヘルスチェックサービスポートに対するヘルスチェックの2種類がある
  • 明示的に設定せずともデフォルトでサーバに対しては 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 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 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 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 の設計構築に役立つ関連記事一覧

Amazon アフィリエイトリンク

以下は Amazon アフィリエイトリンクです。インフラエンジニアにそこそこおすすめなアイテムです。

note メンバーシップへの参加もお待ちしています!

note(ノート)
陰の構築者たちのメンバーシップ|シェイド@陰の構築者 ネットワーク設計構築をする人に役立つメンバーシップです。 独自ブログ(https://shadowgarden.org/)にてネットワークエンジニア向け情報を発信しており、その活動を応援...

【アフィリエイト】おすすめ WordPress テーマ【SWELL

当サイトでは WordPress テーマとして SWELL を使用しています。以前は無料・高機能テーマとして知られる Cocoon を使用していて Cocoon も使いやすかったのですが、SWELL を使い始めてからは SWELL のほうが圧倒的に使いやすいなと思いました。そして何より読み込み速度が速い。SWELL を使い始めてから、過去の Cocoon のブログを見直したときに「あれ、こんなに表示遅かったっけ?」という感覚になりました。

また SWELL はデフォルトでもオシャレなデザインですが柔軟にカスタマイズすることもでき個性のあるサイトを作成できます。さらにブログパーツや広告タグといった再利用可能なブログの「部品」も作成することができ、ブログ作成効率も高いです。

技術ブログやアフィリエイト等での収益化を見据えたブログの作成に SWELL は最適です。初見では価格が高いなと思うと思いますが、私としては SWELL を採用して良かったしそれ以上の価値があると感じています。
ブログの新設やテーマ変更を考えている人は一度 SWELL を検討してみてください。
以下の画像リンクから詳細な情報を確認できます。

レンタルサーバーを探している人には安定性に定評のあるエックスサーバーをお勧めします。
当サイトもエックスサーバーを使用しています。WordPress のインストールも簡単にできます。

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

コメント

コメントする

目次