LVS入门系列(2):LVS-NAT

  • A+
所属分类:LVS  运维技术

在本博客中,"LVS"是一个系列文章,LVS系列博文直达链接:LVS专题系列

这篇文章中的知识点是建立在前文的基础上的,如果你还没有掌握前文中的知识,请先参考之前的文章,否则在阅读时 有可能会遇到障碍。

 

话接上文,LVS由两部分组成,ipvs与ipvsadm,ipvs是LVS的核心实现,但是我们不能直接操作ipvs,我们需要借助管理工具ipvsadm定义LVS集群规则,ipvs再根据我们定义好的规则进行工作。

 

所以,如果想要定义LVS,则必须先学会怎样使用ipvsadm命令。

但是如果在没有任何应用场景的情况下,直接解释ipvsadm命令,反而不太具象化,所以此处假设,我们想要配置一个LVS-NAT集群,在我们想要配置LVS-NAT集群的情况下,我们应该怎样使用ipvsadm命令呢?此处给出一个使用示例,根据这个命令示例来解释ipvsadm。

如果我们想要配置一个LVS-NAT集群,可以在角色为调度器的主机上执行如下ipvsadm命令。

 

如上例所示,我们执行了多条ipvsadm命令。

第一条命令为"ipvsadm -A -t VIP:port -s rr",这条命令什么意思呢?

这条命令表示,创建一个LVS集群服务,这个服务为tcp协议的服务,集群服务的IP为VIP,端口号为port,使用rr算法(轮询算法)分发请求到后端的RealServer中。

-A选项表示添加一条虚拟服务器记录,即创建一个LVS集群。

-t选项表示创建LVS集群服务为tcp服务,"VIP:port"表示集群服务于的IP与端口号。

-s选项为Scheduling(调度)之意,用于指定具体的调度算法,可用算法有 rr 、wrr 、lc 、wlc 、lblc 、lblcr 、dh 、sh 、sed 、nq ,而rr算法就是Round-Robin的缩写,表示轮询算法。

 

好了,我觉得你应该理解了,其实上述命令就是创建了一个LVS集群服务,并且设置了服务的具体IP与端口号以及调度算法等属性。

但是只完成上述工作还不行,我们还需要为LVS集群添加后端主机,添加后端主机的命令如下:

ipvsadm -a -t VIP:port -r RIP1 -m

上述命令表示为集群添加一个RealServer。

因为我们已经使用第一条命令创建了一个服务于"VIP:port"的tcp服务集群,所以,我们在添加RealServer时,要指定将RealServer到哪个集群中。

-a选项表示添加一个RealServer到集群中。

-t选项表示LVS集群服务为tcp服务,"VIP:port"表示集群服务于的IP与端口号。

-r选项用于指定将要添加的Realserver的IP地址。

-m选项表示LVS集群的工作模式为LVS-NAT模式,当然,如果想要LVS工作于其他模式,那么在添加Realserver时,则不能使用-m选项,而需使用其他对应选项。

如果有多台RealServer需要添加到LVS-NAT模型中,那么只要将命令中的RIP替换为具体的RealserverIP即可。

 

使用上述命令与选项,即可简单的配置出一个LVS-NAT集群。

当然,上述选项并不是常用选项的全部,但是本着"用到再说"的原则,我们先了解到这里,以方便我们入门。

规则配置完成了,如果我们想要查看当前的LVS配置,应该怎样办呢?

ipvsadm命令与iptables命令非常相似,使用-L选项即可查看LVS规则,-L为List之意,使用-L与使用-l(小写L)等效,示例如下。

与iptables命令相同,当查看规则时,ipvsadm默认会对IP地址与端口号进行解析,如果不想对IP与端口进行解析,可以使用-n选项,所以说,如果你已经对iptables命令非常熟悉,那么搞定ipvsadm命令简直不要太简单,但是需要注意,当使用ipvsadm命令查看规则定义并且使用-n选项时,-n选项要放在-L选项的后面,示例如下。

 

