Балансировка нагрузки с помощью round robin DNS

Управление ответами DNS (т. е. списком возвращенных IP-адресов) – хороший, хотя и очень противоречивый метод распространения приложения. Если вы хотите сократить расходы на оборудование и инфраструктуру, DNS может обеспечить высокую доступность.

Данное руководство поможет создать географически распределенное, высокодоступное приложение с минимальным простоем с помощью DNS.

Высокая доступность

Если от приложения зависит ваш бизнес, вы должны поддерживать его работу 24 часа в сутки 7 дней в неделю, без сбоев и простоя. К сожалению, горизонтальное масштабирование не всегда помогает избежать простоя (особенно если сбой произошел в центре обработки данных).

Разместив виртуальные серверы в разных центрах обработки в разных регионах, вы можете обеспечить более стабильную работу приложения.

Высокая доступность – это качество, присущее структурам, в которых нет единой точки отказа.

Примечание: Вы можете подключить плавающие IP-адреса. Плавающий IP-адрес – это общедоступный статический IP-адрес, который можно мгновенно присвоить другому серверу. Подробнее об этой функции читайте в статье Использование плавающих IP-адресов.

Структура развертывания высокодоступного приложения

Структура развертывания высокодоступного приложения зависит от обслуживания запросов из разных центров обработки данных.

Существует много способов реализации такой структуры, но проще всего, пожалуй, просто воспользоваться преимуществами DNS.

Базовая структура выглядит так:

________________
|                |
|     CLIENT     |
|  WEB BROWSER   |
|________________|
||
||
_______\/_______
|                |
|   DNS SERVER   |
|________________|
||
||
_______/  \_______
/                  \
/                    \
____________________                ____________________
|                    |              |                    |
|   SAN FRANCISCO    |              |   SAN FRANCISCO    |
|____________________|              |____________________|
|   ______________   |              |   ______________   |
|  |              |  |              |  |              |  |
|  |  WEB SERVER  |  |              |  |  WEB SERVER  |  |
|  | LOAD BALANCE |  |              |  | LOAD BALANCE |  |
|  |     PROXY    |  |              |  |     PROXY    |  |
|  |_____    _____|  |              |  |_____    _____|  |
|________|  |________|              |________|  |________|
||      __                  __      ||
||<=====||==================||=====>||
\/      \/                  \/      \/
____________________                ____________________
|                    |              |                    |
|    SAN FRANCISCO   |              |      NEW YORK      |
|____________________|              |____________________|
|   ______________   |              |   ______________   |
|  |              |  |              |  |              |  |
|  |  APP SERVER  |  |              |  |  APP SERVER  |  |
|  |______  ______|  |              |  |______  ______|  |
|   ______||______   |              |   ______||______   |
|  |              |  |              |  |              |  |
|  |   DATABASE   |<==================>|   DATABASE   |  |
|  |______________|  |              |  |______________|  |
|____________________|              |____________________|

Высокая доступность с помощью DNS

Когда пользователь вводит доменное имя веб-сайта, с помощью набора определенных правил (то есть протокола), веб-браузер подключается к серверам имен и запрашивает адреса машин, на которых размещен указанный веб-сайт. Получив IP-адрес, он отправляет запрос с некоторыми дополнительными данными на этот компьютер и отображает ответ.

DNS позволяет поддерживать несколько записей (даже одного вида), благодаря чему становится возможным перечислить несколько хостов.

Представьте ситуацию (как показано на приведенной выше схеме): вы указываете IP-адрес двух балансировщиков нагрузки или обратных прокси-серверов, расположенных в двух разных ЦОД, каждый из которых настроен для балансировки нагрузки между серверами приложений, которые также расположены в разных местах. Если один из центров обработки данных становится недоступным, веб-браузер клиента попытается использовать следующие записи IP-адресов, возвращаемые DNS-сервером, и повторить процесс для получения доступа к сайту.

Такая технология балансировки нагрузки называется round robin DNS.

На первый взгляд такая технология может показаться сложной. Попробуем подвести итоги:

  • DNS может содержать несколько записей для одного и того же домена.
  • DNS может возвращать список IP-адресов для одного и того же домена.
  • Когда веб-браузер запрашивает сайт, он будет пробовать эти IP-адреса один за другим, пока не получит ответ.
  • Эти IP-адреса должны указывать на не серверы приложений, а на балансировщики нагрузки или обратные прокси-серверы.
  • Обратные прокси должны распределять нагрузку между несколькими серверами в разных ЦОД.
  • Если центр обработки данных не работает и веб-браузер не может получить ответ от IP-адреса (то есть от балансировщика нагрузки), он попытается подключиться к другому адресу.
  • Скорее всего, второй балансировщик нагрузки вернет ответ на запрос клиента (вероятность того, что в разных ЦОД одновременно случится сбой, очень мала).
  • Серверы баз данных должны поддерживать репликацию.

Развертывание высокодоступного приложения

Примечание: Описанная ниже процедура не зависит от языка программирования или типа веб-сервера. Следуя этим инструкциям, вы можете достичь высокой доступности вне зависимости от фреймворка, веб-сервера или HTTP-сервера.

Настройка балансировки нагрузки или обратного прокси-сервера

Сначала нужно обеспечить балансировку нагрузки. Для этого подготовьте два (или больше) балансировщика нагрузки, которые смогут взаимодействовать с серверами приложений.

Создайте два сервера в двух разных ЦОД.

Чтобы обеспечить распределение нагрузки, установите Nginx, Apache или HAProxy.

Читайте также:

Узнайте IP-адрес балансировщиков.

Настройте записи DNS.

Запись A преобразовывает домен (например www.example.com) в понятный машине IP-адрес.

Настроив два балансировщика, создайте две записи А.

Обычно это можно сделать с помощью панели управления во вкладке DNS.

После этого настройте серверы приложений. Вам понадобится два сервера в разных ЦОД.

Затем нужно настроить балансировщики нагрузки для распределения и проксирования запросов между серверами приложения. Это можно сделать с помощью этих руководств:

Затем нужно настроить базу данных.

В зависимости от выбранного вами сервера базы данных выполните одно из предложенных руководств на сервере БД и настройте репликацию.

Tags: