实现方式:
基于Keepalived 和 HAproxy实现负载均衡器的高可用。

上图是我们的部署架构,包含三个主节点,三个工作节点,两个用于负载均衡的节点,以及一个虚拟 IP 地址,虚拟 IP 地址也可称为“浮动 IP 地址”。这意味着在节点故障的情况下,该 IP 地址可在节点之间漂移,从而实现高可用。
配置负载均衡器:
Keepalived 提供 VRRP 实现,并允许您配置 Linux 机器使负载均衡,预防单点故障。HAProxy 提供可靠、高性能的负载均衡,能与 Keepalived 完美配合。
由于 lb1 和 lb2 上安装了 Keepalived 和 HAproxy,如果其中一个节点故障,虚拟 IP 地址(即浮动 IP 地址)将自动与另一个节点关联,使集群仍然可以正常运行,从而实现高可用。若有需要,也可以此为目的,添加更多安装 Keepalived 和 HAproxy 的节点。
安装Keepalived和HAproxy
1
| yum install -y keepalived haproxy psmisc
|
检查是否安装成功
1 2 3
| yum list installed | grep keepalived yum list installed | grep haproxy yum list installed | grep psmisc
|
配置haproxy
- 在两台用于负载均衡的机器上运行以下命令以配置 Proxy(两台机器的 Proxy 配置相同)
1
| vim /etc/haproxy/haproxy.cfg
|
- 以下是示例配置,供您参考(请注意 server 字段。请记住 6443 是 apiserver 端口)

- 保存文件并运行以下命令以重启 HAproxy。
1
| systemctl restart haproxy
|
- 使 HAproxy 在开机后自动运行:
1
| systemctl enable haproxy
|
- 确保另外一台机器也配置了HAproxy
配置Keepalived
两台机器上必须都安装 Keepalived,但在配置上略有不同。
- 运行以下命令以配置 Keepalived。
1
| vim /etc/keepalived/keepalived.conf
|
- 以下为slb1 master的配置,仅供参考

配置解读:
- state,priority:设置节点的初始状态及优先级,Master要高于BACKUP至少50
- interface:设置网卡信息,当LVS接管时,将会把IP地址添加到该网卡上,可通过ifconfig查看
- unicast_src_ip:源IP地址,即配置当前机器的IP
- unicast_peer:目标地址,即配置所有作为负载均衡器中的其他节点IP
- virtual_ipaddress:设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
- authentication:认证信息,auth_type有PASS和AH两种,同一个vrrp_instance下,MASTER和BACKUP的密码必须一致才能正常通信
- virtual_router_id:设置VRID标记,主从Keepalived此属性必须设置成一致,否则VIP无法漂移
- 在/etc/keepalived/路径下创建设置检测脚本check_haproxy.sh
同时授予可执行权限
1
| chmod +x check_haproxy.sh
|
- 保存文件并运行以下命令以重启 Keepalived。
1
| systemctl restart keepalived
|
- 使 Keepalived 在开机后自动运行:
1
| systemctl enable keepalived
|
- 保证另外一台机器slb2 也安装配置好keepalived,操作过程跟上面一样,注意修改以下几处
1 2 3 4 5 6 7 8 9 10 11 12
| #源主机IP,当前服务器ip unicast_src_ip 源主机IP地址
#目标主机IP集合,另外一台slb服务器ip unicast_peer { ip1 }
#设置VIP virtual_ipaddress { 172.30.xx.xx # The VIP address }
|
修改主备机器的优先级
1 2
| state BACKUP # 指定实例初始状态,实际的MASTER和BACKUP是选举决定的。 priority 100 # 设置优先级,优先级高的会被竞选为Master,Master要高于BACKUP至少50
|
指定主备(MASTER、BACKUP)时注意,指定一台默认MASTER,其余为BACKUP。Master的priority 要高于BACKUP的priority ,其中BACKUP的priority 至少50
验证高可用
在开始创建 Kubernetes 集群之前,请确保已经测试了高可用。验证过程如下:
- 在机器slb1上,运行以下命令:

- 如上所示,虚拟IP已经成功添加,模拟此节点故障
1
| systemctl stop haproxy keepalived
|
注意:由于我们在keepalived检测脚本中设置了检测功能,若HAproxy失效会自动重启HAproxy,所以验证的时候需要将keepalived停掉
- 再次检查浮动 IP 地址,您可以看到该地址在 slb1 上消失了。

- 如果配置成功,该虚拟 IP 会漂移到另一台机器 (slb2) 上。在 slb2 上运行以下命令,这是预期的输出:

- 此时我们重新启动slb1上的 keepalived,虚拟IP会被Master抢占,可通过在备机上查看keepalived状态和haproxy状态

通过日志可以看出虚拟IP被优先级高的机器抢走,同时在Master节点查看ip信息,确认虚拟IP漂移成功
- 如上所示,外部负载均衡高可用已经配置成功。