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、脚本监控等策略
相关推荐
DO your like1 天前
手机热点搭建个人局域网
服务器·智能手机·智能路由器
华纳云IDC服务商1 天前
DNS负载均衡能自动避开故障服务器吗?
运维·服务器·负载均衡
zbtlink1 天前
2.5G路由器是啥?和家用的有哪些差异?
网络·智能路由器
oMcLin1 天前
如何在 Debian 11 上实现基于 BGP 路由的动态负载均衡,提升跨地域数据中心的连接稳定性
debian·php·负载均衡
墨香幽梦客1 天前
系统高可用(HA)方案复盘:从主备切换到负载均衡的实现
运维·负载均衡
IT 乔峰1 天前
分享一个负载均衡的NDB高可用集群架构+部署详细说明
数据库·架构·负载均衡
RECRUITGUY2 天前
通信 - WIFI
网络·智能路由器
尼古拉斯·纯情暖男·天真·阿玮2 天前
实验一 安全威胁与攻击实验
网络·安全·智能路由器
阿巴~阿巴~2 天前
从帧到包:深入解析链路层与局域网通信的核心机制
服务器·网络·网络协议·tcp/ip·智能路由器·mac·数据链路层
坐不住的爱码2 天前
Nacos负载均衡
负载均衡·cloud