LVS负载均衡服务
------------恢复内容开始------------
LVS负载均衡服务
LVS(Linux Virtual Server)即Linux虚拟服务器,是一个虚拟的服务器集群系统。
负载均衡
LB(Load Balance),使负载均衡。我有10台服务器都提供web服务,那么我如何均衡的利用这10台服务器呢?让着10台机器保证高性能、高可用、高并发就是负载均衡要考虑和要做的事情。
实现负载均衡一般可以使用顺序、比重、流量、服务类别等进行分配,负载均衡的部署方式也分为路由和服务直接返回模式,实现负载均衡的几个主要方式:
http重定向
下载网站用的较多,其实也算是一种负载均衡,工作在应用的业务代码中
DNS负载均衡
DNS负载均衡提供域名到IP解析的过程,我们可以实例查看百度的域名解析其实是一对多的,这时候DNS服务器也就充当了负载均衡,很多域名运营商提供的智能DNS以及多线解析都是利用了DNS负载均衡的技术,开源的BIND就可以提供电信联通多线解析等强大的技术
反向代理负载均衡
IP负载均衡
直接路由
IP隧道
F5硬件负载均衡
四层负载和七层负载
所谓四层就是基于IP+端口的负载均衡,主要代表有LVS
七层负载也成为内容交换,就是基于URL等应用层信息的负载均衡,主要代表有nginx
LVS工作原理
LVS的ip负载均衡技术是通过IPVS模块来实现的,IPVS是LVS集群系统的核心软件,他的主要作用是:安装在Director Server上,同时在Director Server上虚拟出一个IP地址,用户必须通过这个虚拟的IP地址访问服务器。这个虚拟IP一般称为LVS的VIP,即Virtual IP。访问的请求首先经过VIP到达负载均衡调度器,然后由负载均衡调度器从Real Server列表中选取一个服务节点响应用户的请求。在用户的请求到达负载调度器后,调度器如何将请求发送到提供服务的Real Server节点,而Real Server节点如何返回数据给用户,是IPVS实现的重点技术。
ipvs:工作于内核空间,主要用于使用户定义的策略生效
ipvsadm:工作于用户空间,主要用于用户定义和管理集群服务的工具
上图所示,ipvs工作于内核空间的INPUT链上,当收到用户请求某集群服务时,经过PREROUTING链,经检查本机路由表,送往INPUT链;在进入netfilter的INPUT链时,ipvs强行将请求报文通过ipvsadm定义的集群服务策略的路径改为FORWARD链,将报文转发至后端真是提供服务的主机
LVS工作模式
VS/DR/模式
1.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址是VIP
2.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的源MAC地址改为自己的DIP的MAC地址,目标MAC地址改为了RIP的MAC地址,并将此包发送给RS
3.RS发现请求报文中的目的MAC是自己,就会将此报文接收下来,处理请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给客户端
注意:需要设置lo接口的VIP不能响应本地网络内的arp请求
总结:
1.通过在调度器LB上修改数据包的目的MAC地址实现转发。注意源地址仍然是CIP,目的地址仍然是VIP地址
2.请求的报文经过调度器,而RS响应处理后的报文无需经过调度器LB,因此并发访问量大时使用效率很高(和NAT模式相比)
3.因为DR模式是通过MAC地址改写机制实现转发,因此所有RS节点和调度器LB只能在一个局域网里面
4.RS主机需要绑定VIP地址在LO接口(掩码32位)上,并且需要配置ARP抑制
5.RS节点的默认网关不需要配置成LB,而是直接配置为上级路由的网关,能让RS直接出网就可以
6.由于DR模式的调度器仅作MAC地址的改写,所以调度器LB就不能改写目标端口,那么RS服务器就得使用和VIP相同的端口提供服务
7.直接对外的业务比如WEB等,RS的IP最好是使用公网IP。对外的服务,比如数据库等最好使用内网IP
优点:
和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。和VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统作为物理服务器
DR模式的效率很高,但是配置稍微复杂一点,因此对于访问量不是特别大的公司可以用haproxy/nginx取代。日1000-2000W PV或者并发请求1万以下都可以考虑用haproxy/nginx
缺点:
所有RS节点和调度器LB只能在一个局域网里
VS-TUN模式
1.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址是VIP
2.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS
3.RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理此次请求报文,并将响应报文通过lo送给eth0网卡直接发送给客户端
注意:
需要设置lo接口的VIP不能在公网上出现
总结:
1.TUN模式必须在所有real server机器上面绑定VIP的IP地址
2.TUN模式的VIP------->real server的包通信通过TUN模式,不管是内网或外网都能通信,所以不需要LVS VIP和real server在同一网段内
3.TUN模式real server会把packet直接发给client不会转给LVS
4.TUN模式走的隧道模式,所以运维起来比较难,所以一般不用
优点:
负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发送给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理巨大的请求量,这种方式,一台负载均衡器能够为很多RS进行分发,而且泡在公网上就能进行不同地域的分发
缺点:
隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持IP Tunneling协议,服务器可能只局限在部分Linux系统上
VS/NAT模式
1.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP(客户端IP),后面统称为CIP,目标地址为VIP(负载均衡器前端地址,后面统称为VIP)
2.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的目标地址改为了后端服务器的RIP地址并将报文根据算法发送出去
3.报文送到Real Server后,由于报文的目标地址是自己,所以会响应该请求,并将响应报文返还给LVS
4.然后LVS将此报文的源地址修改为本机并发送给客户端
注意:
在NAT模式中,Real Server的网关必须指向LVS,否则报文无法发送到客户端
特点:
1.NAT技术将请求的报文和响应的报文都需要通过LB进行地址改写,因此网站访问量比较大的时候,LB负载均衡器有比较大的瓶颈,一般要求最多只能10-20台节点
2.只需要在LB上配置一个公网IP地址即可
3.每台内部的Real Server服务器的网关地址必须是调度器LB的内网地址
4.NAT模式支持对IP地址和端口进行转换。即用户请求的端口和真实服务器的端口可以不一致
优点:
集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址
缺点:扩展性有限,当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器,速度会受到影响
FULL/NAT模式
无论是DR模式还是NAT模式,不可避免的都有一个问题:LVS和RS必须在同一个VLAN下,否则LVS无法作为RS的网关
这引发的两个问题是:
1.同一个VLAN的限制导致运维不方便,跨VLAN的RS无法接入
2.LVS的水平扩展受到制约,当RS水平扩容时,总有一天其上的单点LVS会成为瓶颈
FULL-NAT由此而生,解决的是LVS和RS跨VLAN的问题,而跨VLAN问题解决后,LVS和RS不再存在VLAN上的从属关系,可以做到多个LVS对应多个RS,解决水平扩容的问题
FULL-NAT相比NAT的主要改进是,在SNAT/DNAT的基础上,加上另一种转换,转换过程如下:
在包从LVS转到RS的过程中,源地址从客户端IP被替换成了LVS的内网IP
内网IP之间可以通过多个交换机跨VLAN通信
当RS处理完接收到的包,返回时,会将这个包返回给LVS的内网IP,这一步也不受限于VLAN
LVS收到包后,在NAT模式修改源地址的基础上,再把RS发来的包中目标地址从LVS内网IP改为客户端的IP
FULL-NAT主要的思想是把网关和其下机器的通信,改为了普通的网络通信,从而解决了跨VLAN的问题。采用这种方式,LVS和RS的部署在VLAN上将不再有任何限制,大大提高了运维部署的便利性
总结
1.FULL NAT模式也不需要LBIP和Real Server IP在同一个网段,FULL NAT跟NAT相比的优点是:保证RS回包一定能够回到LVS,因为源地址就是LVS---->不确定
2.FULL NAT因为要更新source IP所以性能正常比NAT模式下降10%
三种工作模式比较
LVS调度算法
在内核中的连接调度算法上,IPVS已经实现了以下八种调度算法:
轮询调度(Round-Robin Scheduing)
加权轮询调度(Weighted Round-Robin Scheduing)
最小连接调度(Least-Connection Scheduing)
加权最小连接调度(Weighted Least-Connection Scheduing)
基于局部性的最少连接(Locality-Based Least-Connection Scheduing)
带复制的基于局部性最少连接(Locality-Based Least-Connection with Replication Scheduing)
目标地址散列调度(Destination Hashing Scheduling)
源地址散列调度(Source Hashing Scheduling)
固定调度算法:rr、wrr、dh、sh
动态调度算法:wlc、lc、lblc、lblcr