lvs的nat模型实现负载均衡

lvsnat模式实现负载均衡的方法

一、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有三种工作类型:
1Network address translation (LVS-NAT)网络地址转换


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

   7direct 很易成为系统瓶颈

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



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



DR模型相似,不同的是,DirectorRealserverip可以不在同一个网络中
   1R-serverdirector
   2rip一定不是私有地址

   3director 仅处理入站请求,不支持端口映射

   4、仅有具有隧道功能的操作系统才能用于R-server

四、LVS 调度方法 Scheduling Methods

可分为两大类:静态调度、动态调度
静态调度有四种:
 1Round-Round 轮询 简写为RR
 2Weight Round-Round 加权轮询 简写为 WRR
 3Destination hashing 简写为 DH 目标地址hash 用于缓存服务器
  4Source hashing SH 源地址hash 也是用于缓存服务器
动态调度有六种:
 1Least-connection(LC) 最少连接
检测服务器上的最少活动的连接数,同时也要检测活动和非活动连接数用下面的的方法计算,谁的overhead小,谁就接受下次的连接请求。这种方式不能区分服务器的响应能力。
计算方法:RS:active*256+inactive=overhead
把请求发给overhead值小的那个
 2、 Weight Least-connetion(WLC) 加权最少连接 
基于LC在每个服务器上加上权重。计算方法:
RS:(active*256+inactive)/weight=overhead
在这些算法中WLC算法可以说是最公平的算法了。
 3SED Shortest Expected Delay对于WLC的改进
最短期望延迟,这种算法是对WLC的一种改进,不考虑非活动连接数,并且将正处于活动状态的值加1。加1的主要目的,是尽可能的把权重大的服务器尽可能的利用起来。这种机制如果在权重比值比较大情况下会使权重下的服务器的处在空闲状态。
计算方法:RS: (active+1)*256/weight=overhead
4Nerver Queue (NQ)永不排队。基于SED基础的算法,将权重低的空闲服务器分配进一个请求。
5LBLC:DH Locality-Based Least-Connection 基于本地的最少连接。LBLC是从WLC的基础上做出来的,支持权重。它跟DH算法几乎相同,不过DH是静态的,而LBLC是动态的。这种改进并不明显
6LBLCR 带复制的基于本地的最少连接。是对LBLC的一种改进,能在LBLC的基础上对负载均衡机制实现真正的负载均衡。

五、 实现 LVS的方法:ipvs

LVS的机制与Iptables有些类似,有一段是专门定义在用户空间,命令叫ipvsadm,而工作在内核空间中的代码叫ipvs2.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的服务器
-uudp的服务
-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

六、一个实现lvs nat的案例

1、在director分发装置上要做的(基本的网卡配置略)

[root@localhost ~]# uname -r (查看内核)

2.6.18-164.el5

[root@localhost ~]# grep -i ip_vs /boot/config-2.6.18-164.el5 (过滤内核文件中是否支持ipvsadm

[root@localhost ~]# vim /etc/sysctl.conf 

net.ipv4.ip_forward = 1 (在director上要)

[root@localhost ~]# sysctl -p(立即生效)

[root@localhost ~]# ipvsadm -A -t 192.168.145.100:80 -s rr(添加规则调度算法)

[root@localhost ~]# ipvsadm -a -t 192.168.145.100:80 -r 192.168.2.100 -m (指定要分发的real服务器)

[root@localhost ~]# ipvsadm -a -t 192.168.145.100:80 -r 192.168.2.200 -m

[root@localhost ~]# ipvsadm -ln (查看匹配的规则)

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.145.100:80 rr

  -> 192.168.2.200:80             Masq    1      0          0         

  -> 192.168.2.100:80             Masq    1      0          0      

2.其他两台real服务器做基本的配置就行了(需要配置网卡,安装apache,实现web的发布)

最重要的一点是:两台real服务器必须指定网关,指向连接服务器的那个director上的网卡,使返回时有路由。

这样就行了。

3、实现加强的轮询调度

[root@localhost Server]# ipvsadm -E -t 192.168.145.100:80 -s wrr (-E编辑原来的)

[root@localhost Server]# ipvsadm -e -t 192.168.145.100:80 -r 192.168.2.100 -m -w 4

[root@localhost Server]# ipvsadm -e -t 192.168.145.100:80 -r 192.168.2.200 -m -w 2

[root@localhost Server]# ipvsadm -ln

可以看到2.100的连接是2.200的二倍,实现了加强的轮询。

 

 

 

做后的疑问:realserver服务器,在做lvs-nat模式时(rr)本来是可以用不同的操作系统实现,但在做的过程中如何用一台windows 2003 server ,另一台用linux,实现的效果是当开始访问的是linuxweb服务,刷新后变成windows 的网页,但以后再刷新一直是windows的网页,如果等一段时间在刷新变成了linux的网页,在刷新变成了windows,在刷还是变不过来,不知道是为什么,用两台linux正常。在查看ipvsadm规则表时,本来对于http访问时无连接访问,但windows显得是处在连接中,不是inactive

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章