Управление ответами 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.
Читайте также:
- Использование Nginx в качестве проксирующего фронтенда Apache
- Балансировка нагрузки HTTP с помощью HAProxy на сервере Ubuntu
Узнайте IP-адрес балансировщиков.
Настройте записи DNS.
Запись A преобразовывает домен (например www.example.com) в понятный машине IP-адрес.
Настроив два балансировщика, создайте две записи А.
Обычно это можно сделать с помощью панели управления во вкладке DNS.
После этого настройте серверы приложений. Вам понадобится два сервера в разных ЦОД.
Затем нужно настроить балансировщики нагрузки для распределения и проксирования запросов между серверами приложения. Это можно сделать с помощью этих руководств:
- Использование Nginx в качестве проксирующего фронтенда Apache
- Балансировка нагрузки HTTP с помощью HAProxy на сервере Ubuntu
Затем нужно настроить базу данных.
В зависимости от выбранного вами сервера базы данных выполните одно из предложенных руководств на сервере БД и настройте репликацию.