首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >在 Debian 上使用 Keepaplived 简单配置高可用性 HAProxy 实践

在 Debian 上使用 Keepaplived 简单配置高可用性 HAProxy 实践

作者头像
用户12454170
发布2026-05-06 19:23:00
发布2026-05-06 19:23:00
250
举报

在关键业务系统中,负载均衡层的高可用性直接决定服务连续性。本文将通过实践演示,在 Debian 12 上为 HAProxy 负载均衡器部署 Keepalived 高可用方案。利用虚拟路由器冗余协议(VRRP)实现故障秒级切换,结合虚拟 IP(浮动 IP)机制,构建无单点故障的负载均衡架构,确保业务流量永不中断。

Keepalived 通过 Linux 虚拟服务器(LVS)内核模块在主备路由器上实现负载均衡和故障转移功能,而 HAProxy 则为 TCP 和 HTTP 应用程序提供负载均衡和高可用性服务。

Keepalived 通过虚拟路由器冗余协议(VRRP)在主(活动)和备用(被动)LVS 路由器(在本例中为 HAProxy 服务器,因为它们负责负载均衡 Web 应用程序)之间发送定期消息,以确定彼此的状态。如果主服务器在预定义的时间内未能发送消息,Keepalived 将触发故障转移,备用服务器将成为主服务器。

所有虚拟服务器均被分配一个虚拟 IP(也称为浮动 IP)。这是一个可公开路由的 IP 地址。它会动态分配给当前处于活动状态的服务器。

此配置要求已部署并运行 HAProxy 服务器。在之前的文章中已详细介绍了在各种系统上安装和配置 HAProxy 负载均衡器的步骤;请查看在 Debian 12 上安装和简单配置 HAProxy

在本文中,将使用两台配备Keepalived的高可用性HAProxy服务器。以下是我们的部署架构。

安装并配置 Keepalived

安装 Keepalived

在我的演示环境中,已在 Debian12 上运行 HAProxy 负载均衡器。因此,假设您的系统包缓存已更新,请运行以下命令在两个节点上都安装 Keepalived。

代码语言:javascript
复制
apt install keepalived
配置 IP 转发及绑定

要使 Keepalived 服务能够将网络数据包转发到后端服务器,需要启用IP转发。在两台服务器上运行以下命令:

代码语言:javascript
复制
sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf  # 也可以打开此文件,取消对应行等注释。

同样,需要启用 HAProxy 和 Keepalived 以绑定到非本地 IP 地址,即绑定到故障转移 IP 地址(浮动 IP)。

代码语言:javascript
复制
echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf  # 也可以打开此文件,添加对应行到末尾。

重新加载 sysctl 设置:

代码语言:javascript
复制
sysctl -p
配置 Keepalived

Keepalived 的默认配置文件应为 /etc/keepalived/keepalived.conf。然而,该配置文件默认情况下并未创建。

请按照以下内容创建配置文件(部分配置需要根据个人实际环境进行修改,比如网卡名称):

代码语言:javascript
复制
vi /etc/keepalived/keepalived.conf

Master 节点 Keepalived 配置:

代码语言:javascript
复制
# Global Settings for notifications
global_defs {
    script_user root
    enable_script_security
}

# Define the script used to check if haproxy is still working
vrrp_script chk_haproxy { 
    script "/usr/bin/killall -0 haproxy"
    interval 2 
    weight 2 
}

# Configuration for Virtual Interface
vrrp_instance LB_VIP {
    interface ens33
    state MASTER        # set to BACKUP on the peer machine
    priority 101        # set to  99 on the peer machine
    virtual_router_id 51

    #smtp_alert          # Enable Notifications Via Email

    authentication {
        auth_type AH
        auth_pass myP@ssword    # Password for accessing vrrpd. Same on all devices
    }
    unicast_src_ip 192.168.2.218 # Private IP address of master
    unicast_peer {
        192.168.2.248           # Private IP address of the backup haproxy
   }

    # The virtual ip address shared between the two loadbalancers
    virtual_ipaddress {
        192.168.2.250
    }

    # Use the Defined Script to Check whether to initiate a fail over
    track_script {
        chk_haproxy
    }
}

