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服务器 后端服务器
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