LVS-DR 模式负载均衡群集

文章目录

  • 一、LVS-DR模式负载均衡群集
    • [1、LVS DR模式工作原理(Direct Routing)](#1、LVS DR模式工作原理(Direct Routing))
      • [1.1 数据包流向分析](#1.1 数据包流向分析)
      • [1.2 DR模式特点](#1.2 DR模式特点)
    • 2、DR模式部署步骤
      • [2.1 环境规划](#2.1 环境规划)
        • [2.1.1 服务器规划](#2.1.1 服务器规划)
        • [2.1.2 环境架构](#2.1.2 环境架构)
      • [2.2 配置负载调度器(Director Server)](#2.2 配置负载调度器(Director Server))
        • [2.2.1 系统配置](#2.2.1 系统配置)
        • [2.2.2 配置虚拟IP](#2.2.2 配置虚拟IP)
        • [2.2.3 调整内核参数](#2.2.3 调整内核参数)
        • [2.2.4 配置LVS服务及调度](#2.2.4 配置LVS服务及调度)
      • [2.3 配置节点服务器(Real Server)](#2.3 配置节点服务器(Real Server))
        • [2.3.1 配置VIP到lo接口](#2.3.1 配置VIP到lo接口)
        • [2.3.2 ARP参数调整(避免MAC冲突)](#2.3.2 ARP参数调整(避免MAC冲突))
        • [2.3.3 安装Web服务](#2.3.3 安装Web服务)
      • [2.4 测试LVS群集](#2.4 测试LVS群集)
    • 3、LVS面试知识点整理
      • [3.1 LVS三种工作模式](#3.1 LVS三种工作模式)
      • [3.2 LVS调度算法](#3.2 LVS调度算法)
        • [3.2.1 固定调度算法](#3.2.1 固定调度算法)
        • [3.2.2 动态调度算法](#3.2.2 动态调度算法)
      • [3.3 Nginx vs LVS vs HAProxy区别](#3.3 Nginx vs LVS vs HAProxy区别)
      • [3.4 一句话总结](#3.4 一句话总结)
  • 二、LVS+Keepalived群集
    • 1、概念与原理
      • [1.1 Keepalived](#1.1 Keepalived)
      • [1.2 VRRP工作原理](#1.2 VRRP工作原理)
      • [1.3 Keepalived主要模块](#1.3 Keepalived主要模块)
    • 2、脑裂问题与防护
      • [2.1 脑裂(Split Brain)](#2.1 脑裂(Split Brain))
      • [2.2 脑裂原因](#2.2 脑裂原因)
      • [2.3 防护策略](#2.3 防护策略)
    • 3、部署步骤
      • [3.1 环境准备](#3.1 环境准备)
      • [3.2 安装与配置LVS + Keepalived](#3.2 安装与配置LVS + Keepalived)
        • [3.2.1 DR服务器操作](#3.2.1 DR服务器操作)
        • [3.2.2 配置Keepalived](#3.2.2 配置Keepalived)
        • [3.2.3 VIP配置](#3.2.3 VIP配置)
        • [3.2.4 启动服务](#3.2.4 启动服务)
        • [3.2.5 内核参数优化](#3.2.5 内核参数优化)
      • [3.3 配置Web节点](#3.3 配置Web节点)
      • [3.4 测试](#3.4 测试)
      • [3.5 小结与注意事项](#3.5 小结与注意事项)

一、LVS-DR模式负载均衡群集

1、LVS DR模式工作原理(Direct Routing)

1.1 数据包流向分析

  1. 客户端向VIP(虚拟IP)发送请求,数据包到达Director Server内核空间。
  2. Director判断目标IP为VIP,修改数据包的目标MAC为Real Server MAC、源MAC为自身MAC,IP地址保持不变后发送给Real Server。
  3. Real Server通过lo接口配置的VIP接收报文并处理请求,响应报文源IP为VIP、目标IP为客户端(CIP),直接发送给客户端。
  4. 客户端接收响应,报文不经过Director Server。

1.2 DR模式特点

  • Director Server与Real Server必须在同一物理网络。
  • Real Server可使用私有或公网地址。
  • Director仅作为请求入口,不作为网关。
  • 所有请求经过Director,响应直接由Real Server发送。
  • Real Server的网关不能指向Director Server。
  • Real Server的lo接口需配置VIP。

2、DR模式部署步骤

2.1 环境规划

2.1.1 服务器规划
  • DR服务器:192.168.10.23
  • Web服务器1:192.168.10.16
  • Web服务器2:192.168.10.17
  • VIP:192.168.10.180
2.1.2 环境架构

DR模式LVS负载均衡群集,客户端(192.168.10.200)通过外网路由器(网关192.168.10.1)访问VIP(192.168.10.180),Director Server(192.168.10.23)转发请求至两台Real Server,响应直接由Real Server返回客户端。

2.2 配置负载调度器(Director Server)

2.2.1 系统配置
bash 复制代码
# 关闭防火墙
systemctl stop firewalld.service
# 关闭SELinux
setenforce 0
# 加载ip_vs模块
modprobe ip_vs
# 安装ipvsadm工具
yum -y install ipvsadm
2.2.2 配置虚拟IP
bash 复制代码
# 进入网络脚本目录
cd /etc/sysconfig/network-scripts/
# 复制网卡配置文件
cp ifcfg-ens33 ifcfg-ens33:0
# 编辑配置文件(内容如下)
vim ifcfg-ens33:0
# 激活虚拟网卡
ifup ens33:0
# 验证配置
ifconfig ens33:0

ifcfg-ens33:0 配置内容

ini 复制代码
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255
2.2.3 调整内核参数
bash 复制代码
# 编辑sysctl.conf文件
vim /etc/sysctl.conf
# 生效配置
sysctl -p

sysctl.conf 添加参数

ini 复制代码
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
2.2.4 配置LVS服务及调度
bash 复制代码
# 清空原有配置
ipvsadm -C
# 添加虚拟服务(VIP:80,轮询调度)
ipvsadm -A -t 192.168.10.180:80 -s rr
# 添加Real Server节点(DR模式 -g)
ipvsadm -a -t 192.168.10.180:80 -r 192.168.10.16:80 -g
ipvsadm -a -t 192.168.10.180:80 -r 192.168.10.17:80 -g
# 查看节点状态(Route代表DR模式)
ipvsadm -ln

2.3 配置节点服务器(Real Server)

2.3.1 配置VIP到lo接口
bash 复制代码
# 进入网络脚本目录
cd /etc/sysconfig/network-scripts/
# 复制lo接口配置
cp ifcfg-lo ifcfg-lo:0
# 编辑配置文件(内容如下)
vim ifcfg-lo:0
# 激活接口
ifup lo:0
# 验证配置
ifconfig lo:0
# 添加路由(绑定VIP到lo接口)
route add -host 192.168.10.180 dev lo:0

ifcfg-lo:0 配置内容

ini 复制代码
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255
2.3.2 ARP参数调整(避免MAC冲突)
bash 复制代码
# 编辑sysctl.conf文件
vim /etc/sysctl.conf
# 生效配置
sysctl -p

sysctl.conf 添加参数

ini 复制代码
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
2.3.3 安装Web服务
bash 复制代码
# 安装httpd(两台Real Server均执行)
yum -y install httpd
systemctl start httpd

# 192.168.10.16 服务器配置首页
echo 'this is 192.168.10.16 web01!' > /var/www/html/index.html

# 192.168.10.17 服务器配置首页
echo 'this is 192.168.10.17 web02!' > /var/www/html/index.html

2.4 测试LVS群集

bash 复制代码
# 客户端执行(或直接浏览器访问 http://192.168.10.180/)
curl http://192.168.10.180/
# 多次执行,应轮询显示不同节点页面内容(延迟50秒刷新)

3、LVS面试知识点整理

3.1 LVS三种工作模式

模式 原理 优缺点
NAT(VS/NAT) Director改变数据包目标IP并转发,RS响应包回到Director再发客户端 优点:节点可任意OS;缺点:Director是瓶颈
DR(VS/DR) Director改变目标MAC地址,RS直接响应客户端 优点:Director不处理响应;缺点:节点需与Director同网段
TUN(VS/TUN) Director封装IP包到隧道,RS解封直接响应客户端 优点:Director不处理响应;缺点:节点需支持IP隧道

3.2 LVS调度算法

3.2.1 固定调度算法
  • rr:轮询,每个RS均摊请求
  • wrr:加权轮询,权重高的分配更多请求
  • dh:目的地址哈希分配
  • sh:源地址哈希分配
3.2.2 动态调度算法
  • lc:最少连接数
  • wlc:加权最少连接
  • lblc:基于地址的最少连接

3.3 Nginx vs LVS vs HAProxy区别

特性 Nginx LVS(Linux Virtual Server) HAProxy
定位 Web服务器+反向代理+负载均衡 内核级四层负载均衡 专业负载均衡器(四层+七层)
工作层级 四层(TCP)+七层(HTTP/HTTPS) 四层(TCP/UDP,传输层) 四层+七层
性能 高(软件级,单机可达十万级并发) 极高(内核态,百万级并发) 高(接近Nginx,但更专注负载均衡)
功能特点 静态资源服务、反向代理、缓存、支持HTTP/HTTPS负载均衡 高性能转发、调度算法丰富、内核态转发几乎无性能损耗 专注于负载均衡、健康检查更强大、支持会话保持、SSL卸载等
健康检查 简单(TCP/HTTP) 依赖Keepalived或其他工具 强大(多协议、多方式)
配置复杂度 简单 较复杂(需ipvsadm/keepalived配合) 中等(配置文件灵活)
适用场景 Web代理、动静分离、中小型集群 超大规模集群、核心四层调度 高可用集群、对健康检查要求高的业务
优缺点 优点:功能多,易上手;缺点:七层性能不如LVS/HAProxy 优点:性能最强,稳定;缺点:只能四层,配置偏复杂 优点:专业负载均衡,健康检查强;缺点:不自带Web服务

3.4 一句话总结

  • Nginx:轻量、全能,适合Web服务和中小型负载均衡。
  • LVS:极致性能,适合四层超大规模集群,但功能单一。
  • HAProxy:专业负载均衡器,四层+七层均可,健康检查能力最强。

二、LVS+Keepalived群集

1、概念与原理

1.1 Keepalived

  • 基于VRRP协议实现高可用(HA),初衷为LVS负载均衡提供高可用方案,后支持Nginx、MySQL等其他服务。
  • 核心功能:LVS集群管理、节点健康检查(Health Check)、故障自动切换(Failover)、高可用VIP(虚拟IP)接管。

1.2 VRRP工作原理

  • MASTER节点向BACKUP节点发送心跳(通告)。
  • BACKUP节点收不到心跳时,接管VIP。
  • MASTER恢复时,可抢回VIP(抢占模式)或不抢回(非抢占模式)。
  • 默认多播地址:224.0.0.18,优先级决定MASTER节点(数值越大越优先)。

1.3 Keepalived主要模块

模块 功能
core 核心进程、配置文件加载解析
vrrp VRRP协议实现,高可用
check 健康检查,支持TCP/HTTP/脚本检查

2、脑裂问题与防护

2.1 脑裂(Split Brain)

  • 定义:两个节点失去心跳连接,均认为对方挂掉。
  • 后果:共享资源冲突、数据损坏(如数据库)。

2.2 脑裂原因

  1. 心跳线故障(断线、老化)。
  2. 网卡/驱动故障。
  3. 心跳网络设备故障(网卡及交换机)。
  4. 仲裁机器异常。
  5. 防火墙阻挡VRRP心跳消息。
  6. 配置不一致(virtual_router_id、优先级、实例名)。
  7. vrrp实例名字不一致、优先级一致。

2.3 防护策略

  • 双心跳线冗余:减少心跳线故障概率。
  • 磁盘锁(锁定共享资源):避免共享资源争抢,可采用"智能"锁机制。
  • 仲裁机制(Ping参考IP):通过ping网关等参考IP判断自身网络状态,决定是否竞争VIP。
  • 脚本监控报警:及时发现并告警脑裂问题。

3、部署步骤

3.1 环境准备

  • 主DR(MASTER):192.168.10.80
  • 备DR(BACKUP):192.168.10.23
  • VIP:192.168.10.180
  • Web节点:192.168.10.16、192.168.10.17
  • 客户端:192.168.10.100

3.2 安装与配置LVS + Keepalived

3.2.1 DR服务器操作
bash 复制代码
# 关闭防火墙
systemctl stop firewalld
# 关闭SELinux
setenforce 0
# 安装工具
yum -y install ipvsadm keepalived
# 加载ip_vs模块
modprobe ip_vs
# 检查模块
cat /proc/net/ip_vs
3.2.2 配置Keepalived
bash 复制代码
# 编辑配置文件
vim /etc/keepalived/keepalived.conf

MASTER节点 keepalived.conf 配置

ini 复制代码
global_defs {
    router_id LVS_01  # 路由ID,BACKUP节点设为LVS_02
    smtp_server 127.0.0.1
}

vrrp_instance VI_1 {
    state MASTER  # BACKUP节点设为BACKUP
    interface ens33  # 绑定网卡
    virtual_router_id 10  # 虚拟路由ID,主备需一致
    priority 100  # 优先级,BACKUP设为90
    advert_int 1  # 心跳间隔1秒
    authentication {
        auth_type PASS
        auth_pass abc123  # 认证密码,主备需一致
    }
    virtual_ipaddress {
        192.168.10.180  # VIP地址
    }
}

virtual_server 192.168.10.180 80 {
    delay_loop 6  # 健康检查间隔
    lb_algo rr  # 调度算法(轮询)
    lb_kind DR  # 负载均衡模式(DR)
    persistence_timeout 50  # 会话保持时间
    protocol TCP  # 协议

    real_server 192.168.10.16 80 {
        weight 1  # 权重
        TCP_CHECK {
            connect_port 80  # 检查端口
            connect_timeout 3  # 超时时间
            nb_get_retry 3  # 重试次数
            delay_before_retry 3  # 重试间隔
        }
    }

    real_server 192.168.10.17 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
3.2.3 VIP配置
bash 复制代码
# 编辑虚拟网卡配置
vim /etc/sysconfig/network-scripts/ifcfg-ens33:0
# 重启网络
systemctl restart network
# 激活网卡
ifup ens33:0

ifcfg-ens33:0 配置内容

ini 复制代码
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255
3.2.4 启动服务
bash 复制代码
# 启动keepalived
systemctl start keepalived
# 查看VIP(确认是否绑定)
ip addr
# 保存LVS配置
ipvsadm-save > /etc/sysconfig/ipvsadm
# 启动ipvsadm
systemctl start ipvsadm
# 查看LVS配置
ipvsadm -ln
3.2.5 内核参数优化
bash 复制代码
# 编辑sysctl.conf文件
vim /etc/sysctl.conf
# 生效配置
sysctl -p

sysctl.conf 添加参数

ini 复制代码
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

3.3 配置Web节点

bash 复制代码
# 关闭防火墙
systemctl stop firewalld
# 关闭SELinux
setenforce 0
# 安装httpd
yum -y install httpd
# 启动httpd
systemctl start httpd

# 192.168.10.16 配置首页
echo 'this is kgc web!' > /var/www/html/index.html
# 192.168.10.17 配置首页
echo 'this is benet web!' > /var/www/html/index.html

# 配置lo:0接口(同DR模式Real Server配置)
# 配置ARP参数(同前)

3.4 测试

bash 复制代码
# 1. 客户端访问VIP,验证服务
curl http://192.168.10.180/

# 2. 停掉MASTER的Keepalived,观察BACKUP是否接管VIP
systemctl stop keepalived  # MASTER节点执行
ip addr  # BACKUP节点执行,查看VIP是否出现

# 3. 启动MASTER的Keepalived,观察VIP是否回归
systemctl start keepalived  # MASTER节点执行
ip addr  # MASTER节点执行,查看VIP是否回归

3.5 小结与注意事项

项目 注意点
VIP DR节点配置VIP网卡ens33:0,Web节点配置lo:0
抢占模式 MASTER恢复会抢回VIP,非抢占模式需配置nopreempt
健康检查 Keepalived支持TCP/HTTP检查,可防止故障节点被调度
防火墙 Firewalld需关闭,确保VRRP心跳消息畅通
脑裂防护 采用双心跳线、磁盘锁、仲裁IP、脚本监控等策略
相关推荐
h***06651 小时前
Nginx搭建负载均衡
运维·nginx·负载均衡
不想画图1 小时前
负载均衡——LVS+Keepalived群集部署
运维·负载均衡·lvs
TeleostNaCl1 小时前
Docker | 如何限制容器的 CPU/内存/磁盘IO 的资源利用以降低性能消耗
运维·经验分享·嵌入式硬件·docker·容器·智能路由器
n***s9099 小时前
IP地址、子网掩码(NETMASK)和网关(Gateway)
tcp/ip·gateway·智能路由器
可爱又迷人的反派角色“yang”10 小时前
LVS+Keepalived群集
linux·运维·服务器·前端·nginx·lvs
o***741711 小时前
QoS质量配置
开发语言·智能路由器·php
SoleMotive.1 天前
1、nginx反向代理了解吗?怎么配置nginx服务器?nginx负载均衡的算法都有哪些? 2、后端服务器宕机了,nginx服务器是怎么检查的
服务器·nginx·负载均衡
宏电物联网1 天前
边缘连接实力派,宏电WiFi 6+5G千兆智能路由器新品上市
智能路由器
小李独爱秋1 天前
Cisco Packet Tracer仿真实验 12:运输层端口
网络·网络协议·计算机网络·智能路由器·仿真实验