Отказоустойчивый сайт с балансировкой нагрузки с помощью Yandex Load Balancer

В этом сценарии описано, как настроить веб-сайт на стеке LAMP (Linux, Apache, MySQL, PHP) или LEMP (Linux, nginx, MySQL, PHP) с балансировкой нагрузки через Yandex Load Balancer между двумя зонами доступности, защищенный от сбоев в одной зоне.

Чтобы настроить отказоустойчивый веб-сайт с балансировкой нагрузки:

  1. Подготовьте облако к работе.
  2. Создайте виртуальные машины с предустановленным веб-сервером.
  3. Загрузите файлы веб-сайта.
  4. Создайте целевую группу.
  5. Создайте сетевой балансировщик.
  6. Протестируйте отказоустойчивость.

Если сайт вам больше не нужен, удалите все используемые им ресурсы.

Подготовьте облако к работе

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

  1. Перейдите в консоль управления, затем войдите в Облако или зарегистрируйтесь, если вы еще не зарегистрированы.
  2. На странице биллинга убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его.

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

Подробнее об облаках и каталогах.

Убедитесь, что в вашем каталоге есть сеть с подсетями в зонах доступности ru-cental1-a и ru-central1-b. Для этого на странице каталога выберите сервис Virtual Private Cloud. Если в списке есть сеть — нажмите на нее, чтобы увидеть список подсетей. Если нужной сети или подсетей нет, создайте их.

В стоимость поддержки веб-сайта входит:

Создайте виртуальные машины

Виртуальные машины должны быть созданы из одинаковых образов и их характеристики должны совпадать.

Создайте первую виртуальную машину с предустановленным веб-сервером

Создайте виртуальную машину:

  1. На странице каталога нажмите кнопку Создать ресурс и выберите Виртуальная машина.

  2. В поле Имя введите имя виртуальной машины: lb-tutorial-web-ru-central1-a.

  3. Выберите зону доступности: ru-central1-a.

  4. Выберите один публичный образ для обеих виртуальных машин:

    • LEMP для Linux, nginx, MySQL, PHP;
    • LAMP для Linux, Apache, MySQL, PHP.
  5. В блоке Вычислительные ресурсы:

    • Платформа — Intel Cascade Lake.
    • vCPU — 2.
    • Гарантированная доля vCPU — 5%.
    • RAM — 1 ГБ.
  6. В блоке Сетевые настройки выберите, к какой подсети необходимо подключить виртуальную машину при создании.

  7. В поле Публичный адрес выберите Автоматически.

  8. Укажите данные для доступа на виртуальную машину:

    • В поле Логин введите имя пользователя.
    • В поле SSH-ключ вставьте содержимое файла открытого ключа. Пару ключей для подключения по SSH необходимо создать самостоятельно. Для создания ключей используйте сторонние инструменты, например утилиты ssh-keygen в Linux и macOS или PuTTYgen в Windows.
  9. Нажмите кнопку Создать ВМ.

Создайте вторую виртуальную машину с предустановленным веб-сервером

Создайте вторую виртуальную машину:

  1. На странице каталога нажмите кнопку Создать ресурс и выберите Виртуальная машина.

  2. В поле Имя введите имя виртуальной машины: lb-tutorial-web-ru-central1-b.

  3. Выберите зону доступности: ru-central1-b.

  4. Выберите один публичный образ для обеих виртуальных машин:

    • LEMP для Linux, nginx, MySQL, PHP;
    • LAMP для Linux, Apache, MySQL, PHP.
  5. В блоке Вычислительные ресурсы:

    • Платформа — Intel Cascade Lake.
    • vCPU — 2.
    • Гарантированная доля vCPU — 5%.
    • RAM — 1 ГБ.
  6. В блоке Сетевые настройки выберите, к какой подсети необходимо подключить виртуальную машину при создании.

  7. В поле Публичный адрес выберите Автоматически.

  8. Укажите данные для доступа на виртуальную машину:

    • В поле Логин введите имя пользователя.
    • В поле SSH-ключ вставьте содержимое файла открытого ключа. Пару ключей для подключения по SSH необходимо создать самостоятельно. Для создания ключей используйте сторонние инструменты, например утилиты ssh-keygen в Linux и macOS или PuTTYgen в Windows.
  9. Нажмите кнопку Создать ВМ.

