赞
踩
LVS,全称 Linux Virtual Server,即Linux虚拟服务器。是一个虚拟的服务器集群系统,使用负载均衡技术将多台服务器组成一个虚拟的服务器集群。
LVS是基于IP和基于请求内容分发的负载平衡调度方法,将一组服务器构成一个可以实现高可伸缩、高可用的虚拟服务器。一组服务器通过高速的局域网或者地理分布的广域网相互连接,在它们的前端有一个负载调度器(Load Balancer,简称LB)。
系统扩展方式:
Scale UP:向上扩展(垂直扩展),增强、提高cpu性能
Scale Out:向外扩展(水平扩展),增加设备,调度分配问题,Cluster
Cluster:集群,为解决某个特定问题将多台计算机组合起来形成的单个系统
Linux Cluster类型:
MTBF:Mean Time Between Failure 平均无故障时间
MTTR:Mean Time To Restoration( repair)平均恢复前时间(平均故障时间)
HA集群,5个9:MTBF/(MTBF+MTTR)>= 99.999%
分布式系统:
分布式存储:云盘
分布式计算:hadoop,Spark
lvs:Linux Virtual Server,内核级,效率高。
nginx:支持四层调度,性能不及lvs
haproxy:支持四层调度
工作原理:VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS(类似NAT网关,收到请求报文后,将IP、mac地址、端口号进行替换后,转发给后端web服务器),挑选RS服务器则由调度算法实现。
VS在链路中的工作位置:
数据流入:PREROUTING --> INPUT
数据流出:OUTPUT --> POSTROUTING
数据转发:PREROUTING --> FORWARD --> POSTROUTING DNAT:目标地址转换; PREROUTING
如下图所示,请求数据,正常经过PREROUTING,INPUT到web服务器时;lvs工作在PREROUTING和INPUT之间,由lvs来判断和调度请求最终转发到后端具体的web服务器。
1、lvs-nat:nat模式修改请求报文的目标IP,本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发.
2、lvs-dr:Direct Routing,直接路由,LVS默认模式,应用最广泛。通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变
6. lvs-dr模式要求Director和各RS都配置有VIP,确保前端路由器将目标IP为VIP的请求报文发往Director。这个时候VS和RS都配有VIP会有IP冲突问题,常用的策略是在RS上修改arb内核参数。
在RS上修改内核参数以限制arp通告及应答级别。
arp_announce:限制通告级别,0、1两种模式,对应两种不同级别。0:默认值,表示可使用本地任意接口上配置的任意地址进行响应;1: 仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应;
arp_ignore:限制响应级别,0、1、2三种级别。0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告。2:必须避免将接口信息向非本网络进行通告。
IP是工作在内核空间的,所以一张网卡上,如果多个端口配置不同IP,如果一个请求报文的目的地址IP与网卡端口直接,通过配置内核参数,判断到有一个端口配置了这个目的IP,也可以转发这个报文。
只是数据链路层替换,因此必须在同一个物理网络。不涉及IP层
3、lvs-tun:在原请求IP报文之外新加一个IP首部。不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP)
12. DIP, VIP, RIP都应该是公网地址。
应用与跨区域的大型web服务器。DIP和RIP之间可以是广域网通信,因此为了稳定需要搭专线。
4、lvs-fullnat:修改请求报文的源和目标IP(这种模式kernel默认不支持,阿里内部使用)
小结
LVS调度算法分为静态算法和动态算法两类。所谓静态算法,就是仅考虑算法本身,不考虑rs的性能、负载。动态方法,主要根据每个RS当前的负载状态及调度算法进行调度Overhead=value 较小的RS将被调度
1、静态方法:
2、动态方法:
ipvs和LVS是一个东西,linux内核看到的安装包是ipvs。LVS集成在linux内核。VS调度器要使用ipvs能力,只需安装LVS管理工具:ipvsadm即可,yum install ipvsadm
。
RS配置示例:
#!/bin/bash
vip=192.168.0.100
mask='255.255.255.255'
dev=lo:1
case $1 in
start)
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig $dev $vip netmask $mask broadcast $vip up
route add -host $vip dev $dev
;;
stop)
ifconfig $dev down
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
;;
*)
echo "Usage: $(basename $0) start|stop"
exit 1
;;
esac
VS配置示例:
#!/bin/bash
vip='192.168.0.100'
iface='eth0:1'
mask='255.255.255.255'
port='80'
rs1='192.168.0.101'
rs2='192.168.0.102'
scheduler='wrr'
type='-g'
case $1 in
start)
ifconfig $iface $vip netmask $mask broadcast $vip up
iptables -F
ipvsadm -A -t ${vip}:${port} -s $scheduler
ipvsadm -a -t ${vip}:${port} -r ${rs1} $type -w 1
ipvsadm -a -t ${vip}:${port} -r ${rs2} $type -w 1
;;
stop)
ipvsadm -C
ifconfig $iface down
;;
*)
echo "Usage $(basename $0) start|stop";exit 1
;;
esac
从示例脚本中可以看出,http服务-80端口和https-443端口,如果一个web服务器实现了两个,vs调度器要根据端口配置80和443分别调度。如何实现把http和https当成一类请求调度呢:借助于防火墙标记来分类报文。
MARK target 可用于给特定的报文打标记:--set-mark value
,其中:value 为十六进制数字。
例如:
iptables -t mangle -A PREROUTING -d $vip -p $proto –m multiport --dports $port1,$port2 -j MARK --set-mark NUMBER
这里的NUMBER
就是标签号。然后在Director主机基于标记定义集群服务:
ipvsadm -A -f NUMBER [options]
,NUMBER同iptables规则里的NUMBER。
LVS本身不支持RS的状态检查,即使后端服务器挂掉了,还是会调度到挂掉的服务器上;而且LVS工作在网络传输层,不支持应用层调度。LVS最大的优势是高性能,支持百万级的调度。基于LVS的缺点,日常业务中,Nginx、haproxy应用更为广泛。尤其是Nginx,在国内应该更多。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。