Cloud Service
Load Balancing
Cloudflareのエッジで複数オリジンへ通信を振り分け、ヘルスチェック連動の自動フェイルオーバーと地理分散で可用性を高める。AWSのRoute 53ルーティングポリシーやELBに相当する機能を併せ持つ。
- 1.エッジDNS層で複数オリジンへトラフィックを振り分ける交通整理役。
- 2.ヘルスチェックで異常オリジンを自動的に外し、プール間でフェイルオーバー。
- 3.ラウンドロビン・地理近接・重み付けなど複数のステアリングポリシーを選べる。
解決する課題
- 1つのオリジンに障害が起きてもサービスを止めたくない(自動フェイルオーバー)
- 複数リージョンのオリジンへユーザーを最も近い場所へ誘導したい
- メンテナンスやスケールに応じてトラフィックの配分比率を柔軟に変えたい
- オリジン専用のロードバランサ機器を持たずに、エッジ側で振り分けを完結させたい
主要概念と用語
- ロードバランサ(Load Balancer): 特定のホスト名(例えばwww.example.com)宛のリクエストを、定義したルールに従って複数オリジンへ振り分ける設定単位
- オリジンプール(Origin Pool): 振り分け先となるオリジンサーバー群のまとまり。各オリジンには重み(weight)を設定できる
- オリジン(Origin): プール内の個々の実サーバー。IPアドレスまたはホスト名で指定
- ヘルスモニター(Health Monitor): HTTP/HTTPS/TCP/UDP/ICMPなどでオリジンの死活を定期監視する設定。異常時にプールから自動的に除外する
- フォールバックプール(Fallback Pool): 優先プールが全滅した際に切り替わる予備のプール
- ステアリングポリシー(Steering Policy): プール内でどのオリジンへ振り分けるかの方式。ラウンドロビン・地理位置(proximity)・重み付け(random/dynamic weighted)・レイテンシ最小化などから選ぶ
- セッションアフィニティ(Session Affinity): Cookieベースで同一クライアントを同一オリジンへ継続して結びつける機能
- プールの優先順位/地理別ルーティング(Geo Steering): リクエスト元の地域ごとに優先するプールを変え、最寄りリージョンへ誘導する仕組み
仕様・制限・クォータ
- Cloudflareのグローバルエッジ網で動作するため、専用ハードウェアやリージョン限定のインフラを用意する必要がない
- ヘルスモニターはリージョンごとの複数拠点から監視でき、誤検知を避けるための地域指定が可能
- プール数・オリジン数・モニター数にはプランに応じた上限があり、詳細は公式ドキュメントとダッシュボードの表示に従う
- DNSベースの仕組みのため、最終的な切替速度はTTLとクライアント側のリゾルバキャッシュに影響される
- HTTP/HTTPSだけでなく、TCP/UDPアプリケーション向けの振り分け(Spectrumとの組み合わせ)にも対応する
内部の仕組み
Load Balancingは、対象ホスト名へのリクエストをCloudflareのエッジで受け、ヘルスモニターの結果を踏まえて生きているオリジンだけに振り分けます。
リクエストが到着すると、まずステアリングポリシーに従って候補オリジンプールを評価します。地理ステアリングであればリクエスト元の位置に最も近いプールを優先し、そのプールの全オリジンが異常であればフォールバックプールへ自動的に切り替わります。プール内では、重み付けやラウンドロビンなどのポリシーに従って個々のオリジンへ配分します。
ヘルスモニターは独立して定期的にオリジンへ疎通確認を行い、異常を検知するとそのオリジンをプールから即座に除外します。この判定はDNS応答やプロキシ経路の決定に反映されるため、アプリケーション側の変更なしに障害時の切り替えが行われます。
Load BalancingはCloudflareのプロキシ(オレンジクラウド)経由で使うことも、DNSの応答だけを制御するモードで使うこともできます。プロキシ経由ではWAFやキャッシュなど他のCloudflare機能と組み合わせやすく、切り替えの反映も速くなります。
設計パターン / ベストプラクティス
- プライマリプール+フォールバックプールの構成を基本とし、リージョン障害時に自動でセカンダリへ逃がす
- 複数リージョンにオリジンを分散させ、地理ステアリングでユーザーに最も近い拠点へ誘導しレイテンシを下げる
- ヘルスモニターのパス・しきい値・間隔を実際のアプリケーション挙動に合わせて調整し、誤検知による無駄なフェイルオーバーを避ける
- 段階的なリリースやカナリアテストには重み付けステアリングを使い、少しずつ新環境へトラフィックを寄せる
- セッションが必要なアプリケーションにはセッションアフィニティを使いつつ、可能な限りオリジン側をステートレスに設計する
フェイルオーバーを検知しても、クライアントや途中のリゾルバが古いDNS応答をキャッシュしている間は旧オリジンへの通信が残ります。プロキシ経由で使う、またはTTLを適切に短くしておくことが切替の速さに直結します。
運用・監視
- ダッシュボードやAPIで各プール/オリジンのヘルス状態をリアルタイムに確認できる
- ヘルスモニターの失敗やフェイルオーバーの発生を**通知(Notifications)**で受け取り、異常を早期に検知する
- ログやアナリティクスで振り分け結果とヘルスチェック履歴を追跡し、しきい値の妥当性を継続的に見直す
- フェイルオーバーが想定どおり動かない場合は、まずヘルスモニターの監視パスと認証設定、次にプールの優先順位設定を確認する
コスト
Load Balancingは基本的にプランに応じた月額または従量の料金体系で提供され、主にロードバランサ数・オリジン数・追加のヘルスチェック地域数などが変動要素になります。具体的な金額は変わりやすいため、契約中のプランと公式の料金ページで確認することが望ましいです。
| 課金対象 | 考え方 | コスト最適化のヒント |
|---|---|---|
| ロードバランサ(ホスト名単位) | 設定するロードバランサの数に応じて課金 | 本当に振り分けが必要なホスト名だけに限定する |
| 追加ヘルスチェック地域 | 監視拠点を増やすほど加算 | 誤検知が出ない範囲で必要最小限の拠点数にする |
| ヘルスチェック頻度・数 | モニター数と間隔に応じて変動 | 重要なオリジンに絞り、間隔を適切に調整する |
セキュリティ
- プロキシ経由(オレンジクラウド)で利用すれば、WAF・DDoS保護・Bot Managementなど他のセキュリティ機能と自然に組み合わさる
- オリジン側はCloudflareからの通信のみを許可し、直接インターネットからアクセスされないようにファイアウォールを構成する
- オリジン間の通信やヘルスチェックにはTLSを使用し、証明書の有効期限を継続的に管理する
- APIトークンでロードバランサ設定の変更権限を最小化し、誰がいつ振り分けルールを変えたかを監査する
オリジンのIPアドレスを直接公開し、Cloudflareを経由しない通信を許してしまうのはアンチパターンです。オリジン側でCloudflareのIPレンジ以外からの通信を遮断しないと、ロードバランサやWAFを迂回した攻撃を受ける可能性があります。
関連サービス・比較
Load BalancingはCloudflareのDNSおよびヘルスチェック機能と密接に連動します。AWSではRoute 53のルーティングポリシー群やElastic Load Balancingが近い役割を担います。
| 観点 | Cloudflare Load Balancing | Amazon Route 53 / ELB |
|---|---|---|
| 位置づけ | エッジ側のDNS+プロキシ連動ルーティング | DNSルーティング+別レイヤーのELB |
| フェイルオーバー | フォールバックプール | フェイルオーバールーティング |
| 重み付け分散 | Weightedステアリング | 加重ルーティング |
| 地理ベース | Proximity/Geo Steering | 位置情報ルーティング |
| 死活監視 | ヘルスモニター | Route 53ヘルスチェック |
| 適用単位 | ホスト名(ロードバランサ) | レコードセット単位 |
ハンズオン / CLI例
Cloudflareのロードバランサはダッシュボードから設定するのが一般的ですが、wranglerからCloudflare APIを呼び出す運用スクリプトの一例を示します。
# wrangler経由でCloudflare APIトークンの有効性を確認
wrangler whoami
# オリジンプールを作成(Cloudflare APIを直接呼び出す例)
curl -X POST "https://api.cloudflare.com/client/v4/accounts/${ACCOUNT_ID}/load_balancers/pools" \
-H "Authorization: Bearer ${CF_API_TOKEN}" \
-H "Content-Type: application/json" \
--data '{
"name": "primary-pool",
"origins": [
{ "name": "origin-a", "address": "203.0.113.10", "weight": 1, "enabled": true }
],
"monitor": "monitor-id-xxxx"
}'
# ヘルスモニターを作成
curl -X POST "https://api.cloudflare.com/client/v4/accounts/${ACCOUNT_ID}/load_balancers/monitors" \
-H "Authorization: Bearer ${CF_API_TOKEN}" \
-H "Content-Type: application/json" \
--data '{
"type": "https",
"path": "/healthz",
"interval": 60,
"retries": 2
}'
# ロードバランサ本体を作成し、プールとフォールバックプールを紐付け
curl -X POST "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/load_balancers" \
-H "Authorization: Bearer ${CF_API_TOKEN}" \
-H "Content-Type: application/json" \
--data '{
"name": "app.example.com",
"default_pools": ["primary-pool-id-xxxx"],
"fallback_pool": "fallback-pool-id-xxxx",
"proxied": true
}'
Cloudflare Service
Load Balancingを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
ネットワーキング
比較で見る軸
クラウド: Cloudflare / カテゴリ: ネットワーキング / 難易度: intermediate
導入後に効く点
ヘルスチェックで異常オリジンを自動的に外し、プール間でフェイルオーバー。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- Cloudflare
- カテゴリ
- ネットワーキング
- 難易度
- intermediate
- 関連資格
- —
- 設計柱
- reliability / performance / operational
判断チェックリスト
- 自社の用途が「ネットワーキング / reliability」に近いか確認する。
- 強みである「エッジDNS層で複数オリジンへトラフィックを振り分ける交通整理役。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。