emilienm.routed_lb
ansible-role-routed-lb
这个角色将部署一个先进的负载均衡器,能够管理通过 FRR(使用 BGP)路由的虚拟 IP(VIP),并通过 HAproxy 进行流量负载均衡。
假设你正在托管一个由一个或多个虚拟 IP(VIP)暴露的网络服务(注意:这并不是必需的)。 你希望通过 BGP 协议在你的基础设施中路由这个 VIP。
这个角色将执行以下操作:
- 如果配置中提供了 BGP 邻居,将部署 FRR 并与 BGP 邻居对等。如果节点上创建了 VIP,它们将在基础设施中被路由。
- 部署 HAproxy 来负载均衡和监控你的服务。
- 如果配置中提供了 VIP,当发现某个服务的健康后端数量达到最小要求时,它们将被创建,因此在部署了 FRR 的情况下被 BGP 路由。
- 如果未发现某个服务的健康后端,VIP 将被移除,因此在部署了 FRR 的情况下不被 BGP 路由。
- 如果在负载均衡器配置中设置
strict_vips
为 true,则使用该 VIP 的所有服务必须是健康的,否则 VIP 不会被创建。默认值为false
。
因此,如果你托管多个负载均衡器,你的网页流量将会:
- 通过 BGP 路由(如果 FRR 被部署)
- 在 VIP 级别上进行负载均衡和高可用性(如果 FRR 被部署)
- 在健康的后端之间进行负载均衡(通过 HAproxy)
需求
目前,我们在 CentOS 9 Stream 上测试这个模块。
安装
ansible-galaxy install emilienm.routed_lb
ansible-galaxy collection install ansible.posix ansible.utils
角色变量
只需要设置 configs
,格式为字典:
configs:
lb1:
haproxy_stats: true # 在 http://lb-ip:8404/stats 上启用 HAproxy 统计信息
bgp_asn: <BGP ASN>
bgp_neighbors: # 可选,不设置时不部署 FRR
- ip: <BGP 路由器的 IP>
password: <BGP 密码>
strict_vips: true
services:
- name: <服务名称(例如 api)>
vips:
- <用于访问该服务的 VIP>
min_backends: <为该服务创建 VIP 所需的健康后端的最小数量>
healthcheck: <HAproxy 后端命令>
balance: <LB 算法>
frontend_port: <服务的 HAproxy 前端端口>
haproxy_monitor_port: <服务的 HAproxy 监控端口>
backend_opts: <每个后端的 HAproxy 选项>
backend_port: <HAproxy 后端端口>
backend_hosts:
- name: <后端的主机名>
ip: <后端的 IP>
请查看 tests/vars.yml
以获得完整示例。
依赖项
ansible.posix
示例剧本
创建一个名为 playbook.yml
的文件:
---
- hosts: lb1
vars:
config: lb1
tasks:
- name: 包含测试变量
ansible.builtin.include_vars: vars.yml
- name: 运行角色
include_role:
name: emilienm.routed_lb
然后为 Ansible 清单创建一个名为 inventory
的文件:
all:
hosts:
lb1:
ansible_host: 192.168.10.2 # 负载均衡器的 IP 地址
ansible_user: cloud-user
ansible_become: true
接下来运行:
ansible-playbook playbook.yml -i inventory
你的负载均衡器应该能够正常运行!
许可证
Apache-2.0