Создание виртуальной машины может занять несколько минут. Когда виртуальная машина перейдет в статус RUNNING, вы можете загрузить на нее файлы веб-сайта.

При создании виртуальным машинам назначатся публичные IP-адреса. Их можно использовать для доступа по SSH.

Загрузите файлы веб-сайта

Для примера вы можете создать тестовый файл index.html с любым текстом.

Для виртуальных машин lb-tutorial-web-ru-central1-a и lb-tutorial-web-ru-central1-b выполните следующее:

  1. В консоли управления перейдите в раздел Compute Cloud и найдите публичный IP-адрес виртуальной машины.

  2. Подключитесь к виртуальной машине по протоколу SSH.

  3. Выдайте права на запись для вашего пользователя на директорию /var/www/html:

    $ sudo chown -R "$USER":www-data /var/www/html
    
  4. Загрузите на виртуальную машину файлы веб-сайта с помощью протокола SCP.

    $ scp -r <путь до директории с файлами> <имя пользователя ВМ>@<IP-адрес виртуальной машины>:/var/www/html
    

    С помощью программы WinSCP скопируйте локальную директорию с файлами в директорию /var/www/html на виртуальной машине.

Создайте целевую группу

  1. Откройте раздел Load Balancer в каталоге, где созданы ВМ.
  2. Откройте вкладку Целевые группы.
  3. Нажмите кнопку Создать целевую группу.
  4. Введите имя целевой группы, например lb-tg-tutorial-web.
  5. Отметьте виртуальные машины lb-tutorial-web-ru-central1-a и lb-tutorial-web-ru-central1-b для добавления в целевую группу.
  6. Нажмите кнопку Создать целевую группу.

Создайте сетевой балансировщик

При создании сетевого балансировщика нужно создать обработчик, на котором балансировщик будет принимать трафик, а также настроить проверку состояния ресурсов в подключенной целевой группе.

Чтобы создать сетевой балансировщик:

  1. Откройте вкладку Балансировщики.
  2. Нажмите кнопку Создать балансировщик.
  3. Задайте имя балансировщика, например lb-tutorial-web.
  4. В блоке Обработчики нажмите кнопку Добавить обработчик.
  5. В открывшемся окне введите имя обработчика, например lb-tut-listener-1.
  6. Укажите порт 80.
  7. Нажмите кнопку Добавить.
  8. Нажмите переключатель Целевые группы.
  9. Выберите созданную ранее целевую группу lb-tg-tutorial-web. Если группа одна, она будет выбрана автоматически.
  10. В блоке Проверка состояния введите имя проверки состояния, например health-check-1.
  11. Выберите тип проверки: HTTP.
  12. Укажите порт 80.
  13. Укажите URL, по которому будут выполняться проверки. Можно оставить путь по умолчанию — /.
  14. Укажите время ожидания ответа в секундах: 1.
  15. Укажите интервал отправки проверок состояния в секундах: 2.
  16. Укажите порог работоспособности — количество успешных проверок, после которого виртуальная машина будет считаться готовой к приему трафика: 5.
  17. Укажите порог неработоспособности — количество проваленных проверок, после которого на виртуальную машину перестанет подаваться трафик: 5.
  18. Нажмите кнопку Создать балансировщик.

Протестируйте отказоустойчивость

  1. В блоке Сеть на странице виртуальной машины в консоли управления найдите публичный IP-адрес виртуальной машины lb-tutorial-web-ru-central1-a.

  2. Подключитесь к виртуальной машине по протоколу SSH.

  3. Остановите веб-сервис, чтобы сымитировать сбой в работе веб-сервера:

    $ sudo service apache2 stop
    
    $ sudo service nginx stop
    
  4. В консоли управления перейдите в раздел Load Balancer и выберите созданный ранее балансировщик.

  5. В блоке Обработчики найдите IP-адрес обработчика. Откройте сайт в браузере, используя адрес обработчика. Несмотря на сбой в работе одного из веб-серверов, подключение должно пройти успешно.

  6. После завершения проверки снова запустите веб-сервис:

    $ sudo service apache2 start
    
    $ sudo service nginx start
    

Как удалить созданные ресурсы

Чтобы перестать платить за развернутые серверы, достаточно удалить созданные виртуальные машины dns-lb-tutorial-web-ru-central1-a и dns-lb-tutorial-web-ru-central1-b и балансировщик lb-tutorial-web.