負荷分散と可用性

ヘルスチェック へるすちぇっく

死活監視ロードバランサー可用性フェイルオーバー監視サーバー冗長化
ヘルスチェックって何?

簡単に言うとこんな感じ!

サーバーが「ちゃんと動いてる?」って定期的に確認する仕組みだよ。お店の開店前に「電気つく?レジ動く?」ってチェックするイメージで、問題があるサーバーには仕事を回さないようにしてくれるんだ!


ヘルスチェックとは

ヘルスチェックとは、サーバーやサービスが正常に動作しているかどうかを定期的に自動確認する仕組みのことです。人間の健康診断と同じように、「異常がないか」を繰り返しチェックして、問題が見つかったら即座に対処できるようにします。

ロードバランサー(複数のサーバーに処理を振り分ける機器やソフトウェア)は、ヘルスチェックの結果をもとに「どのサーバーにアクセスを流すか」を判断しています。チェックに失敗したサーバーは自動的に振り分け対象から外され(切り離し)、復旧すれば再び戻ります。これにより、ユーザーは障害を意識することなくサービスを使い続けられます。

システム発注の現場では「冗長化してあるから安心」と言われることがありますが、ヘルスチェックなしの冗長化は「壊れたサーバーにも仕事を送り続ける」状態になりかねません。可用性(システムが使える状態にある割合) を本当に高めるには、ヘルスチェックと冗長化がセットで必要です。


ヘルスチェックの種類と仕組み

ヘルスチェックには、チェックの「深さ」によっていくつかの種類があります。

種類チェック内容精度負荷
pingチェック(L3)サーバーが生きているか(IPレベル)最小
TCPチェック(L4)ポートが開いているか(接続できるか)
HTTPチェック(L7)特定URLへのリクエストが正常に返るか
アプリケーションチェックDB接続・外部API連携など業務処理が動くか最高

チェックの流れ

ロードバランサー ──[GET /health]──▶ サーバーA  ✅ 200 OK  → 振り分け継続
                                 ▶ サーバーB  ❌ タイムアウト → 切り離し
                                 ▶ サーバーC  ✅ 200 OK  → 振り分け継続

よく使われるヘルスチェック用エンドポイント

アプリケーション側に専用のURLを用意するのが一般的です。

エンドポイント例意味
GET /health基本的な死活確認
GET /healthzKubernetes環境でよく使われる
GET /ready「リクエストを受け付けられる状態か」の確認
GET /liveプロセスが生きているか」の確認

判定パラメーターの例

パラメーター説明典型的な設定値
チェック間隔何秒おきに確認するか10〜30秒
タイムアウト何秒待って無応答なら失敗とするか5秒
失敗しきい値何回連続失敗で切り離すか2〜3回
成功しきい値何回連続成功で復帰とするか2〜3回

歴史と背景

  • 1990年代: 初期のWebシステムは単一サーバーが主流で、障害時は手動での復旧が当たり前だった
  • 2000年代前半: ECサイトや金融系サービスの普及とともに、複数サーバーの負荷分散(ロードバランシング)が普及し始める。ハードウェア製品(F5 BIG-IPなど)でのヘルスチェック機能が定着
  • 2000年代後半: AWS ELB(Elastic Load Balancing、2009年)などクラウドのロードバランサーが登場し、ヘルスチェックが標準機能として提供されるように
  • 2010年代: マイクロサービス(機能を小さなサービスに分割するアーキテクチャ)の広まりとともに、サービス単位のヘルスチェックが重要性を増す
  • 2014年〜: Kubernetes(コンテナ管理プラットフォーム)がliveness probereadiness probestartup probeという3種類のヘルスチェックを定義し、業界標準的な概念として普及
  • 2020年代: SRE(Site Reliability Engineering) の考え方が広まり、ヘルスチェックは「可観測性(Observability)」の基礎として体系的に位置づけられている

ロードバランサーとの連携・フェイルオーバーの全体像

ヘルスチェックは単体で機能するのではなく、ロードバランサーフェイルオーバーの仕組みと組み合わさって初めて効果を発揮します。

ヘルスチェック + フェイルオーバーの仕組み ユーザー (ブラウザ・アプリ) ロードバランサー (ヘルスチェックで振り分け先を判断) サーバーA ✅ 正常稼働中 サーバーB ❌ 障害検知・切り離し サーバーC ✅ 正常稼働中 チェック成功 → 継続 チェック失敗 → 振り分け停止 チェック成功 → 継続

Kubernetesの3種類のProbe(ヘルスチェック)

Kubernetesでは、ヘルスチェックを目的別に3種類定義しています。

Probe名確認すること失敗時の動作
Liveness Probeコンテナが生きているか(デッドロックしていないか)コンテナを再起動する
Readiness Probeリクエストを受け付けられる状態か(起動完了・DB接続済み等)一時的に振り分けから除外
Startup Probe起動処理が完了したか(重いアプリの起動待ち用)完了まで他のProbeを待機

比較:監視ツールのヘルスチェックとの違い

観点ロードバランサーのヘルスチェック監視ツール(Zabbixなど)のヘルスチェック
主な目的振り分け先の自動制御アラート通知・障害記録
失敗時の自動対処自動で切り離し・復帰通知のみ(人が判断)
チェック間隔数秒〜30秒1〜5分程度
対象同一サービス内のサーバー群広範なシステム全体

関連する規格・RFC

規格・RFC番号内容
RFC 9110HTTP Semantics(ヘルスチェックで使われるHTTPの基礎仕様)
RFC 8615Well-Known URIs(/.well-known/ パスの標準化。ヘルスエンドポイントのパス設計に関連)

関連用語

  • ロードバランサー — 複数サーバーへのアクセスを振り分ける装置・ソフトウェア
  • フェイルオーバー — 障害発生時に自動で予備システムへ切り替える仕組み
  • 冗長化 — 障害に備えてシステムを二重・三重に構成すること
  • 可用性 — システムが正常に利用できる状態にある割合(稼働率
  • ロードバランシング — 処理を複数のサーバーに分散させる技術・手法
  • Kubernetes — コンテナアプリを自動管理するプラットフォーム
  • マイクロサービス — アプリを小さな独立したサービスに分割するアーキテクチャ
  • 死活監視 — サーバーやサービスが動いているかを継続的に確認する監視手法