LVS+Keepalived 高可用

目录

一、核心概念

[1. LVS(Linux Virtual Server)](#1. LVS(Linux Virtual Server))

[2. Keepalived](#2. Keepalived)

二、高可用架构设计

[1. 架构拓扑图](#1. 架构拓扑图)

[2. 工作流程](#2. 工作流程)

[三、部署步骤(以 DR 模式为例)](#三、部署步骤(以 DR 模式为例))

[1. 环境准备](#1. 环境准备)

[2. 主 LVS 节点配置](#2. 主 LVS 节点配置)

[(1)安装 Keepalived](#(1)安装 Keepalived)

[(2)配置 Keepalived 主节点(/etc/keepalived/keepalived.conf)](#(2)配置 Keepalived 主节点(/etc/keepalived/keepalived.conf))

[(3)配置 LVS 内核参数(DR 模式需关闭 ARP 响应)](#(3)配置 LVS 内核参数(DR 模式需关闭 ARP 响应))

[3. 备 LVS 节点配置](#3. 备 LVS 节点配置)

[4. 后端服务器配置(以 Nginx 为例)](#4. 后端服务器配置(以 Nginx 为例))

[(1)绑定 VIP(lo 接口,避免响应 ARP 请求)](#(1)绑定 VIP(lo 接口,避免响应 ARP 请求))

[(2)关闭 IP 转发](#(2)关闭 IP 转发)

[(3)启动 Nginx 服务](#(3)启动 Nginx 服务)

四、验证与维护

[1. 状态检查](#1. 状态检查)

[2. 故障切换测试](#2. 故障切换测试)

五、注意事项

六、扩展场景

命令解析

全局配置部分

[VRRP 实例配置](#VRRP 实例配置)

[LVS 虚拟服务器配置](#LVS 虚拟服务器配置)

后端服务器配置

配置总结


一、核心概念
1. LVS(Linux Virtual Server)
  • 定义:基于 Linux 内核的负载均衡器,工作在 OSI 模型的第四层(传输层),通过 IP 和端口实现流量分发。
  • 工作模式
    • NAT 模式:客户端请求经 LVS 转发至后端服务器,响应流量需通过 LVS 返回(需配置 SNAT/DNAT)。
    • DR 模式(Direct Routing):LVS 仅转发请求,后端服务器直接响应客户端(需共享 VIP,配置路由或调整内核参数)。
    • TUN 模式(隧道模式):通过 IP 隧道封装技术将请求转发至后端服务器(适用于跨网段场景)。
  • 调度算法
    • 轮询(Round Robin)、加权轮询(Weighted RR)、最少连接(Least Connections)、加权最少连接(Weighted LC)等。
2. Keepalived
  • 定义:基于 VRRP(Virtual Router Redundancy Protocol)协议的高可用解决方案,用于监控 LVS 节点状态,实现主备切换。
  • 核心功能
    • 健康检查:通过 TCP、HTTP、SSL 等方式检测后端服务器和 LVS 节点的存活状态。
    • 虚拟路由冗余:多个 Keepalived 节点组成 VRRP 组,共享一个虚拟 IP(VIP),主节点故障时自动切换至备节点。
二、高可用架构设计
1. 架构拓扑图
复制代码
客户端 <---- VIP ----> [主LVS+Keepalived] <---- 内网 ----> 后端服务器集群
               └---- VIP ----> [备LVS+Keepalived]
  • 关键组件
    • 主备 LVS 节点:运行 LVS 负载均衡服务,共享 VIP。
    • Keepalived 服务:部署在主备 LVS 节点上,通过心跳机制同步状态。
    • 后端服务器:处理实际业务请求,需配置为 LVS 的 Real Server。
2. 工作流程
  1. 正常状态
    • 主节点持有 VIP,接收客户端请求并通过 LVS 调度算法分发给后端服务器。
    • 备节点处于待命状态,定期监听主节点心跳。
  2. 主节点故障
    • 备节点检测到主节点心跳丢失,接管 VIP 并成为新的主节点,继续处理流量。
    • 原主节点恢复后,自动转为备节点(需配置抢占模式)。
三、部署步骤(以 DR 模式为例)
1. 环境准备
角色 IP 地址 软件组件
主 LVS 节点 192.168.1.100 LVS+Keepalived
备 LVS 节点 192.168.1.101 LVS+Keepalived
虚拟 IP(VIP) 192.168.1.200 -
后端服务器 1 192.168.1.110 Nginx+Keepalived(健康检查)
后端服务器 2 192.168.1.111 Nginx+Keepalived(健康检查)
2. 主 LVS 节点配置
(1)安装 Keepalived
复制代码
yum install keepalived -y
(2)配置 Keepalived 主节点(/etc/keepalived/keepalived.conf)
复制代码
global_defs {
   router_id LVS_MASTER  # 节点标识,主备需不同
}

vrrp_instance VI_1 {
    state MASTER          # 主节点状态(备节点为BACKUP)
    interface eth0        # 绑定VIP的网卡
    virtual_router_id 51  # VRRP组ID(主备需一致)
    priority 100          # 优先级(备节点设为90)
    advert_int 1          # 心跳间隔(秒)
    authentication {
        auth_type PASS
        auth_pass 1111    # 认证密码(主备需一致)
    }
    virtual_ipaddress {
        192.168.1.200/24  # 虚拟IP
    }
}

# LVS健康检查(监控后端服务器)
virtual_server 192.168.1.200 80 {
    delay_loop 6         # 健康检查间隔(秒)
    lb_algo rr           # 调度算法(轮询)
    lb_kind DR           # 工作模式(DR)
    protocol TCP         # 协议类型

    # 后端服务器配置
    real_server 192.168.1.110 80 {
        weight 1          # 服务器权重
        TCP_CHECK {       # TCP健康检查
            connect_port 80
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.1.111 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}
(3)配置 LVS 内核参数(DR 模式需关闭 ARP 响应)
复制代码
echo "1" > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
3. 备 LVS 节点配置
  • Keepalived 配置 :与主节点基本一致,需修改:

    复制代码
    state BACKUP          # 状态改为BACKUP
    priority 90           # 优先级低于主节点
    router_id LVS_BACKUP  # 节点标识不同
  • 内核参数配置:与主节点相同。

4. 后端服务器配置(以 Nginx 为例)
(1)绑定 VIP(lo 接口,避免响应 ARP 请求)
复制代码
ifconfig lo:0 192.168.1.200 netmask 255.255.255.255 broadcast 192.168.1.200
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
(2)关闭 IP 转发
复制代码
echo "0" > /proc/sys/net/ipv4/ip_forward
(3)启动 Nginx 服务
复制代码
yum install nginx -y
systemctl start nginx
四、验证与维护
1. 状态检查
  • 查看 Keepalived 状态

    复制代码
    systemctl status keepalived
    # 主节点应显示"Master",备节点显示"Backup"
  • 查看 VIP 绑定情况

    复制代码
    ip addr show eth0 | grep 192.168.1.200  # 主节点应存在VIP
  • LVS 规则检查

    复制代码
    ipvsadm -L -n  # 应显示后端服务器列表
2. 故障切换测试
  1. 停止主节点 Keepalived 服务:

    复制代码
    systemctl stop keepalived
  2. 检查备节点是否接管 VIP,且 LVS 规则正常。

  3. 重启主节点 Keepalived,验证是否恢复为备节点(非抢占模式需手动切换)。

五、注意事项
  1. 网络互通性
    • 主备 LVS 节点需与后端服务器网络互通(DR 模式需共享 VIP 所在网段)。
    • 后端服务器响应流量需直接返回给客户端,避免经过 LVS(需配置路由或环回接口)。
  2. 健康检查优化
    • 根据业务类型选择检查方式(如 HTTP 检查需配置 URL 路径)。
    • 调整检查间隔(delay_loop)和重试次数,避免误判。
  3. 防火墙配置
    • 开放 Keepalived 心跳端口(UDP 112)和业务端口(如 80、443)。
    • 在 DR 模式中,确保后端服务器不响应 VIP 的 ARP 请求。
六、扩展场景
  • 多 VRRP 组:为不同业务配置独立的 VRRP 组,实现更细粒度的高可用。
  • 负载均衡与高可用分离:使用独立节点部署 Keepalived,避免与 LVS 共享资源。
  • 结合云平台:在云环境中通过浮动 IP(EIP)和私有网络实现 LVS+Keepalived 架构。

命令解析

全局配置部分

复制代码
global_defs {
   router_id LVS_MASTER  # 节点标识,主备需不同
}

global_defs:定义全局参数

router_id:标识 Keepalived 实例的唯一名称,主备节点必须不同,用于区分不同的 Keepalived 节点

VRRP 实例配置

复制代码
vrrp_instance VI_1 {
    state MASTER          # 主节点状态(备节点为BACKUP)
    interface eth0        # 绑定VIP的网卡
    virtual_router_id 51  # VRRP组ID(主备需一致)
    priority 100          # 优先级(备节点设为90)
    advert_int 1          # 心跳间隔(秒)
    authentication {
        auth_type PASS
        auth_pass 1111    # 认证密码(主备需一致)
    }
    virtual_ipaddress {
        192.168.1.200/24  # 虚拟IP
    }
}
  • vrrp_instance VI_1:定义 VRRP 实例,名称为 VI_1
  • state MASTER:当前节点的初始状态,主节点为 MASTER,备节点为 BACKUP
  • interface eth0:绑定虚拟 IP 的物理网卡
  • virtual_router_id 51:VRRP 组 ID,取值范围 1-255,主备节点必须相同
  • priority 100:节点优先级,数值越大优先级越高,主节点应高于备节点
  • advert_int 1:发送 VRRP 通告的时间间隔(心跳间隔)
  • authentication:VRRP 认证配置,防止非法节点加入
    • auth_type PASS:密码认证方式
    • auth_pass 1111:认证密码,主备必须一致
  • virtual_ipaddress:定义虚拟 IP 地址,可配置多个

LVS 虚拟服务器配置

复制代码
virtual_server 192.168.1.200 80 {
    delay_loop 6         # 健康检查间隔(秒)
    lb_algo rr           # 调度算法(轮询)
    lb_kind DR           # 工作模式(DR)
    protocol TCP         # 协议类型
  • virtual_server:定义虚拟服务器,即负载均衡的 VIP 和端口
  • delay_loop 6:健康检查的时间间隔(秒)
  • lb_algo rr:负载均衡调度算法
    • rr:轮询(Round Robin)
    • wrr:加权轮询
    • lc:最少连接(Least Connections)
    • wlc:加权最少连接
  • lb_kind DR:LVS 工作模式
    • DR:直接路由模式(Direct Routing)
    • NAT:网络地址转换模式
    • TUN:IP 隧道模式
  • protocol TCP:使用 TCP 协议进行负载均衡

后端服务器配置

复制代码
    real_server 192.168.1.110 80 {
        weight 1          # 服务器权重
        TCP_CHECK {       # TCP健康检查
            connect_port 80
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
  • real_server:定义真实服务器(后端服务器)的 IP 和端口
  • weight 1:服务器权重,数值越大被分配的请求越多
  • TCP_CHECK:TCP 健康检查配置
    • connect_port 80:检查的端口
    • connect_timeout 3:连接超时时间(秒)
    • retry 3:重试次数
    • delay_before_retry 3:重试前的延迟时间(秒)

配置总结

这个配置文件实现了一个基于 DR 模式的 LVS 负载均衡器的高可用方案:

  1. 使用 Keepalived 实现主备节点自动切换
  2. 虚拟 IP 地址为 192.168.1.200,绑定在 eth0 网卡上
  3. 负载均衡采用轮询算法,工作在 DR 模式
  4. 对两个后端服务器(192.168.1.110 和 192.168.1.111)进行健康检查
  5. 当主节点出现故障时,备节点将接管虚拟 IP 继续提供服务

配置注意事项:

  • 主备节点的 virtual_router_id 和 auth_pass 必须相同
  • 主备节点的 state 和 priority 必须不同
  • 后端服务器需要配置 VIP 的回环地址,并设置合适的 ARP 参数
  • DR 模式下,后端服务器需要和 LVS 在同一个物理网段
相关推荐
蓉哈哈2 分钟前
【Docker 从入门到实战全攻略(一):核心概念 + 命令详解 + 部署案例】
运维·docker·容器
沙滩小岛小木屋6 分钟前
docker中多个容器相互访问的端口问题
运维·docker·容器
wanhengidc21 分钟前
影响服务器稳定性的因素都有什么?
运维·服务器·分布式
夜晚回家21 分钟前
「Java教案」Java程序的构成
java·开发语言
魔法白糖31 分钟前
怎么在window上打开ubuntu虚拟机?
linux·ubuntu
编码小笨猪31 分钟前
一文详谈Linux中的时间管理和定时器编程
linux·服务器
全栈凯哥32 分钟前
领域驱动设计 (Domain-Driven Design, DDD)
java
82782093733 分钟前
CentOS-stream-9 Zabbix的安装与配置
linux·centos·zabbix
酱学编程35 分钟前
【监控】Spring Boot 应用监控
java·spring boot·后端·prometheus
m0_694845571 小时前
服务器如何配置防火墙管理端口访问?
linux·运维·服务器·前端