Linux Virtual Server(LVS)的配置方法,网上虽然是能搜到很多,但无外外乎是那几个版本。这些版本大都只是写了如何这样配置,而没有为什么这样配置,还有很多基础性的东西是默认读者已知了,就没有讲明白。
最近成功在学校机房配置了一台调度器(Director)、两台服务器(Real Server)的集群服务器,用一台客户机来访问。我的配置有比较高的可实现性,所有计算机都在同一个局域网内,不用配置网关。如果这样的LVS配置成功了,之后配置更有有实用性的集群也不难了。
本文参考了LVS中文站点上的《LVS在Fedora Core5上的配置指南(以Linux、FreeBSD、Solaris系统为RealServer)》(http://zh.linuxvirtualserver.org/node/272),原文是一篇HOW TO性质的文章,并没有对一些原理进行阐述。本文在此基础上对一些细节的部分进行了说明(甚至是很基础的地方,这些地方对于理解整个LVS系统有着重要的作用),并进行了一些改动,使得更具可实现性(所有机器都在同一网段),文中亦会说明要如何将其改为可真正派上用场的集群服务。
我假设你在此之前已经读过了LVS的基本介绍,知道其用途和基本原理。如果你还没有看过,请看一下LVS的官方站点(http://www.linuxvirtualserver.org,http://zh.linuxvirtualserver.org)。本文所述采用的是通过直接路由实现虚拟服务器(VS/DR)的方法,这里先引述官方站点对此的介绍,并标出重点、加上注释。
引用: |
跟VS/TUN方法相同,VS/DR利用大多数Internet服务的非对称特点,负载调度器中只负责调度请求,而服务器直接将响应返回给客户,可以极大地提高整个集群系统的吞吐量。该方法与IBM的NetDispatcher产品中使用的方法类似,但IBM的NetDispatcher是非常昂贵的商品化产品,我们也不知道它内部所使用的机制,其中有些是IBM的专利。
VS/DR的体系结构如图3.6所示:调度器和服务器组都必须在物理上有一个网卡通过不分断的局域网相连,如通过交换机或者高速的HUB相连。VIP地址为调度器和服务器组共享,调度器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是不可见的,只是用于处理目标地址为VIP的网络请求。(请看注释1)
图3.6:VS/DR的体系结构
VS/DR的工作流程如图3.7所示:它的连接调度和管理与VS/NAT和VS/TUN中的一样,它的报文转发方法又有不同,将报文直接路由给目标服务器。在VS/DR中,调度器根据各个服务器的负载情况,动态地选择一台服务器,不修改也不封装IP报文,而是将数据帧的MAC地址改为选出服务器的MAC地址,再将修改后的数据帧在与服务器组的局域网上发送。(请看注释2)因为数据帧的MAC地址是选出的服务器,所以服务器肯定可以收到这个数据帧,从中可以获得该IP报文。当服务器发现报文的目标地址VIP是在本地的网络设备上,服务器处理这个报文,然后根据路由表将响应报文直接返回给客户。
图3.7:VS/DR的工作流程
在VS/DR中,请求报文的目标地址为VIP,响应报文的源地址也为VIP,所以响应报文不需要作任何修改,可以直接返回给客户,客户认为得到正常的服务,而不会知道是哪一台服务器处理的。
VS/DR负载调度器也只处于从客户到服务器的半连接中,按照半连接的TCP有限状态机进行状态迁移。
|
注释1:VIP地址为调度器和服务器(RealServer)把共享,那会不会引起IP冲突?答案是:不会。正因为后面所说的,“调度器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是不可见的”。在调度器上,VIP与其局域网内IP对外都是可见的;在服务器上,对外可见的是其在局域网上的IP(调度器调度的时候使用的IP),而在服务器上,VIP的性质就像是平常我们所熟知的127.0.0.1的性质一样,它是一个loopback device,他只在网络层之上可见(包括网络层),这样的loopback device用来模拟网络适配器的行为。就算没有装网卡,127.0.0.1与VIP的这样IP都是可用的。
那为什么要在服务器上还放上一个VIP呢?
因为当只修改了MAC地址的链路层帧发到服务器的链路层时(详情请见注释2),要想再向上提交到应用层去让HTTP等服务器程序处理,必须再经过网络层、传输层等,而要通过这些层是要经过目标IP的检测的。
就像你要去参加一个婚礼,到门口,接待人员问你要参加谁的婚礼,人家这里明明举行的是李湘跟王老五的婚礼,你说你要参加谢霆锋跟张柏芝的婚礼,接待人员一定是不让你进去的。
那我就是又要说我要参加谢霆锋跟张柏芝的婚礼,以要进入李湘跟王老五的婚礼现场,怎么办?那就在李湘跟王老五的婚礼现场里安排一个自己人,你到时候对他说:“我要参加谢霆锋跟张柏芝的婚礼”,他会意地笑一声,就会帮你在李湘跟王老五的婚礼现场安排座位,让你在里面享受各种服务。
服务器里的VIP就有这个自己人的性质,他对外不可见,当请求包到达网络层以上的部分里,就可以看到VIP,从而一路上去,到达应用层,享用HTTP等服务。
原理如图(IPVS有没有到网络层?)
注释2:在这里可能有人会产生疑问,修改MAC地址就能让请求包发往Real Server上吗,不用改目标IP地址?答案是:是的。因为交换机是一个链路层的设备,链路层的传送单位是帧,他可不管网络层的包里放的是什么IP地址(网络层的ipv4包已经被封装在帧里)。当Direcotr把存有客户机的请求包的那帧的MAC地址改成某台Real Server的之后,就发出去,到交换机之后,交换机查找MAC地址与端口的对应表(端口MAC地址对应拥有些MAC地址的计算机),将这一帧发往与帧上MAC地址对应的端口,之后就发到计算机的链路层,如果MAC地址与网卡上的匹配,再向上层发送,直至应用层。
现在俺们来一步一步地在局域网内配置LVS。
四台计算机按如上方式插在交换机上,分别按如下的方式配置四台计算机。
Client
代码: |
ifconfig eth0 192.168.11.1 netmask 255.255.255.0 broadcast 192.168.11.255 |
当重启时,上面的配置将会失效。如果要长期保留这个配置,请更改/etc/sysconfig/network-scripts/ifcfg-eth0文件。具体步骤请参考DIRECTOR的配置。
Director
首先安装IPVSADM,就是LVS的管理工具。REDHAT的用户可以到rpm.pbone.net上搜索ipvsadm,找到和自己系统对应的安装包,在安装文件夹里执行如下命令:
*.rpm代表rpm安装包的文件名。
当IPVSADM安装完成后,就可以配置DIRECTOR了,使用如下命令:
代码: |
ipvsadm –C
ipvsadm -A -t 192.168.11.200:80 -s wlc
ipvsadm -a -t 192.168.11.200:80 -r 192.168.11.21 -g
ipvsadm -a -t 192.168.11.200:80 -r 192.168.11.22 -g
ipvsadm -Ln
|
每一行的命令信息可以查看IPVSADM的MAN。如果是要配置流媒体的服务器的话,应该打开UDP的包转发。
下面配置网卡:
首先新建配置文件/etc/sysconfig/network-scripts/ifcfg-eth0:0如下:
代码: |
DEVICE=e th 0 : 0
ONBOOT=y e s
BOOTPROTO= s t a t i c
IPADDR= 1 9 2 . 1 6 8 . 11 . 2 0 0
NETMASK= 2 5 5 . 2 5 5 . 2 5 5 . 2 5 5
BROADCAST= 1 9 2 . 1 6 8 . 11 . 255 |
上面配置的是DIRECTOR的虚拟IP。
配置文件/etc/sysconfig/network-scripts/ifcfg-eth0如下:
代码: |
DEVICE=e th 0
ONBOOT=y e s
BOOTPROTO= s t a t i c
IPADDR= 1 9 2 . 1 6 8 . 11 .10
NETMASK= 2 5 5 . 2 5 5 . 2 5 5 . 2 5 5
BROADCAST= 1 9 2 . 1 6 8 . 11 . 255 |
上面配置的是DIRECTOR的真实IP。
再执行下面的命令以使上面对网络的配置生效
代码: |
/etc/rc.d/init.d/network restart |
RS1(RealServer1)的配置
Linux Realserver 配置的关键之一在于关闭 arp,这要配置/etc/sysctl.conf如下
代码: |
…
#f o r i p v s
n e t . ip v 4 . c o n f . l o . a r p i g n o r e = 1
n e t . ip v 4 . c o n f . l o . a rp announ c e = 2
n e t . ip v 4 . c o n f . a l l . a r p i g n o r e = 1
n e t . ip v 4 . c o n f . a l l . a rp announ c e = 2
n e t . ip v 4 . c o n f . d e f a u l t . r p f i l t e r = 1
#end o f i p v s
… |
在/etc/sysconfig/network-scripts/ifcfg-eth0 中配置 ip 地址和网关。
代码: |
DEVICE=e th 0
ONBOOT=y e s
BOOTPROTO= s t a t i c
IPADDR= 1 9 2 . 1 6 8 . 11 . 21
NETMASK= 2 5 5 . 2 5 5 . 2 5 5 . 0
BROADCAST= 1 9 2 . 1 6 8 . 11. 2 5 5 |
新建VIP 的网卡配置文件为/etc/sysconfig/network-scripts/ifcfg-lo:0。
代码: |
DEVICE=l o : 0
ONBOOT=y e s
IPADDR= 1 9 2 . 1 6 8 . 11 . 2 0 0
NETMASK= 2 5 5 . 2 5 5 . 2 5 5 . 2 5 5 |
再执行下面的命令以使上面对网络的配置生效
代码: |
/etc/rc.d/init.d/network restart |
RS2(RealServer2)的配置
Linux Realserver 配置的关键之一在于关闭 arp,这要配置/etc/sysctl.conf如下
代码: |
…
#f o r i p v s
n e t . ip v 4 . c o n f . l o . a r p i g n o r e = 1
n e t . ip v 4 . c o n f . l o . a rp announ c e = 2
n e t . ip v 4 . c o n f . a l l . a r p i g n o r e = 1
n e t . ip v 4 . c o n f . a l l . a rp announ c e = 2
n e t . ip v 4 . c o n f . d e f a u l t . r p f i l t e r = 1
#end o f i p v s
… |
在/etc/sysconfig/network-scripts/ifcfg-eth0 中配置 ip 地址和网关。
代码: |
DEVICE=e th 0
ONBOOT=y e s
BOOTPROTO= s t a t i c
IPADDR= 1 9 2 . 1 6 8 . 11 . 22
NETMASK= 2 5 5 . 2 5 5 . 2 5 5 . 0
BROADCAST= 1 9 2 . 1 6 8 . 11. 2 5 5 |
新建VIP 的网卡配置文件为/etc/sysconfig/network-scripts/ifcfg-lo:0。
代码: |
DEVICE=l o : 0
ONBOOT=y e s
IPADDR= 1 9 2 . 1 6 8 . 11 . 2 0 0
NETMASK= 2 5 5 . 2 5 5 . 2 5 5 . 2 5 5 |
再执行下面的命令以使上面对网络的配置生效
代码: |
/etc/rc.d/init.d/network restart |
至此,一个LVS就配置好了,我们只要分别在Director,RS1,RS2的/var/www/html/文件夹下分别放入三个内容不同的名为index.htm的文件,然后在Client的浏览器中输入http://192.168.11.200,回车,不停的刷新,就会发现,有时看到的是放在RS1上的index.htm,有时看到的是RS2上的index.htm,而不会看到director上的index.html。因为发现198.168.11.200的80端口的http请求报文都被转发到到rs1或rs2上。
大功告成!
分享到:
相关推荐
LVS(Linux Virtual Server)是一种开源的负载均衡器,可以将多个服务器组成一个虚拟服务器,提供高可用性和高性能的服务。LVS的安装与配置是一个复杂的过程,本文将详细介绍LVS的安装与配置过程。 一、基于NAT的...
Linux Virtual Server(LVS)是一种高效且可扩展的负载均衡解决方案,主要用于构建高可用性和高性能的服务器集群。LVS的核心思想是将多个物理服务器合并成一个逻辑上的虚拟服务器,为客户提供无缝的服务体验,同时...
《Linux Virtual Server Administration》这本书深入探讨了如何在Red Hat Enterprise Linux 5.2环境下构建、配置和管理高可用性及可扩展性的虚拟服务器系统。LVS(Linux Virtual Server)是一种利用特殊的路由和负载...
**Linux Virtual Server**(简称 LVS)是一种构建在 Linux 平台上的负载均衡解决方案,它通过智能调度算法来分配网络请求到后端的真实服务器上,从而实现高性能、高可用性的服务集群。LVS 的核心思想是利用 Linux ...
LVS(Linux Virtual Server)是一种开源的负载均衡解决方案,可以将多个服务器组成一个高性能、高可用的虚拟服务器。Keepalived 是一个基于 LVS 的高可用性解决方案,提供了自动故障切换和负载均衡功能。以下是 ...
Linux Virtual Server (LVS) 是一个基于 Linux 内核的高性能负载均衡解决方案,它能够通过调度算法将客户端请求分发到多个后端服务器(Real Server),从而实现负载均衡的目的。LVS 支持多种工作模式,其中 Direct ...
LVS(Linux Virtual Server)是一种开源的负载均衡技术,主要用于处理大规模的网络请求,通过构建一个虚拟服务器集群,将任务分发到多个后端的真实服务器上,从而提高系统的可用性和响应速度。LVS的核心组件包括调度...
**LVS**(Linux Virtual Server)是一种开源的负载均衡技术,主要用于实现高性能的Web服务器集群。它通过一个虚拟的IP地址(VIP)对外提供服务,并将接收到的请求分发到后端的真实服务器上。LVS支持多种负载均衡策略...
LVS(Linux Virtual Server)是一种开源的负载均衡解决方案,可以将多个服务器组合成一个虚拟服务器,以提高服务器的可用性和可扩展性。LVS/DR(Direct Routing)是LVS的一种实现方式,通过路由机制将客户端的请求...
Linux Virtual Server (LVS) 是一种开源的负载均衡解决方案,它通过 Linux 内核来实现高可用性和高性能的负载均衡服务。当 LVS 被部署在网络中时,有时会遇到与 ARP(Address Resolution Protocol 地址解析协议)...
LVS(Linux Virtual Server)是基于IP层的负载均衡技术,它允许我们构建一个高性能、高可用的服务器集群,以应对大规模网络服务的需求。 1. **设计目标**: - **服务转发**:LVS能够接收来自外部网络的各种基于TCP...
Linux Virtual Server(LVS)是一种用于构建高可用性服务器集群的负载均衡解决方案。LVS能够在Linux内核2.4及以后的版本中实现网络请求的负载均衡,其主要架构基于netfilter框架。netfilter是一个用于在网络栈中进行...
LVS,全称Linux Virtual Server,是Linux系统中的一种高性能的负载均衡技术,由章文嵩博士发起并维护,旨在提供一个高质量的虚拟服务器集群解决方案。LVS作为开源项目,其官方网站为www.linuxvirtualserver.org。自...
LVS(Linux Virtual Server) 是Unix-like系统中的一个虚拟服务器,是国内贡献给开源组织的一个最优秀的项目之一。LVS在Unix-like系统中 是作为一个前端(Director)存在的,又称为调度器,它本身不提供任何的服务,只是...
本文主要阐述如何在 Linux 系统下快速实现负载均衡,介绍了使用 LVS(Linux Virtual Server)搭建负载均衡集群的原理和实现方法。 一、负载均衡的定义和原理 负载均衡是指将外部请求分配到多台服务器上,以提高系统...
LVS(Linux Virtual Server)是一种开源的负载均衡解决方案,通过 Keepalived 实现高可用性的虚拟服务器。下面将详细介绍 LVS+Keepalived 的安装配置过程和技术实现原理。 LVS 技术 LVS 是一種基于 Linux 的虚拟...
Linux Virtual Server (LVS) 是一个基于 Linux 内核的负载均衡集群系统。它能够通过 IP 负载均衡技术和基于内容请求分发技术,将访问请求均衡地分配到服务器集群中的各个节点服务器上执行,而客户端却完全感觉不到...
Linux LVS(Linux Virtual Server)是一种高性能的网络负载均衡技术,它通过在内核级别实现虚拟服务器集群,将流入的网络请求智能地分发到后端的真实服务器(Real Server),从而提高了服务的可用性和响应效率。...
在本教程中,我们将探讨如何在Red Hat Enterprise Linux 6.5(RHEL 6.5)上配置LVS-DR(Direct Routing)模式。LVS-DR模式是一种经济高效且易于实施的解决方案,它通过直接路由的方式将客户端请求转发到后端真实...