Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

4 – パフォーマンスを改善する

最終更新 Markdown で表示Agent セットアップ

このチュートリアルでは、基本的なラウンドロビン用に 2 つ目のオリジンを追加し、続けて Cloudflare Load Balancing で必要に応じてトラフィックをフェイルオーバーします。あわせて、geo steering を使い、エンドユーザーから地理的に最も近いオリジンサーバーから結果を返すよう、ロードバランシング設定を強化します。

前提条件

1. www 用の DNS レコードをもう 1 つ追加する

新しいブランチを作成し、アジアのサーバー用の DNS レコードを追加します。

git checkout -b step4-configure-load-balancing

アジアにある 2 台目の Web サーバー用の DNS レコードを追加します。例では、このサーバーの IP アドレスは 198.51.100.15 です。2 つ目の DNS レコードを main.tf に追加します。

# Asia origin server
resource "cloudflare_dns_record" "www_asia" {
  zone_id = var.zone_id
  name    = "www"
  content = "198.51.100.15"
  type    = "A"
  ttl     = 300
  proxied = true
  comment = "Asia origin server"
}

この変更を適用して、基本的なラウンドロビンの動作を確認します。

terraform plan
terraform apply

基本的な負荷分散をテストします。

# Make several requests to see both origins
for i in {1..4}; do
  curl https://www.example.com
  sleep 1
done

想定される出力:

Hello, this is 203.0.113.10!
Hello, this is 203.0.113.10!
Hello, this is 198.51.100.15!
Hello, this is 203.0.113.10!

2 つのオリジンサーバーのあいだで、ランダムに振り分けられます。この基本的な DNS ベースの負荷分散には制限があります。ヘルスチェックがなく、地理的なステアリングもなく、振り分けパターンも予測しにくいです。地理的に離れたオリジンや自動フェイルオーバーなど、より高度なシナリオでは Cloudflare の Load Balancing を使います。

2. Cloudflare の Load Balancing 製品に切り替える

Load Balancing チュートリアル で説明しているとおり、次の 3 つの作業が必要です。

  1. オリジンサーバーに対してヘルスチェックを実行するモニターを作成します。
  2. 負荷分散されたトラフィックを受け取る、1 つ以上のオリジンサーバーのプールを作成します。
  3. 外部ホスト名(例: www.example.com)と 1 つ以上のプールを持つロードバランサーを作成します。

各オリジンの URL に GET リクエストを送る基本的なヘルスチェックを作成して、オリジンを監視できます。オリジンが 5 秒以内にステータスコード 200(OK)を返すと、正常と見なします。3 回連続で失敗すると、異常と見なします。このヘルスチェックは複数のリージョンから 1 分に 1 回実行され、障害を検出したときにメール通知を設定できます。

この例では、プール名を www-origins とし、次の 2 つのオリジンを追加します。

  • www-us (203.0.113.10)
  • www-asia (198.51.100.15)

今は geo routing は使いません。

ロードバランサー(LB)を作成すると、同じ名前の既存の DNS レコードは置き換わります。たとえば、次の www.example.com ロードバランサーを作成すると、先に定義した 2 つの www DNS レコードより優先されます。DNS レコードを残しておく利点の 1 つは、ロードバランシングを一時的に無効にしても、このホスト名への接続が可能なことです。

上記を実現するには、ロードバランシング設定を main.tf に追加します。

# Health check monitor
resource "cloudflare_load_balancer_monitor" "health_check" {
  account_id     = var.account_id
  expected_body = "alive"
  expected_codes = "2xx"
  method         = "GET"
  timeout        = 5
  path           = "/health"
  interval       = 60
  retries        = 2
  description    = "Health check for www origins"
  type           = "https"

  header = {
    Host = ["${var.domain}"]
  }
}

# Origin pool
resource "cloudflare_load_balancer_pool" "www_pool" {
  account_id = var.account_id
  name       = "www-origins"
  monitor    = cloudflare_load_balancer_monitor.health_check.id

  origins = [{
    name    = "www-us"
    address = "203.0.113.10"
    enabled = true
  }, {
    name    = "www-asia"
    address = "198.51.100.15"
    enabled = true
  }]

  description     = "Primary www server pool"
  enabled         = true
  minimum_origins = 1
  notification_email = "<YOUR_EMAIL>"
  check_regions   = ["WEU", "EEU", "WNAM", "ENAM", "SEAS", "NEAS"]
}

# Load balancer
resource "cloudflare_load_balancer" "www_lb" {
  zone_id       = var.zone_id
  name          = "www.${var.domain}"
  default_pools = [cloudflare_load_balancer_pool.www_pool.id]
  fallback_pool = cloudflare_load_balancer_pool.www_pool.id
  description   = "Load balancer for www.${var.domain}"
  proxied       = true
}

変更をプレビューして適用します。

terraform plan
terraform apply

改善した負荷分散をテストします。

# Test load distribution with health monitoring
for i in {1..6}; do
  echo "Request $i:"
  curl -s https://www.example.com
  sleep 2
done

想定される出力:

Request 1:
Hello, this is 198.51.100.15!
Request 2:
Hello, this is 203.0.113.10!
Request 3:
Hello, this is 198.51.100.15!
Request 4:
Hello, this is 203.0.113.10!
Request 5:
Hello, this is 203.0.113.10!
Request 6:
Hello, this is 198.51.100.15!

ヘルス監視と自動フェイルオーバーが加わり、より予測しやすい負荷分散になります。

マージして確認します。

git add main.tf
git commit -m "Step 4 - Create load balancer (LB) monitor, LB pool, and LB"
git push

Cloudflare ダッシュボードの Traffic > Load Balancing で、設定が動作していることを確認します。モニター、プール、ロードバランサーと、ヘルスステータスの表示が見えるはずです。 ロードバランサーは次のように動作します。

  • オリジン間でトラフィックを適切に振り分けます
  • 異常なサーバーを自動的に回避します
  • リアルタイムのヘルス監視を提供します

役に立ちましたか?