好了,站在前文的基础上,理解上述命令,应该不难,如果正确的设置了环境,并且正确的配置了LVS规则,那么LVS集群应该就能正常工作了,但是,需要注意是,当服务器重启时,如果没有将提前设置好的LVS集群规则保存,那么在服务器重启以后,LVS集群设置将会消失,所以,我们需要将定义好的ipvs规则保存,以便重启后能够重载这些规则。

在centos6中,可以使用service ipvsadm save命令保存LVS规则,此命令会将LVS规则保存在/etc/sysconfig/ipvsadm文件中。

当重启后,可以使用service ipvsadm reload命令重新载入LVS规则。

除了使用上述方法,还能够使用如下方法,将LVS规则保存于指定的文件中,比如保存LVS规则到 /testdir/lvsrules文件中。

-S选项为Save之意,即保存LVS规则,当使用ipvsadm -S命令时,会输出LVS规则到标准输出中,所以利用重定向,可以将LVS规则保存于指定文件。

同理,我们可以从指定的文件中重新载入对应的LVS规则,以便重启后能够正常使用之前定义的LVS集群,对应重载规则命令如下。

-R选项为Reload之意,即重载LVS规则,重载规则时需要利用重定向,将规则载入。

centos7中,可以使用-S选项或者-R选项进行LVS规则保存或重载。

 

说了这么多,我觉得我们应该动动手了,有了前文中LVS-NAT的知识作为基础

 

环境准备

首先,我们准备了4台虚拟机,分别扮演客户端、LVS服务器、RealServer1、RealServer2

LVS服务器上配置了两块网卡,分别配置VIP与DIP

RealServer1与RealServer2的IP分别为RIP1与RIP2,同时,需要将两个RealServer的网关指向DIP。

为了尽量的模拟内部网络,我们在vmware虚拟机中创建了一个仅主机模式的虚拟网络,虚拟网络的网段为10.1.0.0/16,而DIP、RIP1、RIP2都属于这个网段。

由于我们没有真正的外网IP,所以此处使用192.168.1.198这个私网IP地址模拟公网VIP。

DIP为10.1.0.8

RIP1为10.1.0.11

RIP2为10.1.0.12

如果想要组建LVS集群,则需要保证集群内的主机的时间是同步的,通常需要配置时间服务器,此处省略此步骤。

 

首先,我们创建一个虚拟网络,尽量模拟内网环境。

LVS入门系列(2):LVS-NAT

 

下图中的vmnet6是我创建的一个"仅主机模式"的虚拟网络 ,我们用此网络模拟内网环境,你也可以点击"更改设置"按钮,创建一个新的仅主机模式的虚拟网络

LVS入门系列(2):LVS-NAT

 

扮演调度器的服务器上配置了两块网卡,网卡1为桥接模式,为VIP所在网卡,网卡2为仅主机模式(VMnet6),为DIP所在网卡。

LVS入门系列(2):LVS-NAT

如下图所示,VIP为192.168.1.198,DIP为10.1.0.8

LVS入门系列(2):LVS-NAT

 

同时,将两个RealServer的网卡设置在这个"仅主机模式"的虚拟网络中。

LVS入门系列(2):LVS-NAT

RealServer1的IP为10.1.0.11,RealServer1的网关为LVS调度器的DIP,也就是10.1.0.8,如下图所示

LVS入门系列(2):LVS-NAT

 

RealServer2的配置同RealServer1,只是RIP2为10.1.0.12 ,如下图所示

LVS入门系列(2):LVS-NAT

 

假设我们的LVS集群提供的是Http服务,此处,为两台RealServer安装httpd,同时设置默认访问页面index.html

LVS入门系列(2):LVS-NAT

为了使负载效果更加明显,此处故意将RealServer1与RealServer2的默认主页的内容设置为不同内容,以显示负载效果,但是在实际场景中,所有RealServer中的资源应该完全相同,以便不管任何RealServer响应客户端,客户端得到的内容都是相同的,因为LVS集群对于客户端来说,应该是透明的。

LVS入门系列(2):LVS-NAT

 

