一、前言:
当一组服务器在高速的局域网或广域网中相互连接,其前端部署了一个负责负载调度的调度器(director)的服务系统,调度器能将网络请求无缝衔接调度到真实的服务器上(real server)上,客户访问集群系统提供的网络服务就像访问一台高性能,高可用的服务器一样,集群系统支持透明的增加或删除服务器节点,以此来灵活应对客户机的不同的访问量需求,从而灵活调度,来实现收益最大化的效果,而客户对此是毫无感知的,而且,集群系统能够透过检测节点或服务进程的故障来正确进行节点的切换,从而达到系统的高可用性。通过此类技术实现的负载均衡。因为是在Linux内核上实现的,因此被称为Linux vitural server(lvs)。
Lvs集群的类型包括:nat、dr、tun和fullnat四种类型,这四种类型的Lvs集群分别有着不同的特点及应用场景,下面我们就来一起看看它们的区别。
因为四种类型在现实生活中的需求以及功能要求不同,所以主要研究最常用的dr类型。
lvs常用术语:
VS:Virtual Server,调度器,负责调度
RS: Real Server,负责真正提供服务,后端服务器
VIP: LVS服务器上的公网IP,即Virtual IP
DIP: LVS服务器上的内网IP,即Director IP
RIP: Real Server上的内网IP
CIP:客户端的IP
二:详解dr:
lvs-dr集群是lvs的默认模式,又称为Direct Routing,直接路由模式,通过请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在接口的MAC,目标MAC是某挑选出的RS所在的接口的MAC地址,源IP/PORT,以及目标IP/PORT均保持不变。
在DR 模式下需要在 Director 和 RS 集群绑定同一个 VIP(RS 通过将 VIP 绑定在 loopback 实现)。由于在VIP在同一个网络中的多台服务器上都需要配置,因此必须对RS的ARP响应报文规则进行修改,其方式有三种:
(a) 在前端网关做静态绑定;
(b) 在RS上使用arptables工具;
# arptables -A IN -d $VIP -j DROP
# arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
(c) 在RS上修改内核参数以限制arp通告及应答级别;
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
配置dr模式注意以下几点:
1、确保前端路由器将目标Ip为VIP的请求报文发往director,而不是RS;
2、RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director;
3、RS跟Director要在同一个物理网络(关键点,这样才能实现请求通过director,响应时不经过director);
4、请求报文要经由Director,但响应不能经由Director,而是由RS直接发往Client;
5、dr模式不支持端口映射;
lvs-dr模式的优点在于:Director只是分发请求,应答包通过单独的路由方法返回给客户端。与Lvs-tun相比,Lvs-dr这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务