Как создать Плавающий IP и использовать его для настройки HAProxy

Недавно я попытался сбалансировать загрузку моего приложения с помощью HAProxy и смог сделать это успешно. Позже я натолкнулся на концепцию под названием "Плавающий IP", которая может использоваться вместе с keepalived для обеспечения высокой доступности балансировщика нагрузки. Я не смог понять, как создать плавающий Ip. Как я могу создать Плавающий IP и использовать его для настройки HAProxy? Благодарю.

2 ответа

Предположения:

  • Это работает на Ubuntu 14.04
  • первичный IP-адрес: 198.51.100.10
  • haproxy-вторичный IP: 198.51.100.20
  • общий IP: 198.51.100.50
  • Любые правила DNS должны указывать на общий IP (198.51.100.50)

шаги:

  1. Добавьте правило брандмауэра для keepalived # 224.0.0.18 - это адрес многоадресной рассылки keepalived
    1. sudo ufw allow in from 198.51.100.20 to 224.0.0.18 № на 198.51.100.10
    2. sudo ufw allow in from 198.51.100.10 to 224.0.0.18 № на 198.51.100.20
  2. Разрешить доступ к общему IP-адресу
    1. редактировать /etc/sysctl.conf
    2. задавать net.ipv4.ip_nonlocal_bind=1
    3. sudo sysctl -p # перезагрузить изменение конфигурации
  3. Установить keepalived
    1. sudo apt-get install keepalived
  4. Настройте keepalived на обоих серверах
    1. Редактировать / создать /etc/keepalived/keepalived.conf
    2. Смотрите пример файла ниже # приоритет ДОЛЖЕН быть разным на первичном и вторичном серверах!
  5. Restart keepalived
    1. перезапуск службы поддержки sudo
  6. Слушайте на общем IP-адресе
    1. редактировать /etc/haproxy/haproxy.cfg
    2. bind 198.51.100.50:80
  7. Перезапустите haproxy (на обоих haproxy-серверах)
    1. sudo service haproxy restart
  8. Проверьте правильность отработки отказа
    1. первичная: sudo ip addr show | grep eth0 # должен перечислить общий IP
    2. вторичный: sudo ip addr show | grep eth0 # НЕ должен перечислять общий IP
    3. первичная: sudo service haproxy stop
    4. первичная: sudo ip addr show | grep eth0 # НЕ должен перечислять общий IP
    5. вторичный: sudo ip addr show | grep eth0 # должен перечислить общий IP
    6. первичная: sudo service haproxy start
    7. первичная: sudo ip addr show | grep eth0 # должен перечислить общий IP
    8. вторичный: sudo ip addr show | grep eth0 # НЕ должен перечислять общий IP

/etc/keepalived/keepalived.conf

     vrrp_script chk_haproxy {      # Requires keepalived-1.1.13
       script "killall -0 haproxy"  # cheaper than pidof
       interval 2 # check every 2 seconds
       weight 2 # add 2 points of priority if OK
     }
     vrrp_instance VI_1 {
       interface eth0
       state MASTER
       virtual_router_id 51
       priority 101 # 101 on primary, 100 on secondary
       virtual_ipaddress {
         198.51.100.50
       }
       track_script {
         chk_haproxy
       }
     }

Ответ от Matt Rice отличный, но имейте в виду, что если вы используете принудительное исполнение SELinux в Red Hat EL 7, вам понадобится

      sudo setsebool haproxy_connect_any on

... или haproxy не запустится в системе, которая в настоящее время не имеет виртуального ip-адреса, с жалобой на невозможность привязки.

Другие вопросы по тегам