一个公网地址部署LVS/DR模式

网上看了不少关于LVS的文章,在选取2种模式LVS/DR和LVS/NAT,看到不少人的观点都认为DR模型中必需要使用多个公网地址,既DIP,VIP,RIP必须在同一网段内html

 

刚开始个人想法也是如此,所知道的惟一的解决方案就是在LVS集群以前再加一台路由器,用路由器作静态NAT转换,后端的LVS集群则使用DR模式。不过这样一来就比较耗成本,要有一台路由器专门负责NAT的转换工做,并且压力都转交给了前端的路由器,并且在性能,速度上相对于单纯的DR模式并无提高。前端

 

DR模式的性能是绝对要比NAT要强不少的,通常NAT模式下,realserver不能超过10台,而DR模式中,上百台realserver也是木有问题的node

 

这两天也就一直纠结于能不能使用单纯的DR模式,并使用一个公网地址来实现(既VIP为公网地址,RIP和DIP使用私网内部的地址)。参考了一些文档linux

 

其实章文嵩博士已经在官网上明确表示过配置DR模式,彻底可让VIP和DIP,RIP在不一样网段的。参考http://zh.linuxvirtualserver.org/node/155web

 

而在此站点中也有关于DR模式使用不一样网段的介绍 详见http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.LVS-DR.html算法

 

在此,我在章文嵩博士的确定回答下参考了上面的介绍,总结了一下在真实场景中常见网络架构中的场景后端

下面的图有错误,VIP都是同一个地址200.0.0.10,在此纠正一下浏览器

