深入浅出LVS:企业集群平台负载均衡的三种模式和算法实现
一、LVS集群常见架构图
Load Balancer层:位于整个集群系统的最前端,由一台或多台负载调度器(Director Server)组成。LVS核心模板IPVS就安装在Director Server上,而Director的主要作用类似于一个路由器,它含有为完成LVS功能所设定的路由表,通过这些路由表把用户的请求分发给Server Array层的应用服务器(Real Server)。
同时,在Director Server上还要安装对Real Server的监控模块Ldirectord,此模块用于监测各个Real Server服务的健康状况。在Real Server不可用时可以把它从LVS路由表中剔除,在恢复时重新加入。
Server Array层:由一组实际运行应用服务的机器组成,Real Server可以是Web服务器、Mail服务器、FTP服务器、DNS服务器、视频服务器中的一个或多个,每个Real Server之间通过高速的LAN或分布在各地的WAN相连接。在实际的应用中,Director Server也可以同时兼任Real Server的角色。
hared Storage层:是为所有Real Server提供共享存储空间和内容一致性的存储区域,一般由磁盘阵列设备组成。,为了提供内容的一致性,一般可以通过NFS网络文件系统共享数据,但是NFS在繁忙的业务系统中,性能并不是很好,此时可以采用集群文件系统,例如Red hat的GFS文件系统,Oracle提供的OCFS2文件系统等。
二、负载调度算法
在用户的请求到达负载调度器后,调度器如何将请求发送到提供服务的Real Server节点,而Real Server节点如何返回数据给用户,是IPVS实现的重点技术。IPVS实现负载均衡的方式有三种,分别是NAT(FULL NAT)、TUN和DR,下面进行详细介绍。
三、DR模式
通过在调度器LB上修改数据包的目的MAC地址实现转发。注意源地址仍然是CIP,目的地址仍然是VIP地址。
请求的报文经过调度器,而RS响应处理后的报文无需经过调度器LB,因此并发访问量大时使用效率很高(和NAT模式比)
因为DR模式是通过MAC地址改写机制实现转发,因此所有RS节点和调度器LB只能在一个局域网里面
RS主机需要绑定VIP地址在LO接口上,并且需要配置ARP抑制。
RS节点的默认网关不需要配置成LB,而是直接配置为上级路由的网关,能让RS直接出网就可以。
由于DR模式的调度器仅做MAC地址的改写,所以调度器LB就不能改写目标端口,那么RS服务器就得使用和VIP相同的端口提供服务。
四、NAT/FULL NAT模式
客户端请求数据,目标IP为VIP
请求数据到达LB服务器,LB根据调度算法将目的地址修改为RIP地址及对应端口(此RIP地址是根据调度算法得出的。)并在连接HASH表中记录下这个连接。
数据包从LB服务器到达RS服务器webserver,然后webserver进行响应。Webserver的网关必须是LB,然后将数据返回给LB服务器。
收到RS的返回后的数据,根据连接HASH表修改源地址为VIP、目标地址为CIP,及对应端口80.然后数据就从LB出发到达客户端。
客户端收到的就只能看到VIP\DIP信息。
NAT模式优缺点:
NAT技术将请求的报文和响应的报文都需要通过LB进行地址改写,因此网站访问量比较大的时候LB负载均衡调度器有比较大的瓶颈,一般要求最多之能10-20台节点
只需要在LB上配置一个公网IP地址就可以了。
每台内部的realserver服务器的网关地址必须是调度器LB的内网地址。
NAT模式支持对IP地址和端口进行转换。即用户请求的端口和真实服务器的端口可以不一致。
FULL NATT的基本原理:FULL NAT 在client请求VIP 时,不仅替换了package 的dst ip,还替换了package的 src ip;但VIP 返回给client时也替换了src ip。
首先client 发送请求package给VIP;
VIP 收到package后,会根据LVS设置的LB算法选择一个合适的realserver,然后把package 的DST IP 修改为realserver IP;把sorce ip 改成 lvs 集群的LB IP
realserver 收到这个package后判断dst ip 是自己,就处理这个package ,处理完后把这个包发送给LVS LB IP。
LVS 收到这个package 后把sorce ip改成VIP的IP,dst ip改成 client ip然后发送给client
FULL NAT 模式也不需要 LBIP 和realserver ip 在同一个网段;
full nat 跟nat 相比的优点是:保证RS回包一定能够回到LVS;因为源地址就是LVS--> 不确定
full nat 因为要更新sorce ip 所以性能正常比nat 模式下降 10%
五、IP TUNNEL模式
TUN :即Virtual Server via IP Tunneling 也就是通过IP隧道技术实现虚拟服务器。在VS/TUN方式中,调度器采用IP隧道技术将用户请求转发到某个Real Server,而这个Real Server将直接响应用户的请求,不再经过前端调度器。此外,对Real Server的地域位置没有要求,可以和Director Server位于同一个网段,也可以在独立的一个网络中。因此,在TUN方式中,调度器将只处理用户的报文请求,从而使集群系统的吞吐量大大提高。
它和NAT模式不同的是,它在LB和RS之间的传输不用改写IP地址。而是把客户请求包封装在一个IP tunnel里面,然后发送给RS节点服务器,节点服务器接收到之后解开IP tunnel后,进行响应处理。并且直接把包通过自己的外网地址发送给客户不用经过LB服务器。
客户请求数据包,目标地址VIP发送到LB上。
LB接收到客户请求包,进行IP Tunnel封装。即在原有的包头加上IP Tunnel的包头。然后会根据LVS设置的LB算法选择一个合适的realserver;并把client发送的package 包装到一个新的IP包里面;新的IP包的dst是realserver的IP。
RS节点服务器根据IP Tunnel包头信息收到请求包,realserver 收到这个package后判断dst ip 是自己,然后解析出来的package的dst是VIP;会检测我们的网卡上是否绑定了VIP的ip地址;如果绑定了就会处理这个包,如果没有直接丢掉。 我们一般在realserver上面 lo:0 绑定了VIP的ip地址,就可以处理得到客户的请求包并进行响应处理。
响应处理完毕之后,RS服务器使用自己的公网线路将这个响应数据包发送给客户端。源IP地址是VIP地址。
TUNNEL 模式必须在所有的realserver 机器上面绑定VIP的IP地址
TUNNEL 模式的vip ------>realserver 的包通信通过TUNNEL 模式,不管是内网和外网都能通信,所以不需要lvs vip跟realserver 在同一个网段内
TUNNEL 模式 realserver会把packet 直接发给client 不会给lvs了
TUNNEL 模式走的隧道模式,所以运维起来比较难,所以一般不用。
六、LVS负载调度算法
固定调度算法:rr,wrr,dh,sh
动态调度算法:wlc,lc,lblc,lblcr
基本轮询调度rr
加权最小连接调度wlc
加权轮询调度wrc
经作者同意授权转载
作者:高俊峰
博客:爱维Linux
近期活动:
DAMS第二届中国数据资产管理峰会
峰会官网:www.dams.org.cn