Как настроить отказоустойчивые IP-адреса для высокой доступности с Hetzner Online

У меня есть кластер из 3 узлов Ubuntu, работающих в виртуальных машинах в лаборатории, и я хочу перенести его в производство. Hetzner Online hetzner.de предлагает несколько недорогих выделенных серверов, поэтому я арендовал 3 машины, соединенные гигабитным коммутатором.

Мое намерение состоит в том, чтобы создать HA-Setup с двумя keepalived перед 2 HAProxy Server. Keepalived настроен с VIP внутри моей настройки. К сожалению, это не работает с Hetzner. Однако они предоставляют систему, называемую отказоустойчивый IP, где можно переключаться с помощью сценария на другой сервер: http://wiki.hetzner.de/index.php/Failover_Skript

Мой конфиг для keepalived выглядит так:

vrrp_script chk_haproxy {
        script "killall -0 haproxy"     # cheaper than pidof
        interval 2                      # check every 2 seconds
        weight 2                        # add 2 points of prio if OK
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 101
    virtual_ipaddress {
        192.168.56.101/24 # this is the shared IP I was using
      }
    track_script {
        chk_haproxy
    }
}

Так как их сценарий отработки отказа вписывается в это?

Похоже, что я не единственный, у кого проблема, просто решение не так очевидно. https://www.howtoforge.com/community/threads/hetzner-to-stop-support-for-high-availability-setups.19988/

1 ответ

Поскольку это старый ответ, я не уверен, что вы все еще ищете ответ. Но я наткнулся на это в поисках лучшего способа, как это сделать.

Hetzner назначает отказоустойчивый IP-адрес выделенному серверу не для того, чтобы настроить его на сервере, а для маршрутизации трафика на исходный IP-адрес сервера. Поэтому можно ничего не менять на вашем сервере и вручную переключать IP в их интерфейсе администратора. Тем не мение; это не подходящее решение для большинства, так как я не хотел бы вставать с постели, чтобы переключиться вручную. Это должно быть сделано автоматически, а затем уведомить администратора, что аварийное переключение выполнено. Может быть, даже с небольшим отчетом о проблемах, с которыми столкнулась система, и почему она отказала.

Keepalived может сделать это за вас, нужно только настроить keepalived для запуска сценария при сбое. Но если нет IP-адреса для перехода на другой ресурс, как мы можем перейти на другой ресурс?

Просто; создайте внутреннюю сеть между серверами и назначьте свой собственный не маршрутизируемый внутренний IP для keepalived. Поскольку эта внутренняя сеть использует тот же интерфейс, что и внешняя сеть, это не имеет большого значения. Преимущество этого подхода заключается в том, что вы можете сохранить весь внутренний трафик на 100% внутренним, используя этот внутренний VIP.

Как только Keepalived перестанет работать, вы приказываете запустить скрипт из Hetzner, чтобы также переключить внешний ip с помощью: notify

Пример:

vrrp_script chk_haproxy {
        script "killall -0 haproxy"     # cheaper than pidof
        interval 2                      # check every 2 seconds
        weight 2                        # add 2 points of prio if OK
}

vrrp_instance VI_1 {
    state MASTER
    interface enp0s31f6.4000
    virtual_router_id 51
    priority 101
    virtual_ipaddress {
        192.168.100.3/24 # this is the shared IP I was using
      }
    track_script {
        chk_haproxy
    }
    notify /usr/sbin/hetzner_failoverIP.sh database set $THIS_SERVER_IP
}

Конечно, скрипт Hetzner может быть настроен намного умнее, например, выбрав IP-адрес сервера.

Недостатком, который следует отметить, является то, что внешний IP займет от 40 до 60 секунд. Для меня минимум 40 секунд и максимум 1 минута это слишком долго.

Другим вариантом является использование облачных экземпляров Hetzner для включения HA без использования аварийного IP-адреса и приведенного выше сценария. В облаке есть другое решение: облако с плавающим IP.

Эта опция обойдется вам примерно в 8,50 евро в месяц за:

  • два облачных экземпляра (1 базовый процессор, 2 ГБ памяти и 20 ТБ трафика каждый)
  • два облачных плавающих IP

Затем используйте keepalived для управления облачным плавающим IP (раздел virtual_ipaddress) и HAProxy для отправки всего трафика на выделенные серверы. HAProxy выполнит проверку здоровья, и вам не нужно беспокоиться о:

  • Переключение IP-адресов с помощью Hetzner API
  • 40-60 секунд дополнительного простоя

Стоит отметить, что облачные серверы Hetzner не поддерживают внутреннюю сеть. Но это не требуется, если вы используете их таким образом, и это не будет стоить вам дополнительно, поскольку внутренний трафик является бесплатным. В целях безопасности обеспечьте балансировщики нагрузки (облачные экземпляры Keepalived+HAProxy) с помощью SELinux/AppArmor и Firewalld. Используйте зашифрованный трафик между двумя кластерами (cloud <-> Dedicated), чтобы предотвратить перехват пакетов. Я бы также зашифровал трафик между вашими выделенными серверами, даже если вы используете частную VLAN, трафик все еще отправляется через тот же сетевой адаптер. Что-то иметь в виду.

Используемые источники:

  1. https://wiki.hetzner.de/index.php/Failover/en
  2. https://wiki.hetzner.de/index.php/Failover_Skript/en
  3. https://wiki.hetzner.de/index.php/Vswitch/en
  4. https://wiki.hetzner.de/index.php/Cloud_floating_IP_persistent/en
  5. https://www.hetzner.com/cloud
  6. https://twitter.com/hetzner_online/status/955781300513857536
Другие вопросы по тегам