WUT]XEG[(9}55EEWR6BI9UN

 

这种拓扑是比较常见类型,先分析下LVS的工做时数据包的是如何流转的网络

 

1.客户发送源IP为1.1.1.1,目标IP为200.0.0.10的服务请求架构

2.数据包通过中间的层层路由,翻山越岭到Director

3.Director查询ipvsadm中定义的表项,根据算法选取一个realserver

在这里,因为是DR模型,因此Director只改变了数据2层部分的目标mac地址,转发给私网IP的realserver

4.Realserver收到数据包后,通过处理,封包转发给客户端

关键的一步来了,realserver怎么将数据包回复给客户端?

首先,在realserver上定义一条特殊路由,目标为VIP的数据包都从loopback口发出去,因而源地址仍是为VIP,数据包的源和目的地址都没有变化。可是因为限制了arp的广播和应答方式,外界并不知道realserver上有VIP的存在,realserver也不知道VIP这个网段中的其它主机,因此数据包就卡在realserver这里了。解决方法就是,在realserver上添加一条默认路由,不知道的包都发往上私网地址的网关,因而路由器接收到数据包后就直接路由转发给客户了,在这个拓扑图中,路由器连接交换机的接口要有2个地址,一个是私网的网关地址,一个是公网的网关地址

实现了单个公网IP地址的LVS/DR模式

 

 

说了一大堆可能看的也晕乎,再来一幅常见的拓扑图

(WL281RU~{NX2S6~6$@_GZK

在这幅图中,director直接从ISP拉一条专线(至于ISP和Director之间防火墙之类的东西暂作屏蔽)

数据包是这样流转的

客户-->互联网-- > Director-- > Realserver-- > Gateway-- > 客户

 

拓扑是变幻无穷的,具体按照实际场景来实施

 

接下来是具体的实现方法,如下实验由虚拟机完成,先给个拓扑

这里192网段模拟公网,10网段模拟私网

41CCZ(DH5C02TYB]@NIELA5

 

先介绍下实验环境:客户机是个人主机,Director和2台realserver都是虚拟机,他们之间用虚拟交换机VMnet8相连,其中客户既充当客户又充当网关,因此在VMnet8网卡上也配置了2个地址(为了不混淆,实验最后会经过抓包来验证)

 

 

director

首先配置地址

[root@localhost ~]# ifconfig eth0 10.0.0.10 netmask 255.255.255.0

[root@localhost ~]# ifconfig eth0:1 192.168.92.100 netmask 255.255.255.0 up

而后配置集群服务

[root@localhost ~]# ipvsadm -A -t 192.168.92.100:80 -s rr #建立一个http的集群服务,使用轮询的算法

[root@localhost ~]# ipvsadm -a -t 192.168.92.100:80 -r 10.0.0.1 –g #添加一个realserver,并使用DR模式。能够看到:提供服务的VIP和realserver的RIP并不在一个网段中

[root@localhost ~]# ipvsadm -a -t 192.168.92.100:80 -r 10.0.0.2 –g #一样方法再添加一个realserver

至此director配置完成

查看下IP地址的配置

BD)$`X4UD[2(19M$GGX55S2

查看下ipvsadm的配置

Y7WOI7W6{{O@P{G5[YZ4A)H

看到这里是route模式,并在不一样网段中

 

realserver

首先上来先限制arp的广播和应答

[root@ww1 ~]# echo 2  >  /proc/sys/net/ipv4/conf/all/arp_announce

[root@ww1 ~]# echo 2  >  /proc/sys/net/ipv4/conf/lo/arp_announce

[root@ww1 ~]# echo 1  >  /proc/sys/net/ipv4/conf/all/arp_ignore

[root@ww1 ~]# echo 1  >  /proc/sys/net/ipv4/conf/lo/arp_ignore

而后配置地址

[root@ww1 ~]# ifconfig eth0 10.0.0.1 netmask 255.255.255.0

[root@ww1 ~]# ifconfig lo:1 192.168.92.100 netmask 255.255.255.255 broadcast 192.168.92.100 #配置VIP必须不让realserver对外广播

接着配置路由

[root@ww1 ~]# route add -host 192.168.92.100 dev lo:1 #请求是VIP的包,以lo:1接口出去,因而源地址仍是为VIP,不会致使由于从eth0出去将源地址变为RIP

[root@ww1 ~]# route add default gw 10.0.0.3  #添加默认路由,指向私网的网关,在此实验中是个人客户机

而后启动web服务

[root@ww1 ~]# echo "web1"  >  /var/www/html/index.html #建立网页文件,web1作标示。在realserver2中以web2作标示

[root@ww1 ~]# service httpd start #启动http服务

至此realserver1配置完成,realserver2也一样按照此配置,地址改下,网页文件不一样就行

 

查看下IP地址的配置

E8U($S_5PNHFPKP1OK7EPGG

这里再提供下第二台realserver的网卡信息,后面验证数据传送查看mac地址时要用到

ZY5FSB`ET~H52${TA8F}P]U

查看下路由表

](MRBZY3WQR0M)JN{WEXM@6

 

OK 配置都已经完成,在客户机上打开浏览器验证(浏览过程当中用抓包工具抓取VMnet8网卡的数据)

屡次刷新,发现每次返回的内容是不同的

GZ30WI7K_1E`4X2I}Q_31(8

H{I]}N2~[]L_ZQ9ZML_]5H0

再到director上看下链接数,发现链接进来了

GCLC$K40VN`@[R%`~N]VU(W

 

而后抓包看看

首先看下本地主机VMnet8的mac地址

IE7{QF`CZB972XZ8}CC{`{5

 

J%R$TD4KSRAO9VO}_B5O3_N

这个包是本地主机发往director的包,具体每台虚拟机和主机的mac地址能够看前文中查看IP地址的显示结果

0U24MKL]97MV559DJ17%[NS

这个包是director发到realserver上的,源IP和目的IP都没变,director只改变了目的mac地址

3Y__9JC)S`MJ887G6IO%$$2

这个包是realserver传给本地客户的包(查看源和目标mac地址能够验证),源地址仍是为VIP,目的地址为本机客户。

 

经过抓包验证了数据的流向。

 

一个公网IP实现LVS/DR是可行的,数据包最终到达客户时,在内部网络中走的是私网的网关,至关于在公司内部饶了一个圈而已,而相比较NAT模式而言,DR模式的效率是NAT所不能比较的,在实际部署LVS中,也应该尽可能使用DR模式。

相关文章
相关标签/搜索