LVS 负载均衡
type
status
date
slug
summary
tags
category
icon
password
一、集群技术概述

1. 集群类型
- 负载均衡集群(Load Balance, LB):提升业务并发处理能力。

- 高可用集群(High Availability, HA):避免单点故障,保障服务连续性。
2. 负载均衡技术
- 目的:提升系统并发处理能力。
- 扩展方式:
- Scale In(纵向扩展):提升单机性能。
- Scale Out(横向扩展):增加服务器数量。
- 实现方式:
- 软件:LVS、Nginx(upstream)、HAProxy
- 硬件:F5
3. 高可用技术
- 机制:主备角色通过心跳检测实现故障切换。
- 软件实现:Keepalived
heartbeat、pacemaker、ultramonkey

脑裂
- ----- 什么是脑裂(split-brain)
在"双机热备"高可用(HA)系统中,当联系两个节点的"心跳线"断开时(即两个节点断开联系时),本来为一个整体、动作协调的HA系统,就分裂成为两个独立的节点(即两个独立的个体)。由于相互失去了联系,都以为是对方出了故障,两个节点上的HA软件像"裂脑人"一样,"本能"地争抢"共享资源"、争起"应用服务"。就会发生严重后果:1)或者共享资源被瓜分、两边"服务"都起不来了;2)或者两边"服务"都起来了,但同时读写"共享存储",导致数据损坏(常见如数据库轮询着的联机日志出错)。
两个节点相互争抢共享资源,结果会导致系统混乱,数据损坏。对于无状态服务的HA,无所谓脑裂不脑裂,但对有状态服务(比如MySQL)的HA,必须要严格防止脑裂
[但有些生产环境下的系统按照无状态服务HA的那一套去配置有状态服务,结果就可想而知]。
- ----- 集群脑裂产生的原因
一般来说,裂脑的发生,有以下几种原因:
1. 高可用服务器各节点之间心跳线链路发生故障,导致无法正常通信。
2. 因心跳线坏了(包括断了,老化)。
3. 因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)。
4. 因心跳线间连接的设备故障(网卡及交换机)。
5. 因仲裁的机器出问题(采用仲裁的方案)。
6. 高可用服务器上开启了iptables防火墙阻挡了心跳消息传输。
7. 高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败。
8. 其他服务配置不当等原因,如心跳方式不同,心跳广插冲突、软件Bug等。
二、LVS(Linux Virtual Server)介绍
1. 基本概念
- 由章文嵩博士开发,集成在 Linux 内核中的负载均衡模块。
2. 负载均衡算法
算法 | 说明 |
rr | 轮询(Round Robin) |
wrr | 加权轮询(Weighted RR) |
lc | 最少连接(Least Connections) |
wlc | 加权最少连接(默认) |
sh | 源 IP Hash,保持会话持久 |
轮询法

加权轮询法

源地址哈希法

最少连接数法

三、LVS 工作模式
1. NAT 模式
- 特点:请求和响应都经过调度器。
- 注意事项:
- VIP 和 DIP 需属于不同网段。
- 调度器需开启路由转发。
- Real Server 的网关需指向 DIP。

2. DR 模式(直接路由)
- 特点:请求经过调度器,响应由 Real Server 直接返回客户端。
- 注意事项:
- 所有 Real Server 需配置 VIP。
- 需设置
arp_ignore=1和arp_announce=2避免 ARP 冲突。

3. TUN 模式(隧道模式)
- 略
四、LVS 配置示例
NAT 模式配置步骤:


- Real Server 网关指向 DIP
- 安装 ipvsadm
- 开启路由转发
- 创建虚拟服务
- 添加 Real Server
- 查看状态
DR 模式配置步骤:
- Real Server 配置 VIP(32位掩码)
- 设置 ARP 参数
- 调度器配置 VIP
- 创建虚拟服务并添加 Real Server
五、持久性连接(Session Persistence)
- 作用:一段时间内将同一客户端请求转发到同一台 Real Server。
- 配置示例:
六、注意事项
- DR 模式中 VIP 配置:
- VIP 应配置在
lo接口,掩码为/32,避免 IP 冲突。
- ARP 参数说明:
arp_ignore=1:仅响应目标IP为本机接口的ARP请求。arp_announce=2:总是使用最佳本地IP进行ARP响应。
七、总结
- LVS 是内核级负载均衡解决方案,支持 NAT/DR/TUN 三种模式。
- DR 模式性能最优,但需注意 ARP 配置。
- 持久连接可用于会话保持。
- 高可用需配合 Keepalived 等工具实现。
Loading...