Предоставление высокодоступного балансировщика нагрузки в Hetzner Cloud с помощью Ansible
Вступление
Поскольку спрос на онлайн-услуги растет с каждым годом исключительно быстрыми темпами, предприятия сталкиваются с интересными возможностями, а также с проблемами, поскольку они расширяют свою деятельность, чтобы справиться с этим спросом. Одна из таких проблем связана с масштабированием ИТ-инфраструктуры по мере увеличения «нагрузки» на базовые системы. В наши дни предоставление качественных и всегда доступных услуг может иметь первостепенное значение для предприятий любого размера. Ни у одного клиента нет времени простоя или медленных веб-сайтов и веб-приложений, и при возникновении этих проблем они могут оказать существенное влияние на общую производительность и репутацию бизнеса.
При обсуждении вопроса масштабирования инфраструктуры в арсенале ИТ-команды есть различные инструменты и методы, которые могут помочь удовлетворить растущий спрос. Одним из таких методов является распределение нагрузки.
В контексте веб-приложений балансировка нагрузки — это метод, который включает в себя распределение трафика между двумя или более серверами с целью достижения высокой доступности, а также поддержания быстродействия и быстродействия приложений по мере роста числа пользователей и трафика. Важно отметить, что настоящая высокая доступность достигается только тогда, когда один или несколько серверов всегда готовы к приему трафика. В простейшей форме высокодоступный балансировщик нагрузки состоит из главного сервера и резервного сервера; система спроектирована таким образом, что главный сервер обычно обрабатывает и распределяет трафик бэкэндам (то есть серверам, на которых выполняются реальные приложения), но резервный сервер автоматически вступает во владение в случае простоя главного сервера, либо для планового технического обслуживания, либо по непредвиденным причинам. Этот процесс, называемый аварийным переключением, обычно занимает максимум пару секунд, что гарантирует, что приложения остаются доступными с минимальным временем простоя или без такового, как будто ничего не произошло.
В этом руководстве мы увидим, как распределять трафик между серверами приложений, предоставляя высокодоступный балансировщик нагрузки в Hetzner Cloud, используя такие инструменты, как haproxy, keepalived и Ansible:
- haproxy будет выполнять тяжелую работу по фактическому распределению трафика между несколькими бэкэндами; он очень производительный и эффективный, и позволяет нам распределять трафик для нескольких отдельных приложений одновременно; haproxy будет непрерывно пропинговать серверы бэкэнда и гарантировать, что трафик отправляется только в исправные бэкэнды;
- keepalived позаботится о том, чтобы один сервер балансировки нагрузки (главный или резервный) всегда был готов к приему трафика; для этого мы будем использовать Hetzner Cloud CLI, удобный инструмент, который мы можем использовать для косвенного взаимодействия с Hetzner Cloud API, чтобы назначать плавающий IP-адрес как главному серверу, так и серверу резервного копирования, в зависимости от состояния каждого; плавающий IP-адрес — это просто IP-адрес, который может быть «перемещен» с сервера на другой по мере необходимости, и это может быть легко автоматизировано. Это особенно важно для балансировщика нагрузки, поскольку мы можем использовать этот IP-адрес в конфигурации DNS для наших доменов, чтобы избежать таких проблем, как кэширование и распространение записей DNS при возникновении сбоя; под «состоянием сервера» мы имеем в виду, работает ли haproxy; если главный сервер выйдет из строя, haproxy будет рассматриваться как недоступный и, следовательно, поддерживающий активность — благодаря постоянной связи между главным и резервным сервером — даст команду серверу резервного копирования вступить во владение и назначит плавающие IP-адреса себе;
- Ansible — очень популярный инструмент управления конфигурацией, который мы можем использовать для автоматизации всего процесса, а не для настройки всего этого вручную. Это обеспечивает быструю и повторяемую подготовку нескольких балансировщиков нагрузки.
Предпосылки
Чтобы следовать этому уроку, вам понадобится:
- учетная запись Hetzner Cloud и базовое понимание того, как создавать ресурсы в проекте, такие как серверы и плавающие IP-адреса; мы будем использовать вышеупомянутый инструмент CLI для создания этих ресурсов, но вы можете использовать веб-консоль Hetzner Cloud, если хотите;
- проект, в котором будут размещены ваши серверы и плавающие IP-адреса;
- токен, необходимый для назначения плавающих IP-адресов с помощью CLI; Вы можете создать его в консоли Hetzner Cloud в проекте, в Access> API tokens. Запишите этот токен где-нибудь, как менеджер паролей, потому что вы увидите его только один раз;
- Ansible установлен на вашем компьютере — пожалуйста, обратитесь к инструкциям здесь для вашей операционной системы;
- установлен Python (Ansible написан на Python);
- модуль Python hcloud-python. Ansible имеет встроенную поддержку Hetzner Cloud, но для его работы требуется этот модуль. Мы будем использовать это для реализации динамического инвентаризации, чтобы Ansible мог напрямую запросить Hetzner Cloud, чтобы найти хосты.
community.hetzner.com/tutorials/howto-highly-available-load-balancer-hetzner-cloud-ansible