KeepAlived+Haproxy实现负载均衡(SLB)
背景
公司一个项目中客户现场没有云平台,应用的高可用需要使用KeepAlived+Haroxy来实现,记录一下步骤。
资源配置
服务器 2台: 172.18.7.13、172.18.8.14
操作系统: OpenEuler 24.03 LTS
VIP1: 172.18.7.81 (结构化服务入口)
VIP2: 172.18.7.21 (非结构化服务入口)
部署架构图
部署步骤
- 两台服务器上都安装keepalived 和haproxy
yum install -y keepalived haproxy
- 修改两台服务器的系统配置,允许tcp监听未知的IP地址
echo 'net.ipv4.ip_nonlocal_bind=1' >> /etc/sysctl.conf
sysctl -p
- 配置keepalived并启动服务
vi /etc/keepalived/keepalived.conf
文件内容
vrrp_script chk_nginx {script "/etc/keepalived/check_nginx.sh"interval 1weight -20fall 2rise 2
}vrrp_instance VI_1 {state BACKUP #另外一个服务配置为Master interface bond1virtual_router_id 51priority 90 #另外一个服务器配置优先级为100advert_int 1authentication {auth_type PASSauth_pass keepalived}virtual_ipaddress {172.18.7.81}track_script {chk_nginx}
}
vrrp_instance VI_2 {state MASTER #另外一个服务器为BACKUPinterface bond1virtual_router_id 61priority 100 #另外一个服务器为90advert_int 1authentication {auth_type PASSauth_pass keepalived}virtual_ipaddress {172.18.7.21}
}
systemctl enable keepalvied && systemctl start keepalived
- 配置haproxy并启动服务
vi /etc/haproxy/haproxy.cfg
文件内容
globallog 127.0.0.1 local2chroot /var/lib/haproxypidfile /var/run/haproxy.piduser haproxygroup haproxydaemonmaxconn 40000defaultsmode httplog globaloption httplogoption dontlognullretries 3timeout http-request 50stimeout queue 1mtimeout connect 50stimeout client 1mtimeout server 1mtimeout http-keep-alive 50stimeout check 50smaxconn 30000frontend httpbind 172.18.7.81:80default_backend http_backbackend http_backbalance roundrobinserver node1 172.18.7.1:30080 checkserver node2 172.18.7.2:30080 checkserver node3 172.18.7.3:30080 checkserver node4 172.18.7.4:30080 checkserver node5 172.18.7.5:30080 check
frontend httpsbind 172.18.7.81:443default_backend https_backbackend https_backbalance roundrobinserver node1 172.18.7.1:30443 checkserver node2 172.18.7.2:30443 checkserver node3 172.18.7.3:30443 checkserver node4 172.18.7.4:30443 checkserver node5 172.18.7.5:30443 check
frontend obsbind 172.18.7.21:80default_backend obs_backbackend obs_backbalance roundrobinserver node1 172.18.7.17:80 checkserver node2 172.18.7.18:80 checkserver node3 172.18.7.19:80 checkserver node4 172.18.7.20:80 check
systemctl enable haproxy && systemctl start haproxy
- 验证VIP与服务端口
#登录任何一台服务器
netstat -tulpn|grep -E "80|443"
示例输出