LB解决方案Load Balancing

硬件:F5 big-ip,Cotrox Metscaler,A10,Array,Redware,深信服

软件:LVS Linux Virtual Server(章文嵩,阿里),HAproxy(四层七层),Nginx(七层)

F5能够识别应用的转发,例如基于cookie的转发.所以四层七层都能转发

LVS:ipvs+ipvsadm 工作在TCP/UDP的四层,可以根据ip+端口(套接字)进行转发,以及定义向何处转发.无法识别应用层的转发,通常称之为四层交换,四层路由


技术有点类似iptables的工作机制,ipvs工作在INput链,依赖于规则进行转发,当匹配到相依规则,将input链上的请求,强行转发至内部某一网络.(目标地址可能更改,也可能不改).所以iptables和LVS的过滤机制有冲突.

ipvs用来定义集群服务,定义后端一个或多个服务器.

ipvsadm:LVS的管理工具

LVS能够转发400W个请求,HAproxy上限65535(基于套接字)一般3-5W,F5600-700W个

一般入口设备用LVS调度,内部小规模集群可用HAproxy,LVS

LVS工作机制

Director:调度器,提供LVS服务主机,也称为分发器(Dispatcher),负载均衡器(Load Balancing)

VIP:LVS主机的IP,提供响应用户请求服务的虚拟IP,可以做IP转移,

CIP:发起请求客户端IP

Real Server:后端真正处理用户请求的服务器

DIP:Director IP,LVS主机通往后端Real Server的网卡IP地址

RIP:Real Server的网卡地址

CIP<-->VIP<-->DIP<-->RIP

LVS类型:

1,NAT:(多目标)相当于iptables的DNAT,将用户请求,进行分析,将请求的IP地址修改为后端一个服务器集群,由一定规则进行修改,有可能每一次挑选的服务器都是不同的,从而实现负载均衡功能.iptables的NAT机制是修改为明确的后端服务器,没有负载均衡的功能

2,DR,(Direct Routing)发送响应时,不再经过Director,由RS在响应时伪装为VIP封装响应报文,直接发到路由.分为两种:RIP可使用私有地址也可使用公网地址,当RIP(公网地址)和VIP在一个网段内是走同一个路由,当RIP(私有地址)和VIP不在一个网段内,接受请求和发送响应是走的不同路由,

3,TUN

4,FULLNAT

LVS NAT的特性,

1,RS应该使用私有地址

2,RS的网关必须要只想DIP

3,RIP和DIP必须在同一网段内,不能垮网段

4,进出的报文,请求和响应的报文都的经过Director,在高负载场景中,Director有可能成为性能瓶颈

5,支持端口映射,

6,RS可以使用任意支持集群服务的OS(windows,bsd)

由于响应报文也都有Director来构建,构建响应负载很大,(例如,用户发来一个请求只是一个URL,而Director却要响应一个几M几十M的页面,用户发来一个查询请求,我们需要响应的是成百上千行内容)性能瓶颈只能支持10个服务器

LVS DR类型,

让前端路由将请求发往VIP时只能是Director的vip,

解决方案

(1)静态地址绑定,在前端路由上实现静态MAC地址绑定VIP,缺点,未必有路由器的配置权限,Director故障转移时静态绑定难以适用

(2)arptables,在各RS安装arptables程序,并编写arptables规则,缺点依赖于独特功能的应用

(3)修改Linux内核参数,将RS上的vip配置在lo接口的别名上;限制Linux仅对对应接口的ARP请求做响应.缺点,只能用在Linux服务器中,适应性差

LVS DR的特性

1,RS可以使用私有地址,但也可以使用公网地址,如果使用公网地址,可以直接通过互联网连入RS以实现配置,监控等

2,RS的网关一定不能只想DIP,

3,RS跟Director要在同一物理网络内(不能由路由器分隔,也不能垮VLAN)

4,请求报文经过Director,但响应报文一定不能经过Director,

5,因为是基于MAC,不支持端口映射

6,RS可以使用大多数的操作系统.

LVS tun类型:IP隧道,扩展的DR模型,可以垮互联网工作.类似DR的第二种类型,但是这时候使用的RIP必须是公网地址.

1,RIP,VIP都得是公网地址,DIP一般来讲也要求公网地址,但是DIP不接受响应,所以也可用私有地址

2,RS的网关不会指向也不可能指向DIP

3,请求报文经过Director,但响应报文一定不经过Director

4,不支持端口映射

5,RS的OS必须得支持隧道功能.在报文IP首部能多加IP

LVS FULLNAT类型可以垮网络的NAT模型,向后发送时把报文ip首部改为DIP+RIP,向外发送时将IP首部改为CIP+VIP以实现垮网络通信.必须,修改内核.


LVS的调度方法:调度算法 Scheduling Method

