lvs+keepalived高可用集群

发布于:2024-10-13 ⋅ 阅读:(47) ⋅ 点赞:(0)

在 Linux 下使用 LVS(Linux Virtual Server)Keepalived 来实现高可用的集群方案,通常用于负载均衡和故障转移。LVS 提供强大的负载均衡功能,而 Keepalived 主要负责健康检查和故障切换。

一、LVS+Keepalived 高可用集群架构

架构概述:
  • LVS(Linux Virtual Server):用于实现负载均衡,将客户端请求分发到后端的服务器池(Real Server)。
  • Keepalived:用于健康检查和高可用性管理。它可以监控 LVS 服务器的状态,并在主 LVS 服务器失效时自动切换到备用 LVS 服务器。
典型的部署方式:
  1. 主 LVS(Master):负责处理实际的负载分发工作。
  2. 备 LVS(Backup):作为冗余系统,在主 LVS 出现故障时自动接管流量。
  3. 后端 Real Server:实际处理业务请求的服务器。

通过 Keepalived,主 LVS 失效时,备 LVS 会接管虚拟 IP(VIP),确保服务的高可用性。


二、LVS 负载均衡模式

LVS 提供多种负载均衡模式,常见的有以下几种:

  1. LVS-NAT(Network Address Translation):通过网络地址转换将请求转发给后端服务器。
  2. LVS-DR(Direct Routing):通过直接路由的方式转发请求,LVS 服务器只负责请求的分发,响应则直接返回给客户端。
  3. LVS-TUN(IP Tunneling):通过 IP 隧道方式转发请求,适用于分布在不同地理位置的服务器。
LVS-DR 是最常用的模式,具有高性能和可扩展性。

三、部署 LVS+Keepalived 高可用集群的步骤

1. 环境准备
  • 两台 LVS 服务器:Master 和 Backup。
  • 多台后端 Real Server。
  • 操作系统:通常选择 CentOSUbuntu 等 Linux 发行版。
2. 安装 LVS 和 Keepalived

在两台 LVS 服务器上安装 ipvsadmkeepalived

# CentOS/Red Hat:
yum install ipvsadm keepalived -y

# Ubuntu/Debian:
apt-get install ipvsadm keepalived -y
3. 配置 Keepalived
主 LVS 配置(/etc/keepalived/keepalived.conf)
vrrp_instance VI_1 {
    state MASTER               # 指定为主节点
    interface eth0             # 网卡接口,VIP 将绑定在该网卡上
    virtual_router_id 51       # VRID 同一组集群保持一致
    priority 100               # 优先级,备节点的优先级要比主节点低
    advert_int 1               # 心跳检测间隔时间(秒)
    authentication {           # 主备节点认证配置
        auth_type PASS
        auth_pass 1234
    }
    virtual_ipaddress {        # 定义 VIP(虚拟 IP 地址)
        192.168.0.100          # 替换为你实际的 VIP
    }
}

virtual_server 192.168.0.100 80 {  # 监听的 VIP 和端口(HTTP)
    delay_loop 6                  # 健康检查间隔时间
    lb_algo rr                    # 负载均衡算法:rr(轮询)
    lb_kind DR                    # 负载均衡模式:DR
    persistence_timeout 50        # 会话持久化时间(秒)
    protocol TCP                  # 使用的协议

    real_server 192.168.0.101 80 {  # 定义后端 Real Server
        weight 1                    # 权重
        TCP_CHECK {                 # 健康检查配置
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.0.102 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
备 LVS 配置(/etc/keepalived/keepalived.conf)

备 LVS 的配置与主 LVS 类似,只需将 state MASTER 改为 state BACKUP,并且将 priority 的值设置得比主 LVS 小(例如 90):

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 90                  # 备节点优先级低于主节点
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1234
    }
    virtual_ipaddress {
        192.168.0.100
    }
}
4. 配置 LVS 负载均衡

LVS 负载均衡通过 ipvsadm 工具进行配置。

查看 LVS 负载均衡规则
ipvsadm -L -n
添加负载均衡规则(根据 Keepalived 配置可以自动化实现):
ipvsadm -A -t 192.168.0.100:80 -s rr
ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.101:80 -g
ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.102:80 -g
  • -A:添加虚拟服务器。
  • -t:使用 TCP 协议(虚拟 IP 和端口)。
  • -s rr:使用轮询(Round Robin)算法。
  • -a:添加后端真实服务器。
  • -r:指定后端服务器的 IP 地址。
  • -g:使用 LVS-DR 模式(直接路由)。
5. 后端 Real Server 配置

后端服务器(Real Server)需要对 LVS-DR 模式进行配置。主要步骤是:

  • 配置 loopback 网卡,绑定 VIP 地址,但不响应 ARP 请求。

在每台 Real Server 上,创建一个新的 lo 接口,并绑定 VIP:

ip addr add 192.168.0.100 dev lo

为了避免 VIP 响应 ARP 请求,可以在每个后端服务器上添加以下规则:

echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
6. 启动 Keepalived

在主备 LVS 节点上分别启动 Keepalived 服务:

systemctl start keepalived
systemctl enable keepalived

通过 ip addr 命令,可以在主 LVS 上看到 VIP(192.168.0.100)已经被绑定到指定的网卡上。


四、验证高可用性

  1. 通过访问 VIP(如 http://192.168.0.100),验证负载均衡效果,确认请求能被分发到后端服务器。
  2. 关闭主 LVS 服务器的 Keepalived 服务:
    systemctl stop keepalived
    
    此时,VIP 应该会切换到备用 LVS 服务器,确保高可用性。

总结

通过 LVS 和 Keepalived 配置高可用集群,可以实现负载均衡和主备切换的高可用性架构。这种架构适用于需要高性能和高可用性的网站或应用场景。