では、今日も授業を始める。今日はロードバランサー(負荷分散装置)のヘルスチェックだ。
ロードバランサーの続きね。
ロードバランサーが、負荷分散対象のサーバーの状態をチェックする「ヘルスチェック」という機能を覚えておこう。
ヘルスチェックは、定期的に分散対象のサーバを監視して、もしサーバがダウンしていたら、そのサーバへは通信を振らなくなる。
その後、そのサーバがヘルスチェックに応答するようになったら、再度負荷分散対象に戻すというものだ。
ヘルスチェックせずに、ロードバランシングすると、通信を振った先のサーバが障害発生中だと通信できなくなっちゃうってことね。
うむ。このヘルスチェックは、負荷分散装置がサーバに対して、常に行っている。設定によるが、通常は数秒間隔でチェックしている。
ヘルスチェックは、負荷分散装置が通信を振る先(負荷分散先)のサーバに対して、通信可能な状態かチェックする機能だが、
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.ヘルスチェックはサーバがヘルスチェックに応答するようになったら、再度負荷分散対象に戻す