routed_lb

ansible-role-routed-lb

ansible-lint

Этот ролл развернет продвинутый балансировщик нагрузки, способный управлять маршрутизируемыми виртуальными 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
Лицензия
Unknown
Загрузки
394
Владелец
Software Engineer working on @kubernetes and @openstack at Red Hat.