LVS的使用
LVS的使用
制作人:全心全意
常见的硬件负载均衡
F5,BIG IP
A10
常见的软件负载均衡
四层:
LVS
七层:(反向代理)
nginx
haproxy
LVS和iptables不能同时使用
LVS工作在INPUT链中
LVS分为两部分
ipvsadm:管理集群的命令行工具
ipvs:工作在内核
LVS三种类型
NAT:地址转换
多目标的DNAT(iptables):它通过修改请求报文的目标IP地址(同时可能会修改目标端口)至挑选出某RS的RIP地址实现转发
1、RS应该和DIP应该使用私网地址,且RS的网关要指向DIP
2、请求和响应报文都要经由director转发,极高负载的场景中,director可能会成为系统瓶颈
3、支持端口映射
4、RS可以使用任意OS
5、RS的RIP和director的DIP必须在同一IP网络
DR:直接路由
通过修改请求报文的目标MAC地址进行转发
1、保证前端路由器将目标IP为VIP的请求报文发送给director
方法:
静态绑定
arptables
修改RS主机内核的参数
2、RS的RIP可以使用私有地址,也可以使用公网地址
3、RS跟director必须在同一物理网络中
4、请求报文经由director调度,但响应报文一定不能经由director
5、不支持端口映射
6、RS可以是大多数的OS
7、RS的网关不能指定DIP
TUN:隧道
不修改请求报文的IP首部,而是通过在原有ip首部(CIP-->VIP)之外,再封装一个ip首部(DIP-->RIP)
1、RIP、DIP、VIP全都是公网地址
2、RS的网关不能指向DIP
3、请求报文必须经由director调度,但响应报文必须不能经由director
4、不支持端口映射
5、RS的OS必须支持隧道功能
NAT模式
(a). 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
(b). PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
(c). IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP
(d). POSTROUTING链通过选路,将数据包发送给Real Server
(e). Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP
(f). Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP
DR模式
(a) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
(b) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
(c) IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址
(d) 由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server。
(e) RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP
(f) 响应报文最终送达至客户端
TUN模式
(a) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP 。
(b) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
(c) IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为为DIP,目标IP为RIP。然后发至POSTROUTING链。 此时源IP为DIP,目标IP为RIP
(d) POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输)。 此时源IP为DIP,目标IP为RIP
(e) RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。 此时的源IP地址为VIP,目标IP为CIP
(f) 响应报文最终送达至客户端
LVS的调度方法
固定调度:
rr:轮询
wrr:加权轮询
sh:源地址hash(session绑定(若能实现session共享,可不使用sh))
dh:目标地址hash(把同一个IP地址的请求,发送给同一个server)
动态调度:
lc:最少连接
活动连接数*256+非活动连接数
wlc:加权最少连接
(活动连接数*256+非活动连接数)/权重
sed:最短期望延迟(基于wlc算法)
(活动连接数+1)*256/权重
nq:永不排队
如果有台服务器的连接数=0就直接分配过去(若多台为0,根据权重分配),不需要在进行sed运算。
LBLC:基于本地的最少连接
LBLCR:带复制的基于本地的最少链接
默认调度方法wlc
NAT:地址转换(类似于DNAT)
1、集群点跟director必须工作在同一个IP的网络中
2、RIP通常是私有地址,仅用于各集群节点间的的通信
3、director位于client和real server之间,并负责处理进出的所有通道。
4、realserver必须将网关执行DIP
5、director支持端口映射
6、realserver可以使用任何类型的操作系统(os)
7、较大规模应用场景中,director易成为系统瓶颈
DR:直接路由(及用于作为源地址)
1、各集群节点跟director必须在同一个物理网络中;
2、RIP可以使用公网地址,实现便携的远程管理和监控;
3、director仅负责处理入站请求,形影报文则有realserver直接发往客户端
4、realserver不能将网关指向DIP,而是直接指向前端网关;
5、director不支持端口映射
6、大多数操作系统能够用在realserver
7、director能够处理更多的realserver
TUN:隧道
1、集群节点可以跨越Internet
2、RIP必须是公网地址
3、director仅负责处理入站请求,形影报文则有realserver直接发往客户端
4、realserver网关不能指向director
5、只有咫尺隧道功能的OS才能用于realserver
6、不支持端口映射
ipvsadm的作用
管理集群服务
添加|修改:-A|-E -t|u|f service-address [-s scheduler]
-t:TCP协议
service-address:IP:PORT
-u:UDP协议
service-address:IP:PORT
-f:防火墙标记
service-address:Mark Number
删除:-D -t|u|f service-address
管理集群服务中的RS
添加|修改:-a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]
-r:某RS的地址
-g:DR(默认)
-i:TUN
-m:NAT
-w:权重
删除:-d -t|u|f service-address -r server-address
查看
-L|l [options]
-n:数字格式显示主机地址和端口
--stats:统计数据
--rete:显示1秒的速率
-c:显示当前的ipvs连接状况
-C:清空ipvs规则
-S:保存规则
-S > 保存位置
-R:载入规则
-R < 保存的规则路径