当前位置: 首页 > news >正文

LVS群集

LVS负载均衡群集详解:NAT与DR模式部署指南

一、LVS简介

LVS(Linux Virtual Server)是一个基于Linux内核的高性能、高可用性的负载均衡解决方案。它能够将多台服务器组成一个虚拟服务器,为客户端提供统一的服务入口,并通过多种调度算法将请求分发到后端真实服务器上。

二、ipvsadm工具选项说明

选项说明
-A添加虚拟服务器
-D删除整个虚拟服务器
-s指定负载调度算法(rr、wrr、lc、wlc)
-a添加真实服务器(节点服务器)
-d删除某一个节点
-t指定VIP地址及TCP端口
-r指定RIP地址及TCP端口
-m使用NAT群集模式
-g使用DR模式
-i使用TUN模式
-w设置权重(权重为0时表示暂停节点)
-p 60保持长连接60秒
-l列表查看LVS虚拟服务器
-n以数字形式显示地址、端口等信息

三、NAT模式LVS负载均衡群集部署

环境准备

  • 负载调度器:内网关ens33:192.168.10.19,外网关ens37:10.0.0.1
  • Web节点服务器1:192.168.10.16
  • Web节点服务器2:192.168.10.17
  • NFS服务器:192.168.10.18
  • 客户端:10.0.0.12

1. 部署共享存储(NFS服务器)

systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0yum install nfs-utils rpcbind -y
systemctl start rpcbind.service
systemctl start nfs.servicemkdir /opt/kgc /opt/benet
chmod 777 /opt/kgc /opt/benet
echo 'this is kgc web!' > /opt/kgc/index.html
echo 'this is benet web!' > /opt/benet/index.htmlvim /etc/exports
/usr/share *(ro,sync)
/opt/kgc 192.168.10.0/24(rw,sync)
/opt/benet 192.168.10.0/24(rw,sync)exportfs -rv

2. 配置节点服务器

systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0yum install httpd -y
systemctl start httpd.service
systemctl enable httpd.serviceyum install nfs-utils rpcbind -y
showmount -e 192.168.10.18# 192.168.10.16节点
mount.nfs 192.168.10.18:/opt/kgc /var/www/html# 192.168.10.17节点
mount.nfs 192.168.10.18:/opt/benet /var/www/html

3. 配置负载调度器

# 配置SNAT转发规则
echo '1' > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o ens37 -j SNAT --to-source 10.0.0.1# 加载LVS内核模块
modprobe ip_vs
cat /proc/net/ip_vs# 安装ipvsadm
yum -y install ipvsadm
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm.service# 配置负载分配策略
ipvsadm -C
ipvsadm -A -t 10.0.0.1:80 -s rr
ipvsadm -a -t 10.0.0.1:80 -r 192.168.10.16:80 -m
ipvsadm -a -t 10.0.0.1:80 -r 192.168.10.17:80 -m
ipvsadm

4. 测试效果

在客户端(10.0.0.12)使用浏览器访问http://10.0.0.1/,不断刷新浏览器测试负载均衡效果。

四、DR模式LVS负载均衡群集部署

环境准备

  • DR服务器:192.168.10.18
  • Web服务器1:192.168.10.16
  • Web服务器2:192.168.10.17
  • VIP:192.168.10.180
  • 客户端:192.168.10.200

1. 配置负载调度器

# 配置虚拟IP地址
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0  # 配置VIP:192.168.10.180
ifup ens33:0# 调整proc响应参数
vim /etc/sysctl.conf  # 设置相关参数为0
sysctl -p# 配置负载分配策略
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
ipvsadm -C
ipvsadm -A -t 192.168.10.180:80 -s rr
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

2. 配置节点服务器

# 配置虚拟IP地址
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0  # 配置VIP:192.168.10.180
ifup lo:0
route add -host 192.168.10.180 dev lo:0# 调整内核的ARP响应参数
vim /etc/sysctl.conf  # 设置arp_ignore和arp_announce参数
sysctl -p

3. 测试LVS群集