同时,为了让客户端、调度器、Realserver之间能够正常通讯,此刻清空各个测试机中的防火墙规则,以便在实验过程中排除干扰因素。

LVS入门系列(2):LVS-NAT

 
 

好了,完成 上述配置后,基本环境已经配置完毕,剩下的操作就需要在调度器上进行了。

 

LVS-NAT配置

其实,只要基础环境准备完毕,配置LVS-NAT还是很简单的,因为我们在介绍ipvsadm命令时,已经将基本的配置描述的差不多了,现在我们来实践一下。

首先,我们如果想要在调度器上配置LVS集群规则,则需要先安装ipvsadm命令。

LVS入门系列(2):LVS-NAT

ipvsadm安装完成后,即可开始配置LVS集群规则,但是,如果想要LVS集群能够正常工作,则需要为调度器开启内核的核心转发功能,因为调度器主要负责分发请求到后端主机,所以它需要转发报文,没错,如果你看过本博客中iptables系列的相关文章,你一定知道,我们需要将ip_foward的值设置为1,才能够转发报文到别的主机,此处为了演示方便,使用"临时生效"的方法,开启调度器主机的核心转发功能,实际应用中最好使用"永久生效"的方法进行设置。

LVS入门系列(2):LVS-NAT

关于ip_forward的相关设置,此处不再赘述,如果你对ip_forward的相关设置还不太了解,可以参考如下文章。

http://www.zsythink.net/archives/1663

 

开启调度器主机的核心转发功能之后,即可在调度器主机上定义集群规则了,根据实验环境配置如下。

LVS入门系列(2):LVS-NAT

上述命令我们已经解释过,上述命令表示:

定义一个tcp服务的LVS集群,集群服务的IP为192.168.1.198,端口为80,使用轮询算法将请求发往后端主机。

我们在刚才定义的LVS集群中添加了两个后端主机,两个RealServer的IP分别为10.1.0.11与10.1.0.12,在定义后端主机的同时,定义了LVS集群的工作模式为LVS-NAT模式。

 

完成上述配置后,我们可以查看一下刚才配置的集群服务,LVS-NAT集群已经配置完毕。

LVS入门系列(2):LVS-NAT

 

为了能够在重启后,继续使用刚才定义的LVS-NAT规则,此处对LVS集群定义进行保存。

LVS入门系列(2):LVS-NAT

 

集群规则配置完毕后,我们就可以进行测试了,看看LVS-NAT集群是否能够按照我们所想,分发请求到后端主机。

我们通过客户端主机,访问VIP的80端口。

如下图所示,每次访问的响应内容都是由不同的RealServer返回的,因为我们使用了rr轮询算法,所以后端主机轮流对客户端进行响应。

LVS入门系列(2):LVS-NAT

 

注意,在测试LVS-NAT集群效果时,我们使用了curl命令,如果你使用浏览器进行测试,可能会受缓存的影响,从而不能直观的看到轮询算法的效果,如果你使用浏览器进行效果测试,可以在每次测试时打开新的浏览器页签进行访问,以便更加明显的看到效果。

LVS入门系列(2):LVS-NAT

 

可见,我们配置的LVS-NAT集群已经可有正常工作了。

但是,聪明如你肯定想到了一些潜在的问题,比如,如果我们提供的服务中需要用到Session,那么当来自同一个客户端的请求被发往不同的后端主机时,跟Session有关的操作就会出现问题,同理,如果客户端可以上传图片,删除图片,那么,后端主机是否需要实时同步这些资源或者使用共享存储呢?这些问题是所有负载均衡架构都要考虑的问题,我们暂时先不考虑那么多,此处我们的重点是先初步的了解LVS-NAT模型,我们已经做到了。

 

好了,这篇文章就暂时写到这里,希望能够对你有所帮助~常来捧场呦~~帮忙推荐呦~~亲~~~

 

weinxin
我的微信公众号
关注"实用运维笔记"微信公众号,当博客中有新文章时,可第一时间得知哦~
朱双印

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: