一、集群概述
1.1 集群介绍
集群是由一组相互独立、通过高速计算机网络互联的计算机组成的群体,以单一系统模式管理。客户与集群交互时,集群如同独立服务器。其特点包括高性能、高性价比、可扩展性、高可用性、负载均衡、错误恢复、透明性、可管理性和可编程性。
1.2 集群类型
- 负载均衡集群:所有节点均活动,分摊工作负载,如 Web 服务器集群等,通过算法分配请求,充分利用各节点资源。
- 高可用集群:保障应用程序持续对外服务,常见为 2 个节点的 HA 集群,有主从、互为主从、多台服务器主从等实现方式,节点间可共享存储资源。
- 科学计算集群:提供强大计算能力,采用并行计算,分为时间计算(流水线技术)和空间计算(多处理器并发执行),适用于科学计算领域。
1.3 负载均衡技术类型
- 四层负载均衡器:也称 4 层交换机,基于 IP 加端口实现负载均衡,如 LVS、F5 等。
- 七层负载均衡器:也称 7 层交换机,位于应用层,可根据报文内容和算法选择后端服务器,如 HAProxy、Nginx。
1.4 负载均衡实现方式
- 硬件负载均衡产品:F5、深信服、Radware。
- 软件负载均衡产品:LVS(Linux Virtual Server)、Haproxy、Nginx、Ats(apache traffic server)。
二、LVS 介绍
LVS 即 Linux 虚拟服务器,是虚拟服务器集群系统,1998 年 5 月由章文嵩博士成立,是国内最早的自由软件项目之一,在 linux 2.6 内核中已成为一部分,之前版本需重新编译内核。使用 LVS 可构建可扩展的网络服务系统,相比单服务器升级,能通过添加服务器满足增长的负载需求,更具伸缩性和成本效益。
三、LVS 和 nginx 区别
- LVS 抗负载能力更强,性能更高,对内存和 cpu 资源消耗低。
- LVS 工作在网络层,流量由操作系统内核处理;nginx 工作在应用层,可针对 http 应用实施分流策略。
- LVS 安装配置较复杂,网络依赖性大,稳定性高,不支持正则表达式,不能实现动静分离。
- LVS 使用的协议范围广,Nginx 仅支持 HTTP、HTTPS、Email 协议,适用范围小。
四、LVS 相关术语
- DS:前端负载均衡器节点。
- RS:后端真实的工作服务器。
- VIP:向外部直接面向用户请求的虚拟 IP 地址。
- DIP:Director Server 用于和内部主机通讯的 IP 地址。
- RIP:后端服务器的 IP 地址。
- CIP:访问客户端的 IP 地址。
五、LVS 负载均衡算法
5.1 静态负载均衡
- rr(轮询):按预定顺序轮流分配请求给后端服务器。
- wrr(加权轮询):考虑后端服务器权重,权重高的接收更多请求。
- sh(源地址散列算法):根据请求源 IP 地址通过散列函数确定分发的服务器。
- dh(目标地址 HASH):根据请求目标 IP 地址进行散列分发。
5.2 动态负载均衡
- lc(最少连接):将新请求分配给当前活跃连接数最少的服务器,算法为 active * 256 + inactive,值小者优先。
- wlc(加权最少连接):算法为(active * 256 + inactive) /weight,值小者优先。
- sed(最少期望延迟):算法为(active + 1) * 256 /weight,值小者优先。
- nq(永不排队):无服务器过载时,请求直接发至空闲服务器;服务器达容量限制,新请求被拒绝。
- LBLC(基于局部性的最少连接):考虑全局和服务器所在局部负载情况。
- LBLCR(基于局部性的带复制功能的最少连接):在 LBLC 基础上,服务器过载时可复制流量到其他服务器。
六、三种 LVS 工作模式详解
1. 基于 NAT 的 LVS 模式负载均衡
1.1 工作原理
用户请求到达调度器,经 PREROUTING 链送至 INPUT 链,IPVS 检查为集群服务后,修改目标 IP 为 RIP 送 POSTROUTING 链转发给 Real Server;Real Server 构建响应报文发回调度器,调度器修改源 IP 为 VIP 后响应客户端。
1.2 特性
RS 使用私有地址,网关指向 DIP;DIP 和 RIP 在同一网段;请求和响应报文都经调度器,调度器易成瓶颈;支持端口映射;RS 可使用任意操作系统。
1.3 优点
物理服务器可使用任何支持 TCP/IP 的操作系统,只需在调度器配置一个 IP 地址,服务器组可用私有 IP。
1.4 缺点
伸缩能力有限,服务器节点过多时,负载均衡器会成为瓶颈。
2. 基于 TUN 的 LVS 负载均衡
2.1 实现原理
在原有 IP 报文外封装一层 IP 首部,客户端数据包到 LVS 后,经 PREROUTING 链至 INPUT 链,LVS 选择 RS 后转发至 OUTPUT 链,最终到达后端服务器;后端服务器拆封后处理并响应客户端。
2.2 优点
单臂模式,LVS 负载压力小;数据包修改小,信息完整性高;可跨机房。
2.3 缺点
不支持端口映射;需在 RS 安装模块及配置 VIP;隧道头部 IP 固定,RS 网卡可能不均匀;隧道头部可能导致分片影响性能。
2.4 使用场景
对转发性要求较高且有跨机房需求的场景。
3. LVS(DR)负载均衡
3.1 实现原理
客户端请求到 LVS,经 PREROUTING 链至 INPUT 链,LVS 确认是定义的服务后选择 RS,修改数据包 MAC 地址后发至 RS;RS 处理后通过 lo 接口传至 eth0 网卡响应客户端。
3.2 优点
响应数据不经过 LVS,性能高;对数据包修改小,信息完整性好。
3.3 缺点
LVS 与 RS 必须在同一物理网络;RS 上必须配置 lo 和其他内核参数;不支持端口映射。
3.4 使用场景
对性能要求高,且需要透传客户端源 IP 地址的场景。
七、IPVS 模块概述
1. IPVS 的介绍
IPVS 是高效的 Layer-4 交换机,提供负载平衡功能。初始 SYN 报文到达时选择服务器转发,后继报文根据 IP 和 TCP 报文头地址转发到相同服务器。要求后端服务器组提供相同服务,部分应用中后端服务器功能可不同,此时需基于内容请求分发。
2. IPVS 的工作原理
IPVS 是 LVS 的关键,实现 LVS 的 IP 负载平衡技术。安装在 Director Server 上,虚拟出 VIP,用户通过 VIP 访问服务,请求经 VIP 到负载调度器,再由其从 Real Server 列表选节点响应用户。LVS 分为内核空间的 IPVS 模块(工作在 Netfilter 框架的 input 链上)和用户空间的 ipvsadm 工具(用于定义集群服务并传送给 IPVS 模块)。
3. ipvsadm 命令
ipvsadm 命令用于管理 LVS 集群,包括添加、修改、删除集群服务和真实服务节点,查看规则,清空规则,设置超时值等。常见选项及作用如下:
| 选项 | 作用 |
|---|---|
| -A | 添加虚拟服务节点 |
| -D | 删除虚拟服务节点 |
| -L | 查看虚拟服务节点列表 |
| -n | 以数字形式显示查看内容 |
| -a | 添加真实服务节点 |
| -d | 删除真实服务节点 |
| -l | 查看真实服务节点列表 |
| -t | 指定虚拟服务器 IP 地址 |
| -s | 指定调度算法 |
| -r | 指定真实服务器节点 IP 地址 |
| -w | 指定权重值 |
| -g | 直接路由模式(默认) |
| -m | NAT 模式 |
| -i | 隧道模式 |