nl2go.hetzner_failover

构建状态 Ansible Galaxy GitHub 标签(最新日期) Ansible Galaxy 下载量

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
许可证
mit
下载
5.1k