Backup 节点 Keepalived 配置:

代码语言:javascript
复制
# Global Settings for notifications
global_defs {
    script_user root
    enable_script_security
}

vrrp_script chk_haproxy { 
    script "/usr/bin/killall -0 haproxy"
    interval 2 
    weight 2 
}

vrrp_instance LB_VIP {
    interface ens33
    state BACKUP
    priority 100
    virtual_router_id 51

#    smtp_alert

    authentication {
        auth_type AH
        auth_pass myP@ssword
    }
    unicast_src_ip 192.168.2.248 # Private IP address of the backup haproxy
    unicast_peer {
        192.168.2.218   # Private IP address of the master haproxy
   }

    virtual_ipaddress {
        192.168.2.250
    }
     
    track_script {
        chk_haproxy
    }
}
运行 Keepalived

现在可以启动 Keepalived 并加入开机启动,使其在所有节点的系统启动时运行;

代码语言:javascript
复制
systemctl enable --now keepalived

查看 keepalived 启动状态:

在 Master 节点上检查IP地址分配:

代码语言:javascript
复制
ip --brief a

可以看到,ens33 网卡上面多了一个IP,这个便是虚拟(浮动)IP。

查看 Backup 节点 IP 地址分配:

现在,我们把 Master 节点上接口 ens33 关闭,请确保在关闭接口之前已通过控制台登录。

代码语言:javascript
复制
ip link set ens33 down 

查看 Backup 节点状态:

代码语言:javascript
复制
systemctl status keepalived

虚拟 IP 已成功切换到 Backup 节点。

再次开启 Master 节点 ens33 网卡,虚拟 IP 在数秒钟内恢复到 Master 节点上。

使用 Keepalived 的 IP 配置 HAProxy

我们对 HAProxy 配置文件所做改动是将前端绑定IP和统计IP地址调整为VIP或浮动IP,在本实践中为 192.168.2.250。后端服务器修改为两台运行了 FastAPI 的 web 服务器。

代码语言:javascript
复制
vi /etc/haproxy/haproxy.cfg

重启 HAProxy 和 Keepalived 服务:

代码语言:javascript
复制
systemctl restart haproxy
systemctl restart keepalived

访问虚拟IPhttp://192.168.2.250:8080测试:

访问虚拟IP 的信息统计:


至此,您已成功在 Debian 12 上部署了 HAProxy + Keepalived 的高可用负载均衡架构。通过虚拟 IP 漂移和健康检查机制,系统可在主节点故障时 1000ms 内自动切换至备用节点,实现服务无缝接管。

典型适用场景:

  1. Web 应用层高可用 ✅ 无状态 HTTP/HTTPS 服务(如 Nginx/Apache/Tomcat) ✅ RESTful API 网关负载均衡 ✅ 微服务入口流量分发
  2. 中间件接入层 ✅ Redis 只读副本负载均衡 ✅ MySQL 从库查询分发 ✅ Kafka 消费者组接入点
  3. 云原生扩展基础 ✅ 传统架构向 Kubernetes 过渡的流量入口 ✅ 混合云环境统一接入层

架构边界注意:

  • 不适用于数据库主节点等高一致性场景(需结合 Galera/Pacemaker)
  • 后端服务器需实现无状态或外置会话管理
  • 千兆网络下可支撑 5-10 万并发连接

进阶调优建议:

  1. 监控:集成 Prometheus HAProxy Exporter + Grafana 看板
  2. 安全:为统计页面配置 HTTPS 证书(Certbot + Let's Encrypt)
  3. 调度:使用 weight 参数实现差异化流量分配
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-07-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一根头发丝的宽度 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装并配置 Keepalived
    • 安装 Keepalived
    • 配置 IP 转发及绑定
    • 配置 Keepalived
    • 运行 Keepalived
    • 使用 Keepalived 的 IP 配置 HAProxy
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档