




では、今日も授業を始める。今日はロードバランサー(負荷分散装置)のヘルスチェックだ。

ロードバランサーの続きね。

ロードバランサーが、負荷分散対象のサーバーの状態をチェックする「ヘルスチェック」という機能を覚えておこう。

ヘルスチェックは、定期的に分散対象のサーバを監視して、もしサーバがダウンしていたら、そのサーバへは通信を振らなくなる。
その後、そのサーバがヘルスチェックに応答するようになったら、再度負荷分散対象に戻すというものだ。

ヘルスチェックせずに、ロードバランシングすると、通信を振った先のサーバが障害発生中だと通信できなくなっちゃうってことね。

うむ。このヘルスチェックは、負荷分散装置がサーバに対して、常に行っている。設定によるが、通常は数秒間隔でチェックしている。

ヘルスチェックは、負荷分散装置が通信を振る先(負荷分散先)のサーバに対して、通信可能な状態かチェックする機能だが、
L3レベルでのヘルスチェックと、L4レベルでのヘルスチェックと、L7レベルでのヘルスチェックがある。
L3(エルサン)レベルのヘルスチェックでは、負荷分散装置から対象のサーバに対して、ICMPレベルで通信チェックをする。
つまり、ICMP(Internet Control Message Protocol)というプロトコルを利用して、PING(ピング)を送信して
ネットワークの疎通性があるかどうかをチェックする方法だが、これはあまり利用されない。

L3やL4やL7のL(エル)は、レイヤーのことだ。

レイヤーって?

階層のことだ。OSI参照モデル(オーエスアイさんしょうモデル)という用語を覚えておこう。
これは、国際標準化機構(ISO)によって策定されたもので、通信するときの機能を7つの階層(レイヤー)に分けて定義している。

7つのレイヤー(階層)があるってことね。

OSI参照モデルを以下の7つのレイヤーに分けて機能を分けている。
つまり、プロトコルを考えるとき、レイヤー7のプロトコルであれば、レイヤー2から6はまったく気にせずに、
レイヤー7のプロトコルの仕様のみを定義すればよい。
第7層:アプリケーション層
第6層:プレゼンテーション層
第5層:セッション層
第4層:トランスポート層
第3層:ネットワーク層
第2層:データリンク層
第1層:物理層

L3はネットワーク層、L4はトランスポート層、L7はアプリケーション層ってことね。

うむ。L3レベルでのヘルスチェックは、PING(ピング)やtraceroute(トレースルート)と同じICMPプロトコルを利用してる。

ロードバランサーのヘルスチェックはL4レベルでのヘルスチェック、
もしくはL7レベルでのヘルスチェックがよく利用される。

L4(エルヨン)レベルのヘルスチェックでは、負荷分散装置から対象のサーバに対して、TCP(ティーシーピー)のプロトコル、
もしくはUDP(ユーディーピー)のプロトコルで、レイヤー4レベルで通信できているかをチェックしている。
どちらでチェックするかは設定できる。

対象サーバのTCPポート番号もしくはUDPポート番号に対して、リクエストを送信して、その対象サーバのポートから応答があるかないかによって、
サーバのアプリケーションが動作しているかどうかをチェックする方法がL4レベルのヘルスチェックだ。

対象サーバからポート応答があるかないかをチェックしているってことね。

うむ。次に、L7(エルナナ)レベルのヘルスチェックは、負荷分散装置から対象のサーバに対して、
対象サーバのアプリケーションが正常に動作しているかまでチェックする方法だ。

どのようにアプリケーションレベルのL7レイヤーの正常性を確認するの?

負荷分散装置から、対象サーバに対して、コマンド(リクエスト)を送信して、
対象サーバからの応答をチェックする。もちろん、対象サーバのアプリケーションによって、コマンドが変わってくる。

負荷分散装置が送れるコマンドは、すべてのアプリケーションに対応しているの?

Noだ。負荷分散装置によって、どのアプリケーションレベルのヘルスチェック(監視)に対応しているかはバラバラだ。
例えば、HTTP、FTP、SMTP、POP3、IMAP4、DNSなどのアプリケーションに対応していたりする。

負荷分散装置がメールサーバに対して、L7レベルでヘルスチェックをする場合、
SMTPコマンドを送って、メールサーバから200番台の正常応答が返ってきたら、正常と判断するようになっている。

L7レベルのヘルスチェックの方がいいよね?だって、L4レベルのヘルスチェックの場合、
サーバのポートは応答を返していても、もし、アプリケーションレベルで障害になっていて、実際はアプリケーションのエラー応答が
クライアントに返るってことはないの?

その通りだ。L4で正常でも、アプリケーションがエラーを返すことはある。
L7の方がよい。あとは負荷分散装置が対象サーバのアプリケーションのL7ヘルスチェックに対応しているかどうかだ。
HTTPなどはL7で実装できる。独自のプロトコルでアプリケーションを作っている場合は対応できないこともあるだろう。

あと、L3レベルのヘルスチェックだと、ネットワークは疎通性があるってことは分かるけど、
ポートがダウンしているってこともあるから、あまり利用されないってことね。

では、今日はここまで。

は~い
1.ヘルスチェックは定期的に負荷分散対象のサーバを監視
2.ヘルスチェックはチェックに失敗したらそのサーバへ通信を振らなくなる
3.ヘルスチェックはサーバがヘルスチェックに応答するようになったら、再度負荷分散対象に戻す