LVS工作原理介绍

          LVS是Linux Virtual Server的缩写,简称Linux虚拟服务器,是一个开源的软件,通过LVS达到的负载均衡技术和Linux操作系统实现一个高性能高可用的Linux服务器群集,它具有良好的可靠性,可拓展性和可操作性。从而以低廉的成本实现最优的性能。

下面介绍LVS:

一、关于LVS的IP

二、IPVS实现负载均衡的三种方式

三、LVS的十种调度算法

四、ipvsadm的用法

 

一、关于LVS的IP

CIP: 客户端的ip地址
VIP:在Director上配置,用户通过这个ip地址访问该服务器,一般称作虚拟ip
DIP:Director的ip,用于Director跟real server通信用的ip
RIP:Real Server的ip(后台真正提供服务的服务器所使用的IP地址)
 

二、IPVS实现负载均衡的三种方式

lvs NAT 地址转换:

1、Director和real server必须要在同一个网段中
2、RIP通常是私有地址
3、进站和出站的数据包必须经过Director
4、Real Server 网关必须指向DIP
5、VIP和RIP的端口可以不同,所以说支持端口映射
6、任何类型的操作系统可以成为real Server均可
注意:DNAT的源地址是不会改变的,只会改变目标地址
缺点:所有的用户的请求和服务响应都必须要经过Director,所以说Director会成为瓶劲。

lvs DR 直接路由

1、所有节点必须要在同一个物理网络中
2、RIP可以是私用地址也可以是公网地址,不支持端口映射
3、Director仅处理入站请求,出站不经过Director
4、Real Server一定不能把网关指向Director
注意:这种方式的最大不同就是报文转发不同,DR通过改写请求报文的MAC地址发送到Real Server,Real Server将响应直接返回给客户端

DR模型方式最常用的

下面介绍简单原理过程:

简单理解DR模型原理:客户端请求,经过路由器,路由器根据客户端的请求目标地址vip对应的mac地址,路由器进行arp广播,arp的广播所有的主机都会收到,但是我们必须要把这个广播让Director进行响应,原因就是实现负载均衡,进站的时候Real Server的VIP不给出响应因为它的VIP是配置在lo回环接口,禁止arp广播的,实现的方法最主要有三种:第一、在路由器上直接绑定vip的对应MAC地址。第二、直接在红帽系统中自带的arptables进行设置,但是不是所有的系统都有这个机制。第三、所有我们有一种通用的方法,直接修改内核的两个参数。

两个内核参数:arp_announce 和arp_ignore应用于arp协议站
默认值是0
arp_ignore的值介绍:
0 - (默认值): 回应任何网络接口上对任何本地IP地址的arp查询请求
1 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求
2 -只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内
3 - 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应
4-7 - 保留未使用
8 -不回应所有(本地地址)的arp查询

arp_announce的值介绍:
0 - (默认) 在任意网络接口(eth0,eth1,lo)上的任何本地地址
1 -尽量避免不在该网络接口子网段的本地地址做出arp回应. 当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.
此时会检查来访IP是否为所有接口上的子网段内ip之一.如果改来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理.
2 - 对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址. 如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送.

一般设置成:

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

 

lvs TUN 隧道

1、RIP必须是公网地址
2、Director只处理入站请求,Real Server直接响应给客户端
3、不支持端口映射
4、所有的群集点可以不在同一地方,不同的网段

 

 三、LVS的十种调度算法

静态算法:
 1、轮叫调度(Round Robin)(简称rr)
调度器通过“轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载
 2、加权轮叫(Weighted Round Robin)(简称wrr)
调度器通过“加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器能处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
 3、目标地址散列(Destination Hashing)(简称DH)只应用到缓存服务器
   “目标地址散列”调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
 4、源地址散列(Source Hashing)(简称SH)
   “源地址散列”调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

动态算法:
5、最少链接(Least Connections)(简称LC)
调度器通过“最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用“最小连接”调度算法可以较好地均衡负载。
active*256+inactive
6、加权最少链接(Weighted Least Connections)(简称WLC)
在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
7、最短的期望的延迟(Shortest Expected Delay Scheduling SED)(简称SED)
基于wlc算法。这个必须举例来说了ABC三台机器分别权重123 ,连接数也分别是123。那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个。使用sed算法后会进行这样一个运算
A(1+1)/1
B(1+2)/2
C(1+3)/3
根据运算结果,把连接交给C 。
8、最少队列调度(Never Queue Scheduling NQ)(简称NQ)适用于非活动连接
无需队列。如果有台 realserver的连接数=0就直接分配过去,不需要在进行sed运算
9、带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)(简称LBLCR)适用于缓存服务器
“带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标 IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度

10、基于局部性的最少链接(Locality-Based Least Connections)(简称LBLC)适用于缓存服务器
“基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接” 的原则选出一个可用的服务器,将请求发送到该服务器。

四、ipvsadm的用法

 1.定义集群服务

    ipvsadmin -A|E -t|u|f VIP:port -s 调度算法[默认WLC]

    ipvsadm -D -t|u VIP:port

        -A:定义一个集群的IP

        -E:修改一个集群的IP       

        -D:删除一个集群的IP        

         -t :  tcp的服务

         -u:  udp的服务

        -f:基于防火墙的服务

        -s:指定调度算法 [默认WLC]

    2.定义Realserver

    ipvsadm -a|e -t|u VIP:port -r REALSERVER[:port] [-g|i|m] [-w weight]

    ipvsadm  -d    -t|u VIP:port -r REALSERVER

        -a|e:添加或者修改real server

        -w:指定权重

        -g|i|m:定义三种模型

            g:DR模型

            i:TUN模型

            m:NAT模型   

3、查看定义信息

    -C:用于清空规则

    -S:保存规则到某个文件

    -R: 从某个文件恢复规则

    -L|l:用于实现查看

    -n:查看用数字的方式显示地址

    --stats:显示统计的数据信息

    --rate:显示统计数据的速率

    -Z:清空计数器

4、保存所定义的服务规则:
 -S 保存服务和RS的定义至某文件中 ------相同于:ipvsadm-save > /path/to/file
 -R 将保存至文件中的服务及RS定义应用起来------相同于:ipvsadm-restore < /path/to/file

 更详细的用法:man ipvsadm

 

最后补充知识点:从Linux内核版本2.6起,ip_vs code已经被整合进了内核中,因此,只要在编译内核的时候选择了ipvs的功能,您的Linux即能支持LVS。
Linux 2.4.23以后的内核版本也整合了ip_vs code,但如果是更旧的内核版本,您得自己手动将ip_vs code整合进内核原码中,并重新编译内核方可使用lvs。
 

 

 

你可能感兴趣的:(linux,LVS,ipvsadm,ipvs,linux集群)