routed_lb
ansible-role-routed-lb
Этот ролл развернет продвинутый балансировщик нагрузки, способный управлять маршрутизируемыми виртуальными IP (VIP) с использованием FRR и BGP, а также распределять трафик с помощью HAproxy.
Допустим, вы хостите веб-сервис, который доступен по одному или нескольким виртуальным IP (VIP) (обратите внимание, что это не обязательно). Вы хотите, чтобы этот VIP был маршрутизируемым в вашей инфраструктуре с помощью протокола BGP.
Этот ролл выполнит следующее:
- Если в конфигурации указаны соседи BGP, будет развернут FRR и настроено соединение с вашими соседями BGP. Если VIP созданы на узле, они будут маршрутизироваться в вашей инфраструктуре.
- Будет развернут HAproxy для балансировки нагрузки и мониторинга вашего сервиса.
- Если VIP указаны в конфигурации, они будут созданы, если минимальное количество бэкендов признано здоровыми для данного сервиса, и, следовательно, будут маршрутизироваться в BGP, если FRR развернут.
- Они будут удалены, если не найден здоровый бэкенд для данного сервиса, таким образом, не будут маршрутизироваться в BGP, если FRR развернут.
- Если в конфигурации LB указано
strict_vips: true
, все сервисы, использующие этот VIP, должны быть здоровыми, иначе VIP не будет создан. По умолчанию установленоfalse
.
Таким образом, если вы хостите несколько балансировщиков нагрузки, ваш веб-трафик будет:
- маршрутизироваться с помощью BGP, если FRR развернут
- балансироваться и обеспечиваться высокая доступность на уровне VIP благодаря BGP, если FRR развернут
- балансироваться между здоровыми бэкендами с помощью HAproxy
Требования
На данный момент мы тестируем этот модуль на CentOS 9 Stream.
Установка
ansible-galaxy install emilienm.routed_lb
ansible-galaxy collection install ansible.posix ansible.utils
Переменные роли
Только configs
нужно установить в виде словаря:
configs:
lb1:
haproxy_stats: true # включить статистику HAproxy на url http://lb-ip:8404/stats
bgp_asn: <BGP ASN>
bgp_neighbors: # необязательно, если не указано, FRR не будет развернут
- ip: <IP маршрутизатора BGP>
password: <Пароль BGP>
strict_vips: true
services:
- name: <Имя сервиса (например, api)>
vips:
- <VIP, используемые для доступа к этому сервису на фронтенде>
min_backends: <Минимальное количество здоровых бэкендов для создания VIP для данного сервиса>
healthcheck: <Команда проверки состояния HAproxy для бэкенда>
balance: <Алгоритм балансировки нагрузки>
frontend_port: <Порт фронтенда HAproxy для сервиса>
haproxy_monitor_port: <Порт мониторинга HAproxy для сервиса>
backend_opts: <Опции HAproxy для каждого бэкенда>
backend_port: <Порт бэкенда HAproxy>
backend_hosts:
- name: <Имя узла бэкенда>
ip: <IP бэкенда>
Посмотрите на tests/vars.yml
для полного примера.
Зависимости
ansible.posix
Пример плейбука
Создайте файл с именем playbook.yml
:
---
- hosts: lb1
vars:
config: lb1
tasks:
- name: Подключить переменные для тестирования
ansible.builtin.include_vars: vars.yml
- name: Выполнить роль
include_role:
name: emilienm.routed_lb
Затем создайте файл с именем inventory
для инвентаризации Ansible:
all:
hosts:
lb1:
ansible_host: 192.168.10.2 # IP-адрес вашего балансировщика нагрузки
ansible_user: cloud-user
ansible_become: true
Затем выполните:
ansible-playbook playbook.yml -i inventory
Ваши балансировщики нагрузки должны работать!
Лицензия
Apache-2.0
Ansible role to deploy a Load-Balancer capable of managing VIPs routed with BGP
ansible-galaxy install EmilienM/ansible-role-routed-lb