我最近尝试使用 HAProxy 对我的应用程序进行负载平衡,并且能够成功地做到这一点。后来,我遇到了一个叫Floating IP的概念,可以和keepalived一起使用,让负载均衡器高可用。我无法理解如何创建浮动 IP。如何创建浮动 IP 并使用它来配置 HAProxy?谢谢。
问问题
9887 次
2 回答
19
假设:
- 这适用于 Ubuntu 14.04
- haproxy 主 IP:198.51.100.10
- haproxy-二级IP:198.51.100.20
- 共享IP:198.51.100.50
- 任何 DNS 规则都应指向共享 IP (198.51.100.50)
脚步:
- 为keepalived添加防火墙规则#224.0.0.18为keepalived组播地址
sudo ufw allow in from 198.51.100.20 to 224.0.0.18
# 在 198.51.100.10sudo ufw allow in from 198.51.100.10 to 224.0.0.18
# 在 198.51.100.20
- 允许访问共享 IP 地址
- 编辑
/etc/sysctl.conf
- 放
net.ipv4.ip_nonlocal_bind=1
sudo sysctl -p
# 重新加载配置更改
- 编辑
- 安装keepalived
sudo apt-get install keepalived
- 在两台服务器上配置keepalived
- 编辑/创建
/etc/keepalived/keepalived.conf
- 请参阅下面的示例文件 # 主服务器和辅助服务器上的优先级必须不同!
- 编辑/创建
- 重启keepalived
- sudo service keepalived 重启
- 监听共享 IP 地址
- 编辑
/etc/haproxy/haproxy.cfg
bind 198.51.100.50:80
- 编辑
- 重启 haproxy(在两台 haproxy 服务器上)
sudo service haproxy restart
- 验证正确的故障转移
- primary:
sudo ip addr show | grep eth0
# 应该列出共享 IP - secondary:
sudo ip addr show | grep eth0
# 不应该列出共享 IP - 基本的:
sudo service haproxy stop
- primary:
sudo ip addr show | grep eth0
# 不应该列出共享 IP - secondary:
sudo ip addr show | grep eth0
# 应该列出共享 IP - 基本的:
sudo service haproxy start
- primary:
sudo ip addr show | grep eth0
# 应该列出共享 IP - secondary:
sudo ip addr show | grep eth0
# 不应该列出共享 IP
- primary:
/etc/keepalived/keepalived.conf
vrrp_script chk_haproxy { # Requires keepalived-1.1.13
script "killall -0 haproxy" # cheaper than pidof
interval 2 # check every 2 seconds
weight 2 # add 2 points of priority if OK
}
vrrp_instance VI_1 {
interface eth0
state MASTER
virtual_router_id 51
priority 101 # 101 on primary, 100 on secondary
virtual_ipaddress {
198.51.100.50
}
track_script {
chk_haproxy
}
}
于 2016-06-28T21:09:35.317 回答
0
Matt Rice的回答非常好,但请注意,如果您在 Red Hat EL 7 上运行 SELinux,您将需要
sudo setsebool haproxy_connect_any on
...或者 haproxy 将无法在当前没有虚拟 IP 地址的系统上启动,并抱怨它无法绑定。
于 2021-10-27T22:35:31.443 回答