INTEGRITY Dokumentace

4: Zlepšení výkonu

V tomto tutoriálu přidáte druhý origin server pro základní rozložení provozu metodou round robin a poté použijete Cloudflare Load Balancing podle potřeby přesměruje provoz při výpadku. Konfiguraci load balancing dále vylepšíte pomocí funkce "geo steering", která poskytuje výsledky z původního serveru, jenž je vašim koncovým uživatelům geograficky nejblíže.

Předpoklady

1. Přidejte další záznam DNS pro www

Vytvořte novou větev a přidejte záznam DNS pro váš server v Asii:

git checkout -b step4-configure-load-balancing

Přidejte záznam DNS pro druhý webový server umístěný v Asii. Pro účely tohoto příkladu je IP adresa tohoto serveru 198.51.100.15. Přidejte druhý záznam DNS do svého 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"
}

Použijte tuto změnu, abyste viděli základní chování round-robin:

terraform plan
terraform apply

Otestujte základní rozložení zátěže:

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

Očekávaný výstup:

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!

Uvidíte náhodné rozložení zátěže mezi dvěma origin servery. Tento základní load balancing založený na DNS má svá omezení: chybí kontroly stavu, geografické směrování a rozložení je nepředvídatelné. Pro pokročilejší scénáře, jako jsou origins v různých geografických lokalitách nebo automatické převzetí služeb při selhání, budete chtít použít Cloudflare Load Balancing.

2. Přejděte na používání produktu Cloudflare Load Balancing

Jak je popsáno v Návod pro Load Balancing, musíte splnit tři úkoly:

  1. Vytvoření monitoru, který provádí kontroly stavu vašich origin serverů.
  2. Vytvoření poolu jednoho nebo více origin serverů, na které bude směrován provoz rozdělovaný load balancerem.
  3. Vytvoření load balanceru s externím názvem hostitele, například www.example.com a jedním nebo více pooly.

Originy můžeme sledovat pomocí základní kontroly stavu, která na danou URL adresu každého originu posílá požadavek GET. Pokud origin do pěti sekund vrátí stavový kód 200 (OK), považuje se za funkční. Pokud se mu to třikrát za sebou nepodaří, považuje se za nefunkční. Tato kontrola se spouští jednou za minutu z několika regionů a v případě zjištěné chyby si můžete nastavit e-mailové upozornění.

V tomto příkladu se pool bude jmenovat www-origins se dvěma přidanými origin servery:

Prozatím přeskočte jakýkoli druh geografické směrování.

Když vytvoříte load balancer (LB), bude nahradit veškeré existující DNS záznamy se stejným názvem. Pokud například vytvoříte www.example.com load balanceru níže, nahradí tyto dva www záznamy DNS, které jste dříve definovali. Výhodou ponechání těchto záznamů DNS je to, že pokud vyvažování zátěže dočasně vypnete, spojení s tímto hostname budou stále možná.

Chcete-li toho dosáhnout, přidejte konfiguraci load balancingu do 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
}

Zobrazte náhled změn a použijte je:

terraform plan
terraform apply

Otestujte vylepšené vyvažování zátěže:

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

Očekávaný výstup:

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!

Nyní byste měli vidět předvídatelnější rozložení zátěže a navíc získáte výhody sledování stavu a automatického převzetí služeb při selhání.

Sloučit a ověřit:

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

Ověřte, že konfigurace funguje, kontrolou v Cloudflare dashboardu v části Provoz > Load Balancing. Měli byste vidět svůj monitor, pool a load balancer se stavovými indikátory dostupnosti. Váš load balancer nyní: