LVS的工作机制

一、LVS的简介

LVS : Linux Virtual Server 也就是Linux 虚拟服务器。

LVS是一台主机,是将数据转发给其他的真正的服务器主机的。LVS的应用只需要装在调度节点上,它的工作原理基本类似于DNAT。其实虚拟服务器可以看做是一个四层交换。通过套接字来完成的转发。
LVS的特点:高吞吐能力、高并发能力,冗余能力,适用性。

二、在LVS中的命名机制:

 


CIP : 客户端的IP 
VIP :(Virtual IP)虚拟地址,外网用户看到的那个地址。 
DIP :(Director’s IP)用于转发请求的转发器上的那个地址,一般是跟RIP相连的。
RIP :(Real IP)后端真正提供节点的那些些IP地址

三、LVS有三种工作类型:

1、Network address translation (LVS-NAT)网络地址转换



工件特征:
   1、所有的集群结点要在同一个网络中
   2、RIP是私有的,仅用于集群结点间的通信
   3、Director 要处理入站和出站
   4、V_sever 的网关要指向DIP
   5、可以实现端口映射
   6、R-serverk 可以是任意操作系统
   7、direct 很易成为系统瓶颈

2、Direct routing (LVS-DR)直接路由 简称为 DR


用户的请求经过Director,服务器的响应由服务器直接返回给用户
工作特点:
   1、集群结点Real-server和Director的ip在同一个物理网络,因为转发是基于MAC地址的
   2、RIP可以使用公网地址
 这样有个好处就是当Director不能工作时,用户可以通过IP地址访问服务器
   3、director 仅处理入站请求 
   4、R-server 的网关一定不要指向director,出站请求不经过director
   5、不支持端口映射
   6、大多数操作系统都可以用于 R_SERVER 能配置多个IP地址并要支持隔离ARP广播
   7、DR当中 directot的性能比远远优于DNAT
3、IP tunneling (LVS-TUN) ip遂道


与DR模型相似,不同的是,Director与Realserver的ip可以不在同一个网络中
   1、R-server与director
   2、rip一定不是私有地址
   3、director 仅处理入站请求,不支持端口映射
   4、仅有具有隧道功能的操作系统才能用于R-server

四、LVS 调度方法 Scheduling Methods

可分为两大类:静态调度、动态调度

静态调度有四种:

 1、Round-Round 轮询 简写为RR
 2、Weight Round-Round 加权轮询 简写为 WRR
 3、Destination hashing 简写为 DH 目标地址hash 用于缓存服务器
  4、Source hashing SH 源地址hash 也是用于缓存服务器

动态调度有六种:

 1、Least-connection(LC) 最少连接
检测服务器上的最少活动的连接数,同时也要检测活动和非活动连接数用下面的的方法计算,谁的overhead小,谁就接受下次的连接请求。这种方式不能区分服务器的响应能力。
计算方法:RS:active*256+inactive=overhead
把请求发给overhead值小的那个

 2、 Weight Least-connetion(WLC) 加权最少连接 
基于LC在每个服务器上加上权重。计算方法:
RS:(active*256+inactive)/weight=overhead
在这些算法中WLC算法可以说是最公平的算法了。

 3、SED Shortest Expected Delay对于WLC的改进

最短期望延迟,这种算法是对WLC的一种改进,不考虑非活动连接数,并且将正处于活动状态的值加1。加1的主要目的,是尽可能的把权重大的服务器尽可能的利用起来。这种机制如果在权重比值比较大情况下会使权重下的服务器的处在空闲状态。
计算方法:RS: (active+1)*256/weight=overhead

4、Nerver Queue (NQ)永不排队。基于SED基础的算法,将权重低的空闲服务器分配进一个请求。

5、LBLC:DH Locality-Based Least-Connection 基于本地的最少连接。LBLC是从WLC的基础上做出来的,支持权重。它跟DH算法几乎相同,不过DH是静态的,而LBLC是动态的。这种改进并不明显

6、LBLCR 带复制的基于本地的最少连接。是对LBLC的一种改进,能在LBLC的基础上对负载均衡机制实现真正的负载均衡。

五、 实现 LVS的方法:ipvs

LVS的机制与Iptables有些类似,有一段是专门定义在用户空间,命令叫ipvsadm,而工作在内核空间中的代码叫ipvs,2.4内核之后,ipvsadm已经被做进内核中,只需要将相应的功能开启即可。而我们就是通过用户空间中的ipvsadm定义一些规则来实现对内核中ipvs的控制的。

ipvsadm 命令选项以及运用

ipvsadm

-A 定义一个新的集群服务
-E 修改或者编辑已存在的集群服务
-D 删除一个集群服务

-a 添加
-e 编辑

-C 清空

-R == -restore
-S == -safe
-L|l 列出所有的相关ipvsadm规则
-Z :清空计数器
--stats 输出统计信息,与-L一起用
--rate 也与-L一起用
-n 以数字形式输出

定义一个集群服务的完整语法:

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

-t : tcp的服务器
-u:udp的服务
-f:基于防火墙的服务
-s:指定调度算法

定义Realserver

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

 NAT模型构建LVS

说明:在这里运用三台虚拟机,一台用作Director,别外两台用于web服务器,分别是web1和web2。

配置前的ip规化:

对于Director:

安装两个网卡:eth0、eth1。eth0用于桥接,eth1工作在仅主机。ip分别为:

eth0 :172.16.35.2/24

eth1 :192.168.35.10/24

对于web服务器,分别有一个网卡,并都工作于仅主机模式。ip地址为:
web1:192.168.35.100/24
web2:192.168.35.101/24

在这里还要开启Director服务器上的ip地址的转发功能
# echo 1 > /proc/sys/net/ipv4/ip_forward

下面来配置ipvsadm

在配置之前要安装ipsadm。所以要配置好yum源。

要在Director服务器上安装ipvsadm.

用命令:

# yum install ipvsadm

来直接安装。

安装完成后就在Director 配置ipvsadm规则。

ipvsadm -A -t 172.16.35.2:80 -s rr(也可以是其他的调度方法)
ipvsadm -a -t 172.16.35.2:80 -r 192.168.35.100 -m
ipvsadm -a -t 172.16.35.2:80 -r 192.168.35.101 -m

好了。这样一个基于LVS的NAT模型就配置完成了。
可以用命令:
ipvsadm -E -t 172.16.35.2:80 -s s后面要加上所要用的调度方法来验证。如果要加上权重可以在
ipvsadm -Z 要先清空一下
ipvsadm -a -t 172.16.35.2:80 -r 192.168.35.100 -m -w 8(相对于web2的倍数)

下面在浏览器中输入:http://172.16.35.2 就可以测试了,是否能正常的在web1和web2上运用不同的调度方式。