http://linux.it.net.cn/e/cluster/qun/2014/0914/4896.html
LB负载均衡的目的是为了提高访问的并发性和服务器的性能。实现 LB 的方式主要有软件方式和硬件方式。软件方式实现的软件有LVS工作于传输层、nginx工作于应用层haproxy工作于传输层和应用层硬件方式实现的软件有 BIG-IPF5,A10A10等。这里主要介绍软件方式实现 LB。
lvs方式实现 LB原理部分
一、lvs介绍
lvsLinux Virtual Server,Linux虚拟服务是工作在第四层的一款软件。是工作在内核的netfilter模块上的类似于iptables的工作模型。它是一个前端调度器Director,由它来具体实现负载均衡。它的工作原理如下图
几个概念说明
cip请求客户端的 ip 地址。
vip是lvs调度器的 ip 地址通常也是客户端请求服务的的目标 ip 地址。
dip: 是directory和后端 real serveer 之间通信使用的 ip 地址。
rip: 是提供真正服务的real server的 IP 地址。
Director是lvs的前端调度器是ipvs的核心组件。
Real Server: 是后端真正提供服务的服务器。
lvs在内核中是由ipvs实现具体的数据包转发包括软发到后端那个real server、响应报文如何工作在netfilter的INPUT链上在此处决定是否进行数据包的转发。可以使用ipvsadm工具配置 ipvs 规则。
二、lvs的调度算法(Scheduler)
调度算法是在Directory转发集群数包的时候使用的具体算法目的是为了选择哪个后端Real Server服务器。ipvs代码必须提供的调度方法。
如何查看自己的内核是否支持ipvs功能以及支持的算法
常见的算法有如下
静态方法仅考虑调度算法进行调度
RR: round robin、WRR: weighted 轮询 、加权轮询实现了起点公平。新的连接请求被轮流分配至各RealServer算法的优点是其简洁性它无需记录当前所有连接的状态所以它是一种无状态调度。轮叫调度算法假设所有服务器处理性能均相同不管服务器的当前连接数和响应速度。该算法相对简单不适用于服务器组中处理性能不一的情况而且当请求服务时间变化比较大时轮叫调度算法容易导致服务器间的负载不平衡
SHSource Hash 源地址hash,目的是session保持。意义来源于同一源地址的CIP请求会被定向到同一RS。它根据请求的源IP地址作为散列键Hash Key从静态分配的散列表找出对应的服务器若该服务器是可用的且未超载将请求发送到该服务器否则返回空。它采用的散列函数与目标地址散列调度算法的相同。除了将请求的目标IP地址换成请求的源IP地址外它的算法流程与目标地址散列调度算法的基本相似。在实际应用中源地址散列调度和目标地址散列调度可以结合使用在防火墙集群中它们可以保证整个系统的唯一出入口。
DH: Destination Hash 目标地址Hash。是针对目标IP地址的负载均衡但它是一种静态映射算法通过一个散列Hash函数将一个目标IP地址映射到一台服务器。目标地址散列调度算法先根据请求的目标IP地址作为散列键Hash Key从静态分配的散列表找出对应的服务器若该服务器是可用的且未超载将请求发送到该服务器否则返回空。
动态方法根据调度算法和当前RS的负载情况进行调度,讲究结果公平
LC: Least Connection 最少连接 如何监控一般情况是根据tcp协议的计数等相关信息判断
Overhead = Active * 256 + Inactive 表示负载情况越小说明负载越小,会优先选择
WLC: weigthed
Overhead = (Active * 256 + Inactive)/weight 默认机制
SED: shortest expection dalay 最短期望连接
Overhead = (Actived + 1)/weight目的是为了让权重大的优先匹配。问题权重小的可能一直空的。
NQ: Never Quene 工作机制是先每一个 Real Server 都请求一次。
LBLC: locality-based Least connection
LBLCR: Replicated LBLC,带复制的LBLC
三、lvs的工作模型
工作模型可以这么理解就是 LB 的Real Server接收到报文到底以哪种方式响应给客户端。lvs原生态支持的类型有NAT网络地址转换、DR直接路由、TUN隧道。
NAT模型的工作原理
nat特点
1、RS使用私有地址网关为DIP
2、请求和响应都要经过direstor高负载时可能出现单点故障
3、支持端口映射PNAT意思是director 和 real sever 的服务端口可以不在同一端口。
4、RS可以使用任何操作系统
DR的原理大致如下
DR特点
1、要保证前端路由将目标地址为VIP的报文统统发往Direstory,而不是RS
1) 静态地址绑定在前端路由器上配置一条静态ARP地址解析将vip地址和DIP的MAC地址绑定。
2arptables 在realserver主机上设置arp解析规则只要收到vip地址的arp解析就不进行解析
3)修改RS的内核参数修改内核参数arp_ignore arp_announce实现比解析vip的mac地址
此时还要在 Real Server 添加一条静态路由来实现响应报文的源地址是vip
2、RS可以使用私有地址也可以使用公网地址
3、RS跟Directory必须在同一物理网络中。
4、请求报文经过Directory,但响应报文必须不经过Directory.
5、不支持端口映射
6、RS可以使常见的OS支持arptables
7、RS的网关不会指向DIP
TUN的大致原理
TUN特点IP隧道 将IP首部通过IP首部隧道传送
1、rip,vip,dip全部是公网地址
2、rs的网关不会指向DIP
3、不支持端口映射
4、请求报文经过Directory,但响应报文必须不经过Directory。
5、各个real server 必须支持隧道
补充随着互联网的出现了lvs的第四种模型。
FullNat模型是基于NAT模型的扩展可实现局域网内可以有子网的情况。实现方式同时修改请求报文的源地址和目标地址。
NAT的优点1)可以隐藏内部rip地址安全2)配置简单
四、ipvs配置工具ipvadm
ipvsadm是配置ipvs规则的工具和iptables类似。
常用的用法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
# 1、添加集群
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine]
-A 添加集群 -E 修改集群
-t tcp 协议 -u udpx协议 -f 防火墙标记
service-address:指的是vip的地址
-s 指明调度算法默认是wlc
# 2、删除一个集群服务
ipvsadm -D -t|u|f service-address
# 3、清空所有的规则
ipvsadm -C
|