← Провайдер Cloudflare Terraform / terraform / tutorial
4. Повышение производительности
В этом руководстве вы добавите второй источник для базовой циклической балансировки, а затем воспользуетесь Cloudflare Load Balancing продукт для переключения трафика при необходимости. Вы также улучшите конфигурацию балансировки нагрузки с помощью «геостиринга», чтобы обслуживать запросы с исходного сервера, географически ближайшего к вашим конечным пользователям.
Предварительные требования
- Завершено Руководство 1, Руководство 2 и Руководство 3
- Load Balancing включённый в вашем аккаунте Cloudflare
1. Добавьте еще одну запись DNS для www
Создайте новую ветку и добавьте запись DNS для вашего сервера в Азии:
git checkout -b step4-configure-load-balancingДобавьте запись DNS для второго веб-сервера, расположенного в Азии. Для примера,
IP-адрес этого сервера 198.51.100.15. Добавьте вторую запись 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"
}Примените это изменение, чтобы увидеть базовое поведение round robin:
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!Вы увидите произвольное распределение между двумя исходными серверами. У такой базовой балансировки нагрузки на основе DNS есть ограничения: она не выполняет проверки работоспособности, не поддерживает географическую маршрутизацию и даёт непредсказуемые схемы распределения. Для более сложных сценариев, например когда источники находятся в разных регионах или нужно автоматическое переключение при сбое, используйте Cloudflare Load Balancing.
2. Перейдите на использование продукта Cloudflare Load Balancing
Как описано в Руководство по Load Balancing, вам нужно будет выполнить три задачи:
- Создайте монитор для проверки работоспособности исходных серверов.
- Создайте пул из одного или нескольких исходных серверов, которые будут получать трафик с балансировкой нагрузки.
- Создайте балансировщик нагрузки с внешним именем хоста, например,
www.example.comи одним или несколькими пулами.
Отслеживать состояние источников можно с помощью базовой проверки работоспособности, которая отправляет GET-запрос на URL-адрес каждого источника. Если источник в течение пяти секунд возвращает код состояния 200 (OK), он считается исправным. Если проверка не проходит три раза подряд, источник считается неисправным. Такая проверка выполняется раз в минуту из нескольких регионов, и при обнаружении сбоев можно настроить уведомление по электронной почте.
В этом примере пул будет называться www-origins с двумя добавленными к нему источниками:
www-us(203.0.113.10)www-asia(198.51.100.15)
Пока пропустите любые формы геомаршрутизация.
При создании балансировщика нагрузки (LB) он будет заменить все существующие DNS-записи с таким же именем. Например, если вы создадите www.example.com балансировщик нагрузки ниже, он заменит собой два www записи DNS, которые вы определили ранее. Одно из преимуществ сохранения записей DNS заключается в том, что при временном отключении балансировки нагрузки соединения с этим хостом остаются возможными.
Чтобы добиться этого, добавьте конфигурацию балансировки нагрузки в 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 в разделе Трафик > Load Balancing. Вы должны увидеть монитор, пул и балансировщик нагрузки с индикаторами состояния. Теперь ваш балансировщик нагрузки будет:
- Интеллектуальное распределение трафика между источниками
- Автоматический обход неисправных серверов
- Обеспечьте мониторинг работоспособности в режиме реального времени