LVS负载均衡集群
什么是集群?
一、集群的核心目标
- 高性能计算:通过多节点并行处理复杂任务(如科学计算、大数据分析)。
- 高可用性(HA):避免单点故障,部分节点失效时服务仍可正常运行。
- 可扩展性:通过添加节点提升整体处理能力,支持业务规模增长。
- 资源整合:集中管理分散的计算、存储资源,提高利用率。
二、集群的常见类型及特点
根据应用场景,集群可分为以下几类:
1. 负载均衡集群(Load Balancing Cluster)
目标:将流量或任务均匀分配到多个节点,避免单节点过载。
典型场景:Web 服务、API 接口、数据库读写分离。
技术示例
- LVS(4 层负载均衡)、Nginx(7 层负载均衡)用于流量分发;
Redis Cluster 通过分片(Sharding)分摊数据存储压力。
2. 高可用性集群(High Availability Cluster)
目标:通过冗余节点和故障转移机制,确保服务持续可用。
核心机制
- 心跳检测(节点间实时监控状态);
- 主备切换(Master-Slave 模式,主节点故障时备节点接管)。
典型场景:数据库主从集群(如 MySQL Replication)、Keepalived+LVS 的虚拟 IP 漂移。
3. 高性能计算集群(HPC Cluster)
- 目标:通过并行计算处理大规模科学计算、AI 训练等任务。
- 技术特点
- 节点间通过高速网络(如 InfiniBand)互联;
- 使用分布式计算框架(如 Hadoop、Spark、TensorFlow Distributed)。
- 典型场景:气象预报、基因测序、自动驾驶模型训练。
4. 存储集群(Storage Cluster)
- 目标:将分散的存储资源整合为统一存储池,提供海量数据存储和冗余备份。
- 核心技术
- 分布式文件系统(如 HDFS、Ceph);
- 块存储集群(如 GlusterFS)、对象存储集群(如 MinIO)。
- 典型场景:云计算存储(如 AWS S3)、大数据日志存储。
5. 容器集群(Container Cluster)
- 目标:管理和调度容器化应用(如 Docker),实现服务自动化部署与弹性伸缩。
- 代表技术:Kubernetes(K8s),通过 Pod、Service、ReplicaSet 等组件管理容器实例。
- 优势:服务快速部署、资源动态分配、故障自动恢复。
三、集群的关键技术与组件
- 分布式协调
- ZooKeeper、etcd 用于维护集群节点状态一致性(如选举主节点、配置同步)。
- 通信协议
- RPC(远程过程调用,如 gRPC)、消息队列(如 Kafka)用于节点间数据交互。
- 数据一致性
- 强一致性(如 Raft 算法)、最终一致性(如 Cassandra 的读写策略),根据业务需求选择。
- 资源管理
- YARN(Hadoop 资源管理器)、Kubernetes 调度器负责分配 CPU、内存等资源。
四、集群与单机的对比优势
维度 | 单机系统 | 集群系统 |
---|---|---|
性能 | 受限于硬件规格(如 CPU 核数) | 可通过添加节点线性扩展性能 |
可用性 | 单点故障风险高 | 多节点冗余,故障影响可隔离 |
扩展性 | 硬件升级成本高、复杂度大 | 支持 “横向扩展”(添加节点) |
成本 | 高端硬件采购成本高 | 可使用廉价服务器,成本更灵活 |
复杂度 | 管理简单 | 需要处理分布式一致性、网络通信等问题 |
五、典型集群架构示例
Web 服务集群
客户端 → 负载均衡器(LVS/Nginx) → 应用服务器集群(Tomcat/Node.js) → 数据库集群(MySQL主从)
大数据集群
数据采集 → HDFS(存储) + Spark集群(计算) → 结果存储(HBase)
六、集群面临的挑战
- 分布式一致性:多节点数据同步时可能出现冲突(如 “脑裂” 问题)。
- 网络延迟:节点间通信依赖网络,高并发下可能成为瓶颈。
- 故障排查:多节点环境下定位故障源比单机更复杂。
- 管理复杂度:需专业工具(如 Prometheus 监控、Grafana 告警)辅助运维。
总结
集群是现代 IT 架构的核心基础,通过 “分而治之” 的思想将多台设备整合成强大的计算实体。从企业级 Web 服务到前沿的 AI 训练,集群技术解决了单机系统在性能、可用性和扩展性上的局限,但也引入了分布式系统的复杂性。理解集群的类型和技术原理,是设计高可用、高性能系统的关键。
LVS(Linux Virtual Server)的全面解析
一、LVS 是什么?
LVS(Linux 虚拟服务器)是一个由章文嵩博士开发的开源负载均衡解决方案,基于 Linux 内核实现,主要用于构建高可用、高性能的服务器集群。它工作在 OSI 模型的第 4 层(传输层),通过 IP 和端口进行流量转发,可视为 “网络流量调度器”。
二、LVS 的核心作用
- 负载均衡:将客户端请求分发到多个后端真实服务器(RS),避免单台服务器过载,提升系统整体处理能力。
- 高可用性:通过健康检查机制监控 RS 状态,自动剔除故障节点,确保服务持续可用。
- 流量调度:支持多种负载均衡算法,根据业务需求灵活分配流量,优化资源利用率。
三、LVS 的优点
维度 | 具体优势 |
---|---|
性能卓越 | 工作在内核层,几乎不消耗 CPU 资源,转发效率极高,单台 LVS 节点可支撑数百万级并发连接(取决于硬件)。 |
稳定性强 | 基于 Linux 内核原生实现,与系统深度集成,长期运行稳定性高,适合作为关键业务的流量入口。 |
兼容性广 | 支持 TCP、UDP 等多种协议,可负载均衡 Web、数据库、流媒体等各类服务,且对后端 RS 的操作系统、应用架构无特殊要求。 |
功能灵活 | 支持多种工作模式(DR、NAT、TUN)和负载均衡算法(轮询、加权轮询、最少连接等),可根据网络环境和业务场景灵活配置。 |
成本低廉 | 纯开源方案,无需商业软件授权费用,仅需普通 Linux 服务器即可搭建高性能集群。 |
四、LVS 的缺点
维度 | 具体限制 |
---|---|
配置复杂度高 | 原生 LVS(通过ipvsadm 命令配置)需手动编写规则,对运维人员技术要求较高;虽可通过 Keepalived 简化配置,但底层原理仍需深入理解。 |
健康检查能力有限 | 原生 LVS 仅支持简单的 TCP 端口检查,若需更复杂的应用层检查(如 HTTP 响应码、内容校验),需结合 Keepalived 或额外工具(如 Nagios)。 |
会话保持实现复杂 | 会话保持(Persistence)依赖内核模块,配置不当可能导致连接中断,且跨 LVS 节点的会话同步需额外方案(如分布式存储会话状态)。 |
不支持 7 层负载均衡 | 仅工作在 4 层,无法基于 URL、HTTP 头信息等 7 层参数进行流量调度,需搭配 Nginx、HAProxy 等 7 层负载均衡器使用。 |
运维门槛高 | 出现故障时,需深入排查内核层、网络层、RS 层等多层问题,定位难度较大,对运维团队的技术深度要求较高。 |
五、LVS 的典型应用场景
- 大型网站流量入口:如早期的淘宝、京东等电商平台,利用 LVS+Keepalived 构建高可用负载均衡集群,支撑海量用户访问。
- 金融 / 银行核心系统:对稳定性和性能要求极高的场景,LVS 可作为流量调度中枢,确保服务持续可用。
- 云计算平台:OpenStack 等云平台常使用 LVS 作为虚拟路由器,实现租户流量的负载均衡和隔离。
- CDN 节点调度:在内容分发网络中,LVS 用于将用户请求调度到离其最近的缓存节点,提升响应速度。
六、LVS 与其他负载均衡工具的对比
工具 | 工作层 | 性能 | 功能丰富度 | 适用场景 |
---|---|---|---|---|
LVS | 4 层 | 极高 | 基础负载均衡 + 高可用 | 大流量、高并发的 4 层流量调度 |
HAProxy | 4/7 层 | 高 | 丰富的 7 层功能 | 需基于 URL、header 调度的场景 |
Nginx | 4/7 层 | 中高 | 7 层负载均衡 + 缓存 + 代理 | Web 服务、API 网关、动静资源分离 |
Traefik | 7 层 | 中 | 容器化环境自动配置 | Kubern |
示例 lvs+web+nfs
NAT模式
环境配置:
192.168.10.101 nfs (安装nfs-utils)
192.168.10.102 web1 (安装 httpd nfs-utils)
192.168.10.103 web2 (安装 httpd nfs-utils)
lvs 192.168.10.104内 172.16.16.172 外 (安装 ipvsadm)
客户端 172.16.16.200
分别安装他们对应所需要的软件
配置 lvs
# 1. 创建虚拟服务(Virtual Server),定义负载均衡入口
ipvsadm -A -t 172.16.16.172:80 -s rr
# 参数解释:
# -A:添加一个新的虚拟服务(--add-service)
# -t:指定TCP协议的服务(--tcp-service)
# 172.16.16.172:80:虚拟IP地址(VIP)和端口,客户端通过此地址访问负载均衡器
# -s rr:使用轮询(Round Robin)调度算法,按顺序将请求分发给后端服务器
# 2. 添加第一台真实服务器(Real Server),权重为2
ipvsadm -a -t 172.16.16.172:80 -r 192.168.10.102:80 -m -w 2
# 参数解释:
# -a:向虚拟服务中添加真实服务器(--add-real-server)
# -t 172.16.16.172:80:指定要关联的虚拟服务
# -r 192.168.10.102:80:真实服务器的IP地址和端口
# -m:使用NAT模式(Masquerade)进行负载均衡
# -w 2:设置权重为2,表示这台服务器处理请求的优先级是其他服务器的2倍
# 3. 添加第二台真实服务器,权重为1
ipvsadm -a -t 172.16.16.172:80 -r 192.168.10.103:80 -m -w 1
# 参数解释:
# 与第二条命令类似,不同之处在于:
# - 真实服务器IP为192.168.10.103
# - 权重为1,表示这台服务器处理请求的优先级是第一台的一半
# NAT模式说明:
# 在NAT模式下,负载均衡器会修改请求和响应的IP地址,客户端和真实服务器之间的通信必须通过负载均衡器
# 这种模式的优点是配置简单,缺点是所有流量都要经过负载均衡器,可能成为性能瓶颈
# 验证配置:
# 执行以下命令查看当前的LVS配置
ipvsadm -L -n
[root@lvs /]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.16.16.172:80 rr
-> 192.168.10.102:80 Masq 2 0 0
-> 192.168.10.103:80 Masq 1 0 0
在etc/sysctl.conf 下
在lvs上开启net.ipv4.ip_forward = 1 启用 Linux 内核的 IP 转发功能。
sysctl -p 生效
配置httpd
俩个web上操作但内容要不一样区分出来配置验证lvs的轮训算法
[root@web1 conf]# echo "测试" >/var/www/html/index.html
####将web的网管改为lvs的集群地址
使用客户端访问lvs 验证案例是否成功
[root@kehuduan]# curl 172.16.16.172
测试
[root@kehuduan]# curl 172.16.16.172
测试
[root@kehuduan]# curl 172.16.16.172
测试2
####我们采用是加权轮询算法
配置nfs服务器
[root@nfs wwwroot]# dnf -y install nfs-utils ###安装nfs工具集
[root@nfs wwwroot]# vim /etc/exports
/opt/wwwroot/ 192.168.10.0/24(rw,sync,no_root_squash)
#1. 共享目录路径
#/opt/wwwroot/:指定 NFS 服务器上要共享的目录路径。客户端挂载后将访问此目录的内容。
#2. 允许访问的客户端范围
#192.168.10.0/24:这是一个 CIDR 表示法,指允许访问该共享目录的客户端 IP 范围,即从192.168.10.0到192.168.10.255的所有 IP #地址(通常是一个局域网段)。
#192.168.10.0:网络地址
#/24:子网掩码,表示前 24 位是网络位(相当于255.255.255.0)
#3. 挂载选项(括号内参数)
#这些选项控制客户端如何访问共享目录:
#rw:Read-Write,允许客户端读写该目录(默认是只读)。
#sync:同步模式,服务器在确认写操作完成前,会等待数据真正写入磁盘。这保证数据一致性,但可能降低性能(相比async)。
#no_root_squash:特殊权限设置,允许客户端的 root 用户直接以 root 权限访问共享目录。
#默认情况下(root_squash),客户端的 root 用户会被映射为 NFS 服务器上的匿名用户(通常是nobody),防止客户端 root 用户随意修#改服务器文件。
#使用no_root_squash会取消这种限制,存在安全风险,通常仅在测试环境或信任客户端时使用。
[root@nfs wwwroot]# cat index.html
gagagag
验证
[root@localhost]# curl 172.16.16.172
gagagag