hetzner_failover
Ansible Роль: Резервирование Hetzner с использованием vSwitch и keepalived
Это Ansible роль, вдохновленная статьей о резервировании Hetzner от @dtone. Она предназначена для развертывания высокодоступной конфигурации из 2 серверов, которые используют один IP, применяя hetzner vSwitch и keepalived. Эту роль следует использовать вместе с ролью nl2go vSwitch для настройки vSwitch. Необходимо заказать дополнительную подсеть IP с публичными IP адресами для настроенного vSwitch. Эта роль НЕ использует услугу резервирования IP, предоставляемую Hetzner.
Предварительные требования
- Существующая учетная запись Hetzner Online GmbH.
- Настроенная учетная запись Hetzner Robot Webservice.
Конфигурация
Следующие фрагменты конфигурации показывают настройку vSwitch с именем failover с vlan id 4023
, используя приватные адреса из подсети 192.168.100.0/24
и IP 154.222.4.34
из дополнительной подсети IP 154.222.4.32/29
как резервный IP. Дополнительную подсеть необходимо заказать вручную после создания vSwitch с помощью роли vSwitch.
Конфигурация vSwitch
Конфигурация vSwitch в соответствии с ролью vSwitch:
hetzner_vswitch_instances:
- name: failover
vlan: 4023
ipv4_address: 192.168.200.0
ipv4_netmask: 255.255.255.0
Конфигурация keepalived
hetzner_failover_keepalived_public_virtual_router_id: 42
hetzner_failover_keepalived_public_ipaddress: 154.222.4.34 # один IP из дополнительной подсети IP, используемый как резервный IP
hetzner_failover_keepalived_public_network_prefix: 29 # префикс маски подсети для дополнительной подсети IP
hetzner_failover_keepalived_public_default_gateway: 154.222.4.33 # IP шлюза дополнительной подсети IP
hetzner_failover_keepalived_vswich_id: 4023 # должен совпадать с vlan id, настроенным в hetzner_vswitch_instances
Конфигурация хостов
all:
hosts:
keepalived-test-1:
ansible_host: 123.124.125.1 # основной IP хоста 1
hetzner_vswitch_host:
- name: failover
ipv4_address: 192.168.200.1 # vSwitch IP хоста 1
hetzner_failover_keepalived_state: MASTER
hetzner_failover_keepalived_vswitch_ip: 192.168.200.1 # IP хоста в VLAN vSwitch должен быть повторен здесь
hetzner_failover_keepalived_peer_ip: 192.168.200.2 # vSwitch IP, с которым необходимо взаимодействовать
keepalived-test-2:
ansible_host: 123.124.125.2 # основной IP хоста 2
hetzner_vswitch_host:
- name: failover
ipv4_address: 192.168.200.2 # vSwitch IP хоста 2
hetzner_failover_keepalived_state: BACKUP
hetzner_failover_keepalived_vswitch_ip: 192.168.200.2 # IP хоста в VLAN vSwitch должен быть повторен здесь
hetzner_failover_keepalived_peer_ip: 192.168.200.1 # vSwitch IP, с которым необходимо взаимодействовать
Сценарий уведомления
Можно использовать пользовательский сценарий уведомления для выполнения дополнительных действий после переключения на резервирование.
hetzner_failover_keepalived_notify_script: /usr/local/bin/keepalived_notify.sh
Чтобы запустить пользовательский сценарий уведомления, укажите путь к скрипту в переменной hetzner_failover_keepalived_notify_script
.
hetzner_failover_keepalived_notify_script_master:
- service foo reload
Чтобы выполнить дополнительные действия при переходе экземпляра в состояние мастер, не перезаписывая весь сценарий уведомления, используйте переменную
hetzner_failover_keepalived_notify_script_master
.
hetzner_failover_keepalived_notify_script_backup:
- service foo reload
Чтобы выполнить дополнительные действия при переходе экземпляра в состояние резервного, не перезаписывая весь сценарий уведомления, используйте переменную
hetzner_failover_keepalived_notify_script_backup
.
Зависимости
Пример плейбука
- hosts: all
roles:
- nl2go.hetzner_vswitch
- nl2go.hetzner_failover
Разработка
Используйте docker-molecule, следуя инструкциям для запуска Molecule или установите Molecule локально (не рекомендуется, могут возникнуть конфликты версий).
Предоставьте токен Hetzner Cloud:
export HCLOUD_TOKEN=123abc456efg
Используйте следующее для запуска тестов:
molecule test --all
Поддержка
Лицензия
Смотрите файл LICENSE.md для получения деталей.
Информация об авторе
Эта роль была создана в 2020 году компанией Newsletter2Go GmbH.
Setup automatic IP failover using hetzner vSwitch and keepalived
ansible-galaxy install nl2go/ansible-role-hetzner-failover