keepalivedのヘルスチェックって80ポート(http)で行うのがデフォだと思うんですけど、なぜL7層で行うんですか? ICMPとかでやるのではなんでだめなの? |
| |
|
良い視点です。 結論から言うと、ICMPやTCP接続だけだと「サーバが本当にサービスを提供できるか」が分からないからです。 例えばKeepalivedでWebサーバを冗長化している場合を考えます。 ICMPだけの問題サーバAで
でも
だったらどうでしょう。 pingは返るので、 しかし利用者から見るとWebサイトは死んでいます。 TCP接続だけの問題次に80/TCPの接続確認。 が返れば正常と判断できます。 しかし、
という状態でもTCP接続は成功します。 HTTPチェックなら例えば を実行して を確認できます。 さらに
まで見られます。 つまり 「ユーザー目線でサービスが使えるか」 を確認できます。 ただしL7が常に正解ではない実はKeepalivedでもよくあるのは、 VRRP用のヘルスチェックで
など好きな判定を行う方法です。 例えば だけ見るケースもあります。 なぜデフォルトでHTTPが多いのかKeepalived自体のデフォルトというより、 Webサーバ冗長化のサンプル構成が になっていることが多いです。 理由は単純で、 Webサービスの生死を最も正確に確認できるから です。 実務ではどこまで見る?レベルごとに整理すると レベル1ICMP 確認できる:
レベル2TCP接続 確認できる:
レベル3HTTP 200 確認できる:
レベル4専用ヘルスチェック 例えば で
まで行う 最近の本番環境はここまでやることが多いです。 逆にL7をやりすぎる問題注意点もあります。 例えば が
全部確認 になっていると、 外部APIが一時的に遅いだけでVIP切替が発生します。 これを過剰フェイルオーバーと呼びます。 そのため、 「そのサーバを切り離すべき障害か」 を意識してヘルスチェック項目を選びます。 まとめICMPやTCPチェックでは、
ことしか分かりません。 一方HTTPチェックは、 「利用者が実際にサービスを使える状態か」 を確認できます。 そのためWebサービスの冗長化では、ICMPよりもL7(HTTP)のヘルスチェックが好まれることが多いのです。 |
| |
|

この記事へのコメント