Linux服务器高可用集群实战:Keepalived+HAProxy双活架构部署与故障切换

服务器高可用架构的核心逻辑

服务器运维场景中,单点故障是最大的可用性杀手。一台物理机或云服务器的硬件故障、系统崩溃、网络中断,都会导致业务全面瘫痪。高可用集群的本质是用冗余消除单点——多台服务器组成集群,任何一台宕机,业务自动切换到存活节点,对用户透明。

Keepalived+HAProxy是中小规模场景下最成熟的高可用方案组合。Keepalived负责VIP(虚拟IP)故障漂移,HAProxy负责七层负载均衡和健康检查。两者配合实现双活架构:两台服务器同时对外提供服务,任意一台故障,另一台自动接管全部流量。

环境准备与网络拓扑

部署环境要求:

# 服务器规划
Master节点: 192.168.1.10  (hostname: ha-node1)
Backup节点: 192.168.1.11  (hostname: ha-node2)
VIP:        192.168.1.100  (对外服务的浮动IP)

# 操作系统:CentOS 7.9 / Ubuntu 22.04
# 内核版本:5.x+

两台服务器部署在同一个子网内,VIP通过VRRP协议在两台节点间漂移。客户端只访问VIP,不直接访问节点物理IP。

Keepalived安装与VRRP配置

在两台节点上分别安装Keepalived:

# CentOS
yum install -y keepalived

# Ubuntu
apt install -y keepalived

Master节点配置(ha-node1):

# /etc/keepalived/keepalived.conf - Master
global_defs {
    router_id HA_NODE1
    vrrp_skip_check_adv_addr
    vrrp_garp_interval 0
    vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass MyS3cr3t!
    }
    virtual_ipaddress {
        192.168.1.100/24
    }
    track_script {
        chk_haproxy
    }
}

Backup节点配置(ha-node2):

# /etc/keepalived/keepalived.conf - Backup
global_defs {
    router_id HA_NODE2
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass MyS3cr3t!
    }
    virtual_ipaddress {
        192.168.1.100/24
    }
    track_script {
        chk_haproxy
    }
}

HAProxy健康检查与故障自动切换

Keepalived自身的VRRP心跳只能检测节点是否存活,无法判断HAProxy进程状态。需要配合检查脚本,当HAProxy异常时主动降低优先级触发VIP漂移:

# /etc/keepalived/check_haproxy.sh
#!/bin/bash
if ! killall -0 haproxy 2>/dev/null; then
    exit 1
fi
exit 0
# 在keepalived.conf的global_defs后面添加
vrrp_script chk_haproxy {
    script "/etc/keepalived/check_haproxy.sh"
    interval 2
    weight -20
    fall 2
    rise 1
}

给脚本执行权限并启动服务:

chmod +x /etc/keepalived/check_haproxy.sh
systemctl enable keepalived && systemctl start keepalived

HAProxy七层负载均衡配置

两台节点上安装并配置HAProxy:

# /etc/haproxy/haproxy.cfg
global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    timeout connect         10s
    timeout client          30s
    timeout server          30s
    retries                 3

frontend http_front
    bind *:80
    stats enable
    stats uri /haproxy?stats
    stats auth admin:HaProxy2024!
    default_backend http_back

backend http_back
    balance roundrobin
    option httpchk GET /health
    server web1 192.168.1.10:8080 check inter 3000 rise 2 fall 3
    server web2 192.168.1.11:8080 check inter 3000 rise 2 fall 3

配置要点:option httpchk通过HTTP健康检查判断后端是否可用,inter 3000表示每3秒检查一次,rise 2表示连续2次成功才标记为可用,fall 3表示连续3次失败才标记为不可用。

systemctl enable haproxy && systemctl start haproxy

故障切换验证与压测

部署完成后,必须验证故障切换行为:

# 1. 检查VIP在Master上
ip addr show eth0 | grep 192.168.1.100

# 2. 模拟HAProxy故障(在Master上执行)
systemctl stop haproxy

# 3. 观察VIP是否漂移到Backup
ip addr show eth0 | grep 192.168.1.100

# 4. 恢复Master的HAProxy
systemctl start haproxy

# 5. VIP应自动回漂到Master

切换时间取决于advert_int和fall参数。当前配置下,最坏情况切换时间 = 1s x 3 = 3秒。生产环境可根据业务容忍度调整。

服务器安全加固与生产环境注意事项

高可用集群暴露了VIP和多个端口,安全加固必须同步进行:

# 防火墙只放行必要端口
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --permanent --add-rich-rule='rule protocol value="vrrp" accept'
firewall-cmd --reload

# 禁用root远程登录
sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
systemctl restart sshd

关键运维经验:两台节点的virtual_router_id必须一致,否则VRRP协商失败;生产环境务必配置authentication,防止同一网段非法VRRP抢占VIP;多组Keepalived实例共存时,每组使用不同的virtual_router_id;HAProxy的maxconn需要根据服务器硬件配置调整,过高会导致系统资源耗尽。

原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-fu-wu-qi-gao-ke-yong-ji-qun-shi-zhan/

(0)
小编小编
上一篇 8小时前
下一篇 8小时前

相关推荐