集群设计的原则
- 可扩展性—集群的横向扩展能力
- 可用性—无故障时间 (SLA service level agreement)
- 性能—访问响应时间
- 容量—单位时间内的最大并发吞吐量(C10K 并发问题)
LVS工作原理
LVS(虚拟服务)根据报文的目标IP和目标协议及端口将其调度转发至某RS(真正参与工作的服务器),根据调度算法来挑选RS。LVS是内核级的功能,工作在INPUT链的位置,将发往INPUT的流量进行处理
LVS功能及组织架构
-
功能:负载均衡的应用场景为高访问量的业务,提高应用程序的可用性和可靠性
-
组织架构:(1) 应用于高访问量的业务
(2) 扩展应用程序
(3) 消除单点故障
(4) 同城容灾
(5) 跨地域容灾
LVS集群类型中的术语
- VS:Virtual Server,Director Server(DS), Dispatcher(调度器),Load Balancer
- RS:Real Server(lvs), upstream server(nginx), backend server(haproxy)
- CIP:Client IP
- VIP:Virtual serve IP VS外网的IP
- DIP:Director IP VS内网的IP
- RIP:Real server IP
访问流程:CIP<---------->VIP======DIP<----------->RIP
LVS集群的工作模式
- NAT:请求修改报文的目标IP,多个IP的DNAT
- DR:操纵封装新的MAC地址(常用)
- TUN:在原请求的IP报文之外新加一个IP首部
NAT模式
NAT:本质是多目标的DNAT,通过请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和port实现转发
特点:
- RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
- 请求报文和响应报文都必须经由DIP端口转发,DIP易称为系统瓶颈
- 支持端口映射,可修改请求报文的目标port
- VS 必须是Linux系统,RS可以是任意OS系统
实现过程
在内核的处理过程
地址的转换过程
192.168.0.6 | 源地址 | 目的地址 |
---|---|---|
1 | 192.168.10.6/xxxx-----mac:client | 192.168.10.100/80-----mac:router-eth1 |
2 | 192.168.10.6/xxx----mac:router-eth0 | 192.168.10.100/80—mac:lvs |
3 | 192.168.10.6/xxx----mac:lvs | 192.168.10.100/80—mac:rs |
4 | 10.0.0.7/80—mac:rs | 192.168.10.6/xxx----mac:lvs |
5 | 192.168.10.100/80—mac:lvs | 192.168.10.6/xxx----mac:router–eth0 |
6 | 192.168.10.100/80—mac:router–eth1 | 192.168.10.6/xxx----mac:client |
DR 模式
定义:LVS默认模式,应用最广乏,通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/port,以及目标的IP/PORT 均保持不变
特点
- Director和各RS都配置有VIP
- 确保前端路由器将目标IP为VIP的请求报文发往Director
- RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director
- RS和Director要在同一个物理网络
- 请求报文要经由DIP,但响应报文不经由DIP,而由RS直接发往Client
- 不支持端口映射(端口不能修改)
- 无需开启 ip_forward
- RS可使用大多数OS系统
内核的执行过程:
地址的转换过程:
192.168.10.6 | 原地址 | 目的地址 |
---|---|---|
1 | 192.168.10.6-----Mac:client | 192.168.10.100----mac:router–eth1 |
2 | 192.168.10.6----mac:router–eth0 | 192.168.10.100----mac:lvs |
3 | 192.168.10.6-----Mac:lvs | 192.168.10.100----mac:rs–eth0 |
4 | 10.0.0.7—mac:rs–eth0 | 192.168.10.6—mac:router–eth0 |
5 | 192.168.10.100–mac:router–eth1 | 192.168.10.6—mac:client |
TUN模式
转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外在封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP)
TUN模式的特点:
-
RIP和DIP可以不处于同一物理网络中,RS的网关一般不能指向DIP,且RIP可以和公网通信。也就是说集群节点可以跨互联网实现。DIP, VIP, RIP可以是公网地址
-
RealServer的tun接口上需要配置VIP地址,以便接收director转发过来的数据包,以及作为响应的报文源IP
-
Director转发给RealServer时需要借助隧道,隧道外层的IP头部的源IP是DIP,目标IP是RIP,而RealServer响应给客户端的IP头部是根据隧道内层的IP头分析得到的,源IP是VIP,目标IP是CIP
-
请求报文要经由Director,但响应不经由Director,响应由RealServer自己完成
-
不支持端口映射
-
RS的OS须支持隧道功能
应用场景:
一般来说,TUN模式常会用来负载调度缓存服务器组,这些缓存服务器一般放置在不同的网络环境,可以就近
折返给客户端。在请求对象不在Cache服务器本地命中的情况下,Cache服务器要向源服务器发送请求,将结
果取回,最后将结果返回给用户。
LAN环境一般多采用DR模式,WAN环境虽然可以用TUN模式,但是一般在WAN环境下,请求转发更多的被
haproxy/nginx/DNS等实现。因此,TUN模式实际应用的很少,跨机房的应用一般专线光纤连接或DNS调度
LVS工作模式总结和比较
LVS-DR与LVS-tun:
- 请求报文要经由DIP,但响应报文由RS直接发往client
- LVS-DR:通过封装新的MAC首部实现,通过MAC网络转发
- LVS-tun:通过在原IP报文外封装新的IP头实现转发,支持远距离通信
LVS的调度算法
静态算法:
- RR:轮询,较常用
- WRR: 加权轮询,较常用
- SH:source hashing,实现session Sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
- DH: Destination Hashing; 目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS。(类似于DNS的缓存)
动态算法:
主要根据每RS当前的负载状态及调度算法进行调度Overhead=value 较小的RS将被调度
-
LC:适用于长连接应用
Overhead=activeconns*256+inactiveconns
-
WLC:weighted LC,默认的调度算法,较常用
Overhead=(activeconns*256+inactiveconns)/weight
3.SED :初始连接高权重优先,只检查活动连接,而不考虑非活动连接
Overhead=(activeconns+1)*256/weight
4.NQ :第一轮均匀分配,后续SED
5.LBLC:动态的DH算法,使用场景:根据负载状态实现正向代理,实现web cache等
6.LBLCR:带复制功能的LBLC,解决LBLC负载不均衡的问题 ,从负载重的复制到负载轻的RS、
内核版本 4.15 版本后新增调度算法:FO和OVF
FO(Weighted Fail Over)调度算法,在此FO算法中,遍历虚拟服务所关联的真实服务器链表,找到还未
过载(未设置IP_VS_DEST_F_OVERLOAD标志)的且权重最高的真实服务器,进行调度,属于静态算法
OVF(Overflow-connection)调度算法,基于真实服务器的活动连接数量和权重值实现。将新连接调度
到权重值最高的真实服务器,直到其活动连接数量超过权重值,之后调度到下一个权重值最高的真实服
务器,在此OVF算法中,遍历虚拟服务相关联的真实服务器链表,找到权重值最高的可用真实服务器。,属
于动态算法
一个可用的真实服务器需要同时满足以下条件:
- 未过载(未设置IP_VS_DEST_F_OVERLOAD标志)
- 真实服务器当前的活动连接数量小于其权重值
- 其权重值不为零