在客户端使用浏览器访问http://192.168.10.180/

五、LVS工作模式对比

模式优点缺点
NAT模式配置简单,支持任何TCP/IP系统性能瓶颈,扩展性有限
DR模式高性能,响应直接返回客户端需要在同一局域网环境
TUN模式高性能,可跨网络部署需要服务器支持IP隧道

六、LVS调度算法

固定调度算法

  • rr:轮询算法
  • wrr:加权轮询调度
  • dh:目的地址哈希调度
  • sh:源地址哈希调度

动态调度算法

  • wlc:加权最小连接数调度
  • lc:最小连接数调度
  • lblc:基于地址的最小连接数调度

七、总结

LVS是一个强大且灵活的负载均衡解决方案,支持多种工作模式和调度算法,能够满足不同场景下的负载均衡需求。NAT模式适合简单环境,DR模式适合高性能要求的场景,TUN模式则适用于跨网络环境的部署。在实际应用中,需要根据具体需求选择合适的工作模式和调度算法。


LVS-DR模式负载均衡群集详解:原理、部署与优化

一、DR模式工作原理

数据包流向分析

  1. 客户端请求阶段:客户端发送请求到Director Server(负载均衡器),请求数据报文的源IP是CIP,目标IP是VIP
  2. 负载均衡处理:Director Server和Real Server在同一个网络中,数据通过二层数据链路层传输
  3. 报文重封装:内核空间判断数据包目标IP是本机VIP,IPVS比对请求服务是否为集群服务,是则重新封装数据包:
    • 修改源MAC地址为Director Server的MAC地址
    • 修改目标MAC地址为Real Server的MAC地址
    • 源IP地址与目标IP地址保持不变
  4. Real Server处理:Real Server接收报文后,重新封装响应报文(源IP为VIP,目标IP为CIP),通过lo接口传送给物理网卡发出
  5. 响应直接返回:Real Server直接将响应报文传送到客户端,不经过Director Server

DR模式特点

  • 网络要求:Director Server和Real Server必须在同一物理网络中
  • 地址灵活性:Real Server可以使用私有地址或公网地址
  • 入口角色:Director Server作为群集访问入口,但不作为网关使用
  • 流量分离:请求报文经过Director Server,响应报文直接返回客户端
  • 路由限制:Real Server的网关不能指向Director Server IP
  • 接口配置:Real Server的lo接口需要配置VIP地址

二、DR模式部署实战

环境规划

角色IP地址说明
DR服务器192.168.10.23负载调度器
Web服务器1192.168.10.16节点服务器
Web服务器2192.168.10.17节点服务器
VIP192.168.10.180虚拟IP地址
客户端192.168.10.200测试客户端
NFS服务器192.168.10.19共享存储

1. 配置负载调度器(192.168.10.23)

# 基础环境配置
systemctl stop firewalld.service
setenforce 0
modprobe ip_vs
cat /proc/net/ip_vs
yum -y install ipvsadm# 配置虚拟IP地址(VIP)
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255
ifup ens33:0
ifconfig ens33:0# 调整proc响应参数
vim /etc/sysctl.conf
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
sysctl -p# 配置负载分配策略
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadmipvsadm -C
ipvsadm -A -t 192.168.10.180:80 -s rr
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
ipvsadm# 查看节点状态
ipvsadm -ln

2. 配置节点服务器(192.168.10.16、192.168.10.17)

# 基础环境配置
systemctl stop firewalld.service
setenforce 0# 配置虚拟IP地址(VIP)
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255
ifup lo:0
ifconfig lo:0# 添加路由规则
route add -host 192.168.10.180 dev lo:0# 设置开机自启动
vim /etc/rc.local
/sbin/route add -host 192.168.10.180 dev lo:0
chmod +x /etc/rc.d/rc.local# 调整内核ARP响应参数
vim /etc/sysctl.conf
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
sysctl -p# 安装必要服务
yum -y install nfs-utils rpcbind httpd
systemctl start rpcbind
systemctl start httpd# 挂载共享存储(以192.168.10.16为例)
mount.nfs 192.168.10.19:/opt/kgc /var/www/html
echo 'this is kgc web!' > /var/www/html/index.html# 192.168.10.17节点
mount.nfs 192.168.10.19:/opt/benet /var/www/html
echo 'this is benet web!' > /var/www/html/index.html

