nl2go.hetzner_failover
Ansible 角色:使用 vSwitch 和 keepalived 的 Hetzner 故障转移
这是一个 Ansible 角色,灵感来源于 @dtone 撰写的 关于 Hetzner 故障转移的文章。旨在通过使用 Hetzner vSwitch 和 keepalived 部署两个服务器共享单个 IP 的高可用设置。此角色应与 nl2go vSwitch 角色 一起使用,以设置 vSwitch。需要为配置的 vSwitch 额外订购一个具有公共 IP 的子网。此角色不使用 Hetzner 提供的故障转移 IP 服务。
前提条件
配置
以下配置片段展示了如何设置一个名为 failover 的 vSwitch,使用 VLAN ID 4023
,并利用 192.168.100.0/24
子网的私有地址和来自额外 IP 子网 154.222.4.32/29
的 IP 154.222.4.34
作为故障转移 IP。额外的子网需在 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 # 应与 hetzner_vswitch_instances 中配置的 VLAN ID 匹配
主机配置
all:
hosts:
keepalived-test-1:
ansible_host: 123.124.125.1 # 主机 1 的主 IP
hetzner_vswitch_host:
- name: failover
ipv4_address: 192.168.200.1 # 主机 1 的 vSwitch IP
hetzner_failover_keepalived_state: MASTER
hetzner_failover_keepalived_vswitch_ip: 192.168.200.1 # 此处需重复主机在 vSwitch VLAN 的 IP
hetzner_failover_keepalived_peer_ip: 192.168.200.2 # keepalived 应与之对等的 vSwitch IP
keepalived-test-2:
ansible_host: 123.124.125.2 # 主机 2 的主 IP
hetzner_vswitch_host:
- name: failover
ipv4_address: 192.168.200.2 # 主机 2 的 vSwitch IP
hetzner_failover_keepalived_state: BACKUP
hetzner_failover_keepalived_vswitch_ip: 192.168.200.2 # 此处需重复主机在 vSwitch VLAN 的 IP
hetzner_failover_keepalived_peer_ip: 192.168.200.1 # keepalived 应与之对等的 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 文件以获取详细信息。
作者信息
此角色由 Newsletter2Go GmbH 于 2020 年创建。
Setup automatic IP failover using hetzner vSwitch and keepalived
ansible-galaxy install nl2go.hetzner_failover