Отказоустойчивый веб-сайт с DNS-балансировкой нагрузки
- Подготовьте облако к работе
- Подготовьте сетевую инфраструктуру
- Создайте виртуальные машины с предустановленным веб-сервером
- Загрузите файлы веб-сайта
- Создайте виртуальные машины для DNS-балансировщиков
- Установите и настройте ПО DNS-балансировщика
- Настройте DNS
- Протестируйте отказоустойчивость
- Как удалить созданные ресурсы
В этом сценарии описано, как настроить веб-сайт с балансировкой нагрузки между двумя зонами доступности, защищенный от сбоев в одной зоне.
Чтобы настроить отказоустойчивый веб-сайт с DNS-балансировкой нагрузки:
- Подготовьте облако к работе.
- Подготовьте сетевую инфраструктуру.
- Cоздайте две виртуальные машины с предустановленным веб-сервером в разных зонах доступности.
- Загрузите файлы веб-сайта
- Создайте две виртуальные машины для DNS-балансировщиков в разных зонах доступности.
- Установите и настройте ПО DNS-балансировщика.
- Настройте DNS.
- Протестируйте отказоустойчивость.
Если сайт вам больше не нужен, удалите все используемые им ресурсы.
Подготовьте облако к работе
Перед тем, как разворачивать сервер, нужно зарегистрироваться в Yandex.Cloud и создать платежный аккаунт:
- Перейдите в консоль управления, затем войдите в Yandex.Cloud или зарегистрируйтесь, если вы еще не зарегистрированы.
- На странице биллинга убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе
ACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша виртуальная машина, на странице облака.
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры 1С-Битрикс входит:
- плата за постоянно запущенные виртуальные машины (см. тарифы Yandex Compute Cloud);
- плата за использование динамического внешнего IP-адреса (см. тарифы Yandex Virtual Private Cloud).
Подготовьте сетевую инфраструктуру
Перед тем, как создавать виртуальные машины:
- Перейдите в консоль управления Yandex.Cloud и выберите каталог, в котором будете выполнять операции.
- Убедитесь, что в выбранном каталоге есть сеть с подсетями в зонах доступности
ru-cental1-a
иru-central1-b
. Для этого на странице каталога выберите сервис Virtual Private Cloud. Если в списке есть сеть — нажмите на нее, чтобы увидеть список подсетей. Если нужных подсетей или сети нет, создайте их.
Создайте виртуальные машины с предустановленным веб-сервером
Последовательно создайте две виртуальные машины по инструкции:
-
На странице каталога нажмите кнопку Создать ресурс и выберите Виртуальная машина.
-
В поле Имя введите имя виртуальной машины:
- для первой машины —
dns-lb-tutorial-web-ru-central1-a
; - для второй машины —
dns-lb-tutorial-web-ru-central1-b
.
- для первой машины —
-
Выберите зону доступности:
- для первой машины —
ru-central1-a
; - для второй машины —
ru-central1-b
.
- для первой машины —
-
Выберите один публичный образ для обеих виртуальных машин:
- LEMP для Linux, nginx, MySQL, PHP;
- LAMP для Linux, Apache, MySQL, PHP.
-
В блоке Вычислительные ресурсы:
- Выберите платформу.
- Укажите необходимое количество vCPU и объем RAM.
Характеристики обеих виртуальных машин должны совпадать.
Для функционального тестирования хватит минимальной конфигурации:
- Платформа — Intel Cascade Lake.
- Гарантированная доля vCPU — 5%.
- vCPU — 2.
- RAM — 1 ГБ.
-
В блоке Сетевые настройки выберите, к какой подсети необходимо подключить виртуальную машину при создании.
-
Укажите данные для доступа на виртуальную машину:
- В поле Логин введите имя пользователя.
- В поле SSH ключ вставьте содержимое файла открытого ключа.
Пару ключей для подключения по SSH необходимо создать самостоятельно. Для создания ключей используйте сторонние инструменты, например утилитыssh-keygen
в Linux и macOS или PuTTYgen в Windows.
-
Нажмите кнопку Создать ВМ.
Создание виртуальной машины может занять несколько минут. Когда виртуальная машина перейдет в статус RUNNING
, вы можете загрузить на нее файлы веб-сайта.
При создании виртуальной машине назначаются IP-адрес и имя хоста (FQDN). Эти данные можно использовать для доступа по SSH.
См. также
Загрузите файлы веб-сайта
Для виртуальных машин dns-lb-tutorial-web-ru-central1-a
и dns-lb-tutorial-web-ru-central1-b
выполните:
-
В блоке Сеть на странице виртуальной машины в консоли управления найдите публичный IP-адрес виртуальной машины.
-
Подключитесь к виртуальной машине по протоколу SSH.
-
Выдайте права на запись для вашего пользователя на директорию
/var/www/html
:UbuntuCentOS$ sudo chown -R "$USER":www-data /var/www/html
$ sudo chown -R "$USER":apache /var/www/html
-
Загрузите на виртуальную машину файлы веб-сайта с помощью протокола SCP.
Linux/macOSWindowsИспользуйте утилиту командной строки
scp
:$ scp -r <путь до директории с файлами> <имя пользователя ВМ>@<IP-адрес виртуальной машины>:/var/www/html
С помощью программы WinSCP скопируйте локальную директорию с файлами в директорию
/var/www/html
на виртуальной машине.
Создайте виртуальные машины для DNS-балансировщиков
Последовательно создайте две виртуальные машины по инструкции:
-
На странице каталога нажмите кнопку Создать ресурс и выберите Виртуальная машина.
-
В поле Имя введите имя виртуальной машины:
- для первой машины —
dns-lb-tutorial-slb-ru-central1-a
; - для второй машины —
dns-lb-tutorial-slb-ru-central1-b
.
- для первой машины —
-
Выберите зону доступности:
- для первой машины —
ru-central1-a
; - для второй машины —
ru-central1-b
.
- для первой машины —
-
Выберите публичный образ Ubuntu или CentOS. Поддерживаемые версии для Ubuntu: 16.04 или выше.
-
В блоке Вычислительные ресурсы:
- Выберите платформу.
- Укажите необходимое количество vCPU и объем RAM.
Характеристики обеих виртуальных машин должны совпадать.
Для функционального тестирования хватит минимальной конфигурации:
- Платформа — Intel Cascade Lake.
- Гарантированная доля vCPU — 5%.
- vCPU — 2.
- RAM — 1 ГБ.
-
В блоке Сетевые настройки выберите, к какой подсети необходимо подключить виртуальную машину при создании.
-
Укажите данные для доступа на виртуальную машину:
- В поле Логин введите имя пользователя.
- В поле SSH ключ вставьте содержимое файла открытого ключа.
Пару ключей для подключения по SSH необходимо создать самостоятельно. Для создания ключей используйте сторонние инструменты, например утилитыssh-keygen
в Linux и macOS или PuTTYgen в Windows.
-
Нажмите кнопку Создать ВМ.
Создание виртуальной машины может занять несколько минут. Когда виртуальная машина перейдет в статус RUNNING
, вы можете установить и настроить ПО DNS-балансировщика.
При создании виртуальной машине назначаются IP-адрес и имя хоста (FQDN). Эти данные можно использовать для доступа по SSH.
См. также
Установите и настройте ПО DNS-балансировщика
Для виртуальных машин dns-lb-tutorial-slb-ru-central1-a
и dns-lb-tutorial-slb-ru-central1-b
выполните:
-
В блоке Сеть на странице виртуальной машины в консоли управления найдите публичный IP-адрес виртуальной машины.
-
Подключитесь к виртуальной машине по протоколу SSH. Для этого можно использовать утилиту
ssh
в Linux и macOS и программу PuTTY для Windows.Рекомендуемый способ аутентификации при подключении по SSH — с помощью пары ключей. Не забудьте настроить использование созданной пары ключей: закрытый ключ должен соответствовать открытому ключу, переданному на виртуальную машину.
-
Установите необходимые зависимости:
Ubuntu 16/18CentOS 6/7$ sudo apt-get update $ sudo apt-get install pdns-server pdns-backend-remote memcached python3-yaml python3-memcache python3-pip
$ sudo yum check-update $ sudo yum -y install epel-release $ sudo yum -y install pdns pdns-backend-remote memcached python34-yaml python34-setuptools git nano $ sudo service memcached start $ sudo chkconfig pdns on $ sudo chkconfig memcached on
-
Установите
polaris-gslb
:$ git clone https://github.com/polaris-gslb/polaris-gslb.git $ cd polaris-gslb $ sudo python3 setup.py install
-
Скопируйте файлы конфигурации для polaris-gslb
Ubuntu 16/18CentOS 6CentOS 7$ sudo cp /opt/polaris/etc/pdns.conf.dist /etc/powerdns/pdns.conf $ cd /opt/polaris/etc $ sudo cp polaris-lb.yaml.dist polaris-lb.yaml $ sudo cp polaris-health.yaml.dist polaris-health.yaml $ sudo cp polaris-pdns.yaml.dist polaris-pdns.yaml $ sudo cp polaris-topology.yaml.dist polaris-topology.yaml
$ sudo cp /opt/polaris/etc/pdns.conf.dist /etc/pdns/pdns.conf $ cd /opt/polaris/etc $ sudo cp polaris-lb.yaml.dist polaris-lb.yaml $ sudo cp polaris-health.yaml.dist polaris-health.yaml $ sudo cp polaris-pdns.yaml.dist polaris-pdns.yaml $ sudo cp polaris-topology.yaml.dist polaris-topology.yaml $ sudo cp -a /opt/polaris/bin/polaris-health /etc/init.d/polaris-health $ sudo chkconfig polaris-health on
$ sudo cp /opt/polaris/etc/pdns.conf.dist /etc/pdns/pdns.conf $ cd /opt/polaris/etc $ sudo cp polaris-lb.yaml.dist polaris-lb.yaml $ sudo cp polaris-health.yaml.dist polaris-health.yaml $ sudo cp polaris-pdns.yaml.dist polaris-pdns.yaml $ sudo cp polaris-topology.yaml.dist polaris-topology.yaml
-
Узнайте внутренний адрес виртуальной машины:
$ hostname -i
-
В конфигурационном файле
pdns.conf
укажите внутренний IP-адрес виртуальной машины. Вы можете отредактировать конфигурационный файл с помощью утилитыnano
:Ubuntu 16/18CentOS 6/7$ sudo nano /etc/powerdns/pdns.conf
$ sudo nano /etc/pdns/pdns.conf
Файл
pdns.conf
имеет вид:# Polaris specific PDNS configuration ################################# # launch Which backends to launch and order to query them in # # Python3 binary must be in the $PATH! launch=remote remote-connection-string=pipe:command=/opt/polaris/bin/polaris-pdns,timeout=2000 local-address=<INTERNAL IP ADRESS> ################################# # distributor-threads Default number of Distributor (backend) threads to start # # distributor-threads=3 # logs received from a Polaris remotebackend will be logged from loglevel 6 # # loglevel=6 # If not using the topology load balancing method, comment out the caching # options below to greatly improve the backend performance ################################# # cache-ttl Seconds to store packets in the PacketCache # # cache-ttl=20 cache-ttl=0 ################################# # negquery-cache-ttl Seconds to store negative query results in the QueryCache # # negquery-cache-ttl=60 negquery-cache-ttl=0 ################################# # query-cache-ttl Seconds to store query results in the QueryCache # # query-cache-ttl=20 query-cache-ttl=0
Укажите внутренний IP-адрес в значении параметра
local-address
вместо<INTERNAL IP ADRESS>
. -
Настройте
polaris-gslb
. Вы можете отредактировать конфигурационные файлы с помощью утилитыnano
:-
$ sudo nano /opt/polaris/etc/polaris-lb.yaml
Файл
polaris-lb.yaml
имеет вид:pools: www-example: monitor: http monitor_params: hostname: www.example.com url_path: / lb_method: wrr fallback: any members: - ip: <dns-lb-tutorial-web-ru-central1-a PUBLIC IP> name: dns-lb-tutorial-web-ru-central1-a weight: 1 - ip: <dns-lb-tutorial-web-ru-central1-b PUBLIC IP> name: dns-lb-tutorial-web-ru-central1-b weight: 1 globalnames: www.example.com: pool: www-example ttl: 1
Укажите в файле:
- Вместо
www.example.com
— имя вашего домена. - Вместо
<dns-lb-tutorial-web-ru-central1-a PUBLIC IP>
— публичный IP-адрес виртуальной машиныdns-lb-tutorial-web-ru-central1-a
. - Вместо
<dns-lb-tutorial-web-ru-central1-b PUBLIC IP>
— публичный IP-адрес виртуальной машиныdns-lb-tutorial-web-ru-central1-b
.
Публичный адрес виртуальной машины вы можете найти в блоке Сеть на странице виртуальной машины в консоли управления.
- Вместо
-
$ sudo nano /opt/polaris/etc/polaris-pdns.yaml
Файл
polaris-pdns.yaml
имеет вид:############################### # SOA record format # MNAME RNAME SERIAL REFRESH RETRY EXPIRE MINIMUM # polaris.example.com. hostmaster.polaris.example.com. 42 3600 600 86400 1 ############################### # SOA MNAME, must end with a dot. # SOA_MNAME: dns-lb-tutorial-slb-ru-central1-a.example.com. ############################### # SOA_RNAME, must end with a dot. # SOA_RNAME: hostmaster.example.com. ############################### # SOA serial can either be an absolute numeric value e.g. 1(default), or "auto", # which automatically sets the serial to seconds since the epoch of the last state # update. # # SOA_SERIAL: 1 ############################### # SOA REFRESH # # SOA_REFRESH: 3600 ############################### # SOA RETRY # # SOA_RETRY: 600 ############################### # SOA EXPIRE # # SOA_EXPIRE: 86400 ############################### # SOA MINIMUM # # SOA_MINIMUM: 1 ############################### # TTL to set on SOA record # # SOA_TTL: 86400 ################################ # Whether to log a detailed request/response information to pdns. # If set to "true", pdns.conf "loglevel" option must be set to 6 or higher. # # Setting to "false" will improve the backend performance. # # LOG: false ################################ # Memcache hostname/ip:port to use e.g. "192.168.1.10:12345", # if port is omitted the default memcache port is used. # # SHARED_MEM_HOSTNAME: 127.0.0.1
Укажите в файле вместо
www.example.com
— имя вашего домена.
-
-
Если на виртуальной машине установлена ОС CentOS 6, пропустите этот шаг.
Настройте проверки состояния для
polaris-gslb
:- Добавьте
systemd Unit
файл для проверки состоянияpolaris-gslb
. Вы можете отредактировать файл с помощью утилитыnano
:$ sudo mkdir -p /etc/systemd/system $ sudo nano /etc/systemd/system/polaris-health.service
polaris-health.service
файл к виду:[Unit] Description=Polaris-GSLB Health Check After=network-online.target [Service] ExecStart=/opt/polaris/bin/polaris-health start Type=forking Restart=on-failure RestartSec=1 StartLimitInterval=0 [Install] WantedBy=multi-user.target
- Добавьте
polaris-health
в автозагрузку операционной системы:$ sudo systemctl enable polaris-health
- Добавьте
-
Перезапустите PowerDNS:
$ sudo service pdns restart
-
Запустите проверку состояния
polaris-health
:$ sudo service polaris-health start
-
Этот шаг нужно выполнять только на виртуальной машине с ОС CentOS 6.
Откройте сетевой порт 53 с помощью утилиты
iptables
:$ sudo iptables -I INPUT -p tcp -m tcp --dport 53 -j ACCEPT $ sudo iptables -I INPUT -p udp -m udp --dport 53 -j ACCEPT $ sudo iptables-save | sudo tee /etc/sysconfig/iptables
Настройте DNS
Доменное имя, которое вы хотите использовать для веб-сайта, нужно связать с созданными виртуальными машинами.
В инструкции ниже описана настройка внешнего DNS-сервиса на примере reg.ru для доменных имен www.example.com
и example.com
.
Чтобы настроить внешний DNS-сервер, выполните:
- Найдите публичные IP-адреса виртуальных машин
dns-lb-tutorial-slb-ru-central1-a
иdns-lb-tutorial-slb-ru-central1-b
в блоке Сеть на страницах виртуальных машин в консоли управления. - Войдите в панель управления внешнего DNS-сервиса. Перейдите в список ваших доменов и нажмите на имя нужного домена.
- Создайте две A-записи:
- Для виртуальной машины
dns-lb-tutorial-slb-ru-central1-a
:- IP Address — публичный IP-адрес вашей виртуальной машины.
- Subdomain —
dns-lb-tutorial-slb-ru-central1-a
.
- Для виртуальной машины
dns-lb-tutorial-slb-ru-central1-b
:- IP Address — публичный IP-адрес вашей виртуальной машины.
- Subdomain —
dns-lb-tutorial-slb-ru-central1-b
.
- Для виртуальной машины
- Создайте 2 NS-записи со значениями полей:
- Для виртуальной машины
dns-lb-tutorial-slb-ru-central1-a
:- Subdomain —
www
. - Canonical name —
dns-lb-tutorial-slb-ru-central1-a.example.com.
.
- Subdomain —
- Для виртуальной машины
dns-lb-tutorial-slb-ru-central1-b
:- Subdomain —
www
. - Value —
dns-lb-tutorial-slb-ru-central1-b.example.com.
.
- Subdomain —
- Для виртуальной машины
- Подождите 15-20 минут, пока изменения DNS-записей вводятся в действие. Время ожидания может отличаться для вашего DNS-сервиса.
Протестируйте отказоустойчивость
DNS-балансировщики
- В блоке Сеть на странице виртуальной машины в консоли управления найдите публичный IP-адрес виртуальной машины
dns-lb-tutorial-slb-ru-central1-a
. - Подключитесь к виртуальной машине по протоколу SSH.
- Остановите сервис DNS, чтобы сымитировать сбой в работе DNS-баласировщика:
$ sudo service pdns stop
- Подключитесь к вашему веб-сайту через браузер. Несмотря на сбой в работе одного из DNS-балансировщиков, подключение должно пройти успешно.
- После завершения проверки запустите сервис DNS:
$ sudo service pdns start
Веб-серверы
-
В блоке Сеть на странице виртуальной машины в консоли управления найдите публичный IP-адрес виртуальной машины
dns-lb-tutorial-web-ru-central1-a
. -
Подключитесь к виртуальной машине по протоколу SSH.
-
Остановите веб-сервис, чтобы сымитировать сбой в работе веб-сервера:
LAMPLEMP$ sudo service apache2 stop
$ sudo service nginx stop
-
Подключитесь к вашему веб-сайту через браузер. Несмотря на сбой в работе одного из веб-серверов, подключение должно пройти успешно.
-
После завершения проверки запустите веб-сервис:
LAMPLEMP$ sudo service apache2 start
$ sudo service nginx start
Как удалить созданные ресурсы
Чтобы перестать платить за развернутые серверы, достаточно удалить созданные виртуальные машины dns-lb-tutorial-web-ru-central1-a
и dns-lb-tutorial-web-ru-central1-b
.