Linux服务器:Keepalived+HAProxy高可用负载均衡配置指南


Linux服务器:Keepalived+HAProxy高可用负载均衡配置指南

想象一下这样的场景:你的在线商城在做促销活动,流量暴增,结果服务器不堪重负,直接宕机。用户无法访问,订单流失,损失惨重。如何避免这种情况发生?答案就是高可用负载均衡。Keepalived和HAProxy的组合,就是构建高可用负载均衡架构的利器。接下来,我们一起深入探讨如何配置它们。

理解Keepalived与HAProxy

Keepalived的主要职责是实现服务器的高可用性(HA)。它通过VRRP(Virtual Router Redundancy Protocol)协议,在多台服务器之间创建一个虚拟IP地址。当主服务器出现故障时,备服务器能够自动接管虚拟IP,从而实现服务的无缝切换。简单来说,Keepalived就是个”守门员”,确保总有一台服务器在正常工作。

HAProxy则是一个高性能的TCP/HTTP负载均衡器。它可以将客户端的请求分发到后端的多台服务器上,实现流量的负载均衡。HAProxy支持多种负载均衡算法,例如轮询、权重、源地址哈希等,可以根据实际需求选择合适的算法。HAProxy就像一个”交通警察”,引导车辆(请求)均匀地分配到各个车道(服务器)。

环境准备

在开始配置之前,我们需要准备以下环境:

  • 至少两台服务器(推荐三台或以上,一台作为主服务器,一台或多台作为备服务器)
  • 一个虚拟IP地址(VIP),用于对外提供服务
  • 后端服务器,用于实际处理客户端请求
  • 操作系统:推荐使用CentOS 7或Ubuntu 20.04

确保所有服务器之间网络互通,并且能够通过主机名或IP地址进行访问。

Keepalived配置

首先,在所有服务器上安装Keepalived:

CentOS:

sudo yum install keepalived -y

Ubuntu:

sudo apt-get update && sudo apt-get install keepalived -y

接下来,配置主服务器的/etc/keepalived/keepalived.conf文件:


global_defs {
   router_id LVS_DEVEL
}

vrrp_script chk_haproxy {
    script "/etc/keepalived/check_haproxy.sh"
    interval 2
    weight 2
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0  # 根据实际网卡名称修改
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.100  # 替换为你的虚拟IP地址
    }
    track_script {
        chk_haproxy
    }
}

然后,配置备服务器的/etc/keepalived/keepalived.conf文件,只需修改几个关键参数:


global_defs {
   router_id LVS_DEVEL_BACKUP
}

vrrp_script chk_haproxy {
    script "/etc/keepalived/check_haproxy.sh"
    interval 2
    weight 2
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0  # 根据实际网卡名称修改
    virtual_router_id 51
    priority 90  # 优先级要低于主服务器
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.100  # 替换为你的虚拟IP地址
    }
    track_script {
        chk_haproxy
    }
}

注意:statepriorityrouter_id是关键的配置项,需要根据实际情况进行修改。

接下来,创建健康检查脚本/etc/keepalived/check_haproxy.sh:


#!/bin/bash

HAPROXY_STATUS=$(systemctl is-active haproxy)

if [ "$HAPROXY_STATUS" == "active" ]; then
  exit 0
else
  exit 1
fi

并赋予执行权限:

sudo chmod +x /etc/keepalived/check_haproxy.sh

这个脚本会检查HAProxy是否正在运行,如果HAProxy停止运行,Keepalived会降低服务器的优先级,从而触发主备切换。

HAProxy配置

首先,在所有服务器上安装HAProxy:

CentOS:

sudo yum install haproxy -y

Ubuntu:

sudo apt-get update && sudo apt-get install haproxy -y

然后,配置/etc/haproxy/haproxy.cfg文件:


global
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin
    stats timeout 30s
    user haproxy
    group haproxy
    daemon

defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    timeout connect 5000
    timeout client  50000
    timeout server  50000
    errorfile 400 /etc/haproxy/errors/400.http
    errorfile 403 /etc/haproxy/errors/403.http
    errorfile 408 /etc/haproxy/errors/408.http
    errorfile 500 /etc/haproxy/errors/500.http
    errorfile 502 /etc/haproxy/errors/502.http
    errorfile 503 /etc/haproxy/errors/503.http
    errorfile 504 /etc/haproxy/errors/504.http

frontend main
    bind *:80
    default_backend web_servers

backend web_servers
    balance roundrobin  # 负载均衡算法,这里使用轮询
    server web1 192.168.1.101:80 check  # 后端服务器1
    server web2 192.168.1.102:80 check  # 后端服务器2

注意:将192.168.1.101192.168.1.102替换为你的实际后端服务器的IP地址。

重启HAProxy服务:

CentOS:

sudo systemctl restart haproxy

Ubuntu:

sudo systemctl restart haproxy

重启Keepalived服务:

CentOS:

sudo systemctl restart keepalived

Ubuntu:

sudo systemctl restart keepal