前端的Director是否考虑后端的每一个RS当前正处于活动及非活动状态,或只考虑活动状态,将请求转发至相应的RS

静态方法,仅根据算法本身进行调度,不考虑RS当前是不是承载的有很多的用户请求

rr:轮询,rr和wrr无法解决session,只能用session复制或session服务器

wrr:Weighted RR:加权轮询.根据服务器性能等指标给服务器一个权重(weight),根据其权重比例分配.权重越高,分配到的处理请求越多(能者多劳).

sh:source hashing :能够将同一个ip的用户定向至同一个服务器

dh:destination hashing :对目标地址进行hash,(作用在防火墙的目标追踪功能下)

动态方法,根据算法及RS当前的负载状态

lc:Least Connection:后端服务器哪一个服务器连接少,Overhead=Active(活动连接)*256+Inactive(非活动连接),结果小的overhead值获得分配

wlc:Weighted LC,Overhead=Active*256+Inactive/weight,结果小的overhead值获得分配.存在问题,权重分配不合理,不能合理分配连接

sed:Shortest Expect Delay,最小期望延迟.Overhead=(Active+1)*256/weight,结果小的overhead值获得分配.

nq:Nerver Queue,永不排队,在sed算法基础上考虑权重,让分配更合理.

lblc:Locality-based Least Connection,类似于dh+lc算法,用于后端是缓存服务器时,将同一个请求定位至同一个RS

lblcr:Replicated and Locality-based Least Connection,用于后端是缓存服务器时,将同一个请求定位至同一个RS

LVS缺陷,不会检测后端服务器的健康状态,所以每种算法都不能避免将请求调度到坏的RS上

grep -E -i "ipvs|IP_VS" /boot/config-2.6.32-431.el6.x86_64(查看内核配置文件,支持的LVS支持的协议,集群服务,调度算法)

LVS的集群服务,四层路由,四层交换:根据请求目标的套接字(第四层协议,ip+port,包括端口的端口协议类型tcp|udp)来实现转发.ipvs在INPUT链上匹配规则,匹配到的请求,强行转发到FORWARD,再交到POSTROUTING转发到后端,LVS不能和iptables的Filter和NAT一块来工作,可以和mangle表一起工作.

ipvsadm -A|E -t|u|f service-address [-s scheduler][-p [timeout]] [-M netmask]:

-A :添加一个集群服务 

-t,tcp协议 -u,udp协议 -f,firewall mark,防火墙标记,通常用于将两个或以上的服务绑定为一个服务进行处理时使用(例如,支付切换需要从80转换到443,把80和443标记为一个集群)

service-address: -t ip:port  -u ip:port  -f firewall_mark(用iptables打上的自定义数字一般为1-99)

-s:调度方法,默认为wlc,实际场景中效果最好的

-p timeout:persistent connection,持久连接,

-E :修改集群服务选项和-A一样

RS相关

ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]

-a :向指定的CS集群中添加RS

-t|u|f service-address,指明将RS添加至哪个Cluster Service中

-r:指定RS,可以包含ip:[port],只有支持端口映射的LVS的类型才允许使用跟集群服务中不同的端口

-g|i|m:指定LVS类型默认是DR类型,-g DR   -i ipip LVSTUN   -m masquerade NAT

-w:指定权重,默认为1

-x|y :最少连接数

-e:修改指定的RS属性

ipvsadm -D -t|u|f service-address:删除指定的集群服务

ipvsadm -d -t|u|f service-address -r server-address:删除指定集群服务中的RS

ipvsadm -C:清空所有的规则

ipvsadm -S >> /etc/ipvs.conf, 相当于ipvsadm-save,只不过要用输出重定向指定保存的文件

ipvsadm -R  << /etc/ipvs.conf    相当于ipvsadm-restor,只不过要用输入重定向指定保存的文件

ipvsadm -L [option]:显示ipvs规则,相当于iptables -L

-n :数字格式显示ip地址

-c :显示连接数相关信息

--stats :显示统计数据,每个RS接受过多少连接,请求(响应)报文数,请求(响应)的字节数.Conns连接数,InPKts进入的报文数, OutPkts响应的报文数,InBytes进入的字节数,OutBytes响应的字节数

--rate :平均数据 CPS平均每秒的连接数,  InPPs平均每秒的进入报文数, OutPPs平均每秒的响应报文数, InBPS平均每秒的进入字节数, OutBPS平均每秒的响应字节数,

--timeout :显示tcp会话时长

--daemon :显示ipvs集群服务的状态和多播接口

--sort:进行协议,ip,端口排序

--exact :对输出数据不做单位换算,显示精确值

ipvsadm -Z [-t|u|f service-address]:清空所有规则的计数器,清零-L查看的所有数据

使用ipvs前要清空iptables的规则iptables -F 或者iptables -F -t filter



转载于:https://blog.51cto.com/yesir/1718316