3. 路由命令详解

route add -host 192.168.10.180 dev lo:0
  • route: 管理系统路由表的命令
  • add: 添加新路由规则
  • -host 192.168.10.180: 指定目标为主机地址
  • dev lo:0: 指定数据包通过lo:0虚拟接口传输

作用: 将目标IP地址192.168.10.180指向本地回环接口的虚拟接口lo:0,使访问该IP的数据流量不会离开本地计算机。

4. ARP参数说明

  • arp_ignore = 1: 系统只响应目的IP为本地IP的ARP请求
  • arp_announce = 2: 系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址

三、LVS工作模式对比

特性NAT模式DR模式TUN模式
性能较低,有瓶颈高性能高性能
网络要求无特殊要求同一局域网可跨网络
配置复杂度简单中等复杂
适用场景小规模应用高性能要求跨网络环境

四、LVS调度算法

固定调度算法

  • rr (轮询): 依次分配请求到不同RS节点
  • wrr (加权轮询): 根据权值分配任务,权值高的优先
  • dh (目的地址哈希): 以目的地址为关键字查找静态hash表
  • sh (源地址哈希): 以源地址为关键字查找静态hash表

动态调度算法

  • wlc (加权最小连接数): 选择Ti/Wi值最小的RS
  • lc (最小连接数): 选择当前连接最少的RS
  • lblc (基于地址的最小连接数): 结合地址哈希和最小连接数

五、测试验证

在客户端使用浏览器访问 http://192.168.10.180/,不断刷新页面观察负载均衡效果。正常情况下,请求应该轮流分发到两个Web服务器。

六、常见问题排查

  1. VIP无法访问

    • 检查Director Server的VIP配置
    • 验证Real Server的lo:0接口配置
    • 确认ARP参数设置正确
  2. 负载不均

    • 检查调度算法配置
    • 验证Real Server服务状态
  3. 响应缓慢

    • 检查网络连通性
    • 确认Real Server性能状态

七、总结

LVS-DR模式通过直接路由技术实现了高性能的负载均衡,响应数据直接返回客户端,避免了Director Server的性能瓶颈。在实际部署中需要注意ARP抑制、路由配置等关键技术点,确保集群的稳定性和高性能。


LVS+Keepalived 高可用群集:原理、部署与实战指南

一、Keepalived 概述

什么是Keepalived?

Keepalived 是一个基于 VRRP 协议实现的 LVS 服务高可用方案,专门用于解决静态路由单点故障问题。最初专为 LVS 负载均衡软件设计,用于管理和监控 LVS 集群中各个服务节点的状态,后来加入了高可用的 VRRP 功能。

核心功能

  • 管理 LVS 负载均衡软件:通过配置文件直接管理 LVS 配置
  • 故障自动切换(Failover):实现主备主机之间的故障转移
  • 健康检查(Health Checking):监控节点服务器状态
  • 高可用性(HA):确保负载调度器和节点服务器的高可用

二、Keepalived 体系架构

主要模块

模块功能描述
core模块keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析
vrrp模块实现 VRRP 协议,处理主备切换
check模块负责健康检查,支持端口检查和URL检查

VRRP 通信原理

  • 协议目的:解决静态路由的单点故障问题
  • 通信方式:IP多播(默认多播地址 224.0.0.18)
  • 工作机制:主节点发包,备节点接包,备节点接收不到数据包时启动接管程序
  • 认证方式:目前推荐使用明文方式配置认证类型和密码

三、脑裂问题及解决方案

什么是脑裂?

在高可用(HA)系统中,当两个节点间的"心跳线"断开时,HA系统分裂成为两个独立的个体,相互争抢共享资源和服务。

脑裂原因

  1. 心跳线链路故障
  2. 网卡及相关驱动问题
  3. 心跳线连接设备故障
  4. 仲裁机器问题
  5. iptables防火墙阻挡心跳消息
  6. VRRP实例配置不一致

应对策略

  1. 添加冗余心跳线:双线条线,减少发生几率
  2. 启用磁盘锁:正在服务一方锁住共享磁盘
  3. 设置仲裁机制:通过参考IP(如网关IP)进行判断
  4. 脚本检测报警:实时监控并报警

四、LVS+Keepalived 群集部署

环境准备

角色IP地址软件组件
主DR服务器192.168.10.80ipvsadm、keepalived
备DR服务器192.168.10.23ipvsadm、keepalived
Web服务器1192.168.10.16httpd
Web服务器2192.168.10.17httpd
虚拟IP(VIP)192.168.10.180-
客户端192.168.10.100-

1. 配置负载调度器(主备相同)

# 基础环境配置
systemctl stop firewalld.service
setenforce 0
yum -y install ipvsadm keepalived
modprobe ip_vs
cat /proc/net/ip_vs
配置keepalived
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf

主服务器配置(192.168.10.80):

global_defs {smtp_server 127.0.0.1router_id LVS_01#vrrp_strict
}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 10priority 100advert_int 1authentication {auth_type PASSauth_pass abc123}virtual_ipaddress {192.168.10.180}
}virtual_server 192.168.10.180 80 {delay_loop 6lb_algo rrlb_kind DRpersistence_timeout 50protocol TCPreal_server 192.168.10.16 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 192.168.10.17 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}
}

备服务器配置(192.168.10.23):

  • 修改 router_id LVS_02
  • 修改 state BACKUP
  • 修改 priority 90
  • 其他配置与主服务器相同
配置虚拟IP
vim /etc/sysconfig/network-scripts/ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255
systemctl restart network
ifup ens33:0
systemctl start keepalived
ip addr  # 查看虚拟网卡vip
启动ipvsadm服务
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
ipvsadm -ln
调整proc响应参数
vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p

2. 配置节点服务器

# 基础环境配置
systemctl stop firewalld
setenforce 0
yum -y install httpd
systemctl start httpd# Web服务器1(192.168.10.16)
echo 'this is kgc web!' > /var/www/html/index.html# Web服务器2(192.168.10.17)
echo 'this is benet web!' > /var/www/html/index.html
配置虚拟IP和ARP参数
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255
service network restart
ifup lo:0
ifconfig lo:0
route add -host 192.168.10.180 dev lo:0vim /etc/sysctl.conf
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
sysctl -p

3. 抢占与非抢占模式

抢占模式:MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来
非抢占模式:MASTER恢复后不抢占BACKUP升级为MASTER后的VIP

非抢占式配置:

  • 两个节点state都必须为backup
  • 添加配置 nopreempt
  • 启动服务的顺序决定master权限

五、测试验证

正常访问测试

在客户端访问 http://192.168.10.180/,观察负载均衡效果

故障切换测试

# 在主服务器关闭keepalived服务
systemctl stop keepalived# 观察备服务器是否接管VIP和服务
ip addr  # 在备服务器上查看VIP

健康检查验证

  • 停止某个Web服务器的httpd服务
  • 观察Keepalived是否自动将其从转发队列中移除
  • 重启服务后观察是否自动重新加入

六、故障排查指南

常见问题

  1. VIP无法访问

    • 检查keepalived服务状态
    • 验证虚拟网卡配置
    • 确认防火墙设置
  2. 负载不均

    • 检查调度算法配置
    • 验证Real Server权重设置
  3. 脑裂现象

    • 检查心跳线连通性
    • 验证VRRP配置一致性

监控命令

# 查看keepalived状态
systemctl status keepalived# 查看VIP状态
ip addr show ens33:0# 查看LVS转发规则
ipvsadm -ln# 查看日志
tail -f /var/log/messages

七、总结

LVS+Keepalived 组合提供了完整的高可用负载均衡解决方案,具备以下优势:

  1. 高可用性:通过VRRP协议实现主备自动切换
  2. 健康检查:实时监控后端服务器状态
  3. 负载均衡:支持多种调度算法
  4. 故障隔离:自动隔离故障节点
  5. 灵活配置:支持抢占和非抢占模式

在实际生产环境中,建议:

  • 配置冗余心跳线防止脑裂
  • 设置合适的健康检查参数
  • 定期进行故障切换测试
  • 建立完善的监控报警机制

通过本文的详细部署指南和原理讲解,相信您已经能够成功搭建和管理LVS+Keepalived高可用群集。



文章转载自:

http://Y9ISj2Wn.yzdth.cn
http://bBpGq43Z.yzdth.cn
http://AeuBiRHz.yzdth.cn
http://kIqHSlKe.yzdth.cn
http://R2LPZUXJ.yzdth.cn
http://Cgp3lFaZ.yzdth.cn
http://3DFIBXBQ.yzdth.cn
http://UO2ZbszM.yzdth.cn
http://6VRVaQYo.yzdth.cn
http://KUfXUeXL.yzdth.cn
http://9hgEstKE.yzdth.cn
http://vk9FBJVb.yzdth.cn
http://i3FUb5ma.yzdth.cn
http://hMe12vM0.yzdth.cn
http://AQcqpAB0.yzdth.cn
http://fnAWpWvx.yzdth.cn
http://71HU33yg.yzdth.cn
http://OdH8mIBo.yzdth.cn
http://tZmtHftl.yzdth.cn
http://9MIW103z.yzdth.cn
http://m2kaBeys.yzdth.cn
http://r6aogoH2.yzdth.cn
http://xoYk2hCe.yzdth.cn
http://Sxg76B97.yzdth.cn
http://ypWSljKK.yzdth.cn
http://4EW19ugw.yzdth.cn
http://WXhCXjOt.yzdth.cn
http://hJTfxLPD.yzdth.cn
http://BCupOHXU.yzdth.cn
http://gznceYZL.yzdth.cn
http://www.dtcms.com/a/377377.html

相关文章:

  • 半导体功率器件IGBT工艺全流程
  • Q3.1 PyQt 中的控件罗列
  • 深入解析ReentrantLock:可重入锁
  • ARM处理器总线架构解析:iCode、D-code与S-Bus
  • Qoder 前端UI/UE升级改造实践:从传统界面到现代化体验的华丽蜕变
  • Flutter多线程
  • 如何在高通跃龙QCS6490 Arm架构上使用Windows 11 IoT企业版?
  • JavaScript 对象说明
  • CMake目标依赖关系解析
  • 小型企业常用的元数据管理工具
  • 论文AI写作哪个软件好?实测对比5款热门AI写作工具
  • PostgreSQL 内机器学习的关键智能算法研究
  • 12公里无人机图传模组:从模糊到超高清的飞跃,抗干扰能力全面升级
  • GitHub Actions中steps下面的Setup environment设置的环境变量不能在后面步骤使用问题处理
  • YOLOv5实战-GPU版本的pytorch虚拟环境配置
  • 苍穹外卖项目实战(day7-2)-购物车操作功能完善-记录实战教程、问题的解决方法以及完整代码
  • 【VsCode】离线状态下安装插件
  • 浏览器开发CEFSharp (十七)网页自定义下载—仙盟创梦IDE
  • Nodejs读取目录下面的文件
  • docker 重命名镜像
  • 「CTF」青少年CTF·雏形系统
  • 光子计算芯片实战:Lightmatter Passage互连架构性能评测
  • 实时多模态电力交易决策系统:设计与实现
  • 条码控件Aspose.BarCode教程:使用 C# 构建 Code11 条形码生成器
  • 分布式专题——7 Redis Stack扩展功能
  • QuestionPicture:一键批量改图,支持压缩图片
  • Prompt提示词(保姆级教程)
  • SSM病房管理信息系统o45h4(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • SpreadJS:让多源数据筛选排序如 Excel 般便捷高效
  • ARM内存映射与启动地址重映射机制解析