菜鸟有一些关于如何实现LVS的基础问题想请教,有人能帮忙给说说吗?谢谢了!

我就不客气了,开门见山了。

问题1:

据我所了解的,
如果客户端和服务器之间存在路由器,(路由器存在的情况时很大的)
那么这个路由器只会把从他请求的那个目标ip地址收到的数据返回给客户端。
所以,
如果使用VS/TUN和VS/DR方式组建的集群的话,
根据我所读到的原理,
response是从在集群系统的另外一端的,服务器池里的某一个真实的服务器直接发给客户端的。
那么,
VS/TUN和VS/DR方式是如何“欺骗”通过路由器的客户端,
或者说“欺骗”路由器,
使它相信这个被返回的数据就是从它请求的那个目标地址中返回的呢?

问题2:
(设计到真实的环境配置)
现在我想做一个VS/DR方式的服务器集群,
根据我所读到的文章,
所需要的设备有:
a.用于负载调度的,安装有linuxOS的服务器一台
b.用于搭建真实服务器的n台电脑。n=>1台(不好意思,因为是自己做的实验,所以实验设备上比较紧张。不好意思)
c.使负载调度器和真实服务器存在于“同一个物理网段”的设备,比如HUB等。
d.网线若干。

就是需要这些设备了吧?

但是,现在问题就出现在了网线的布线上。
根据原理,
负载调度器需要2块网卡,
一块和广域网相连接,使用户可以发送请求数据(requests);
另一块和真实的服务器的网卡相连,布线到同一个hub上(用来实现“同一个物理网段”)。
但是,
如何布线才能使真实的服务器把响应的数据(response)直接传回给客户端呢?
也就是我不明白,
真实的服务器是通过哪根网线把响应的数据直接传回给客户端的呢?
是否真实服务器还需要另外一块网卡来连接真实的广域网吗?

问题3:
所谓的Virtual IP Adress的概念我大致能够理解,
但是,怎么拥有这个VIP呢?
需要设置DNS吗?
还是这个VIP的概念实际上是附加在IP地址概念上的一个“概念”呢?

一下子问了这么多问题,不好意思。

请多关照吧!

Forums:

答问题1:一般路由器(骨干和边缘路由器)会根据IP报文的目标地址转发,不会作过多的检查,因为这样才能高效地转发报文。可能只有在一些严格的防火墙上才会做IP地址和MAC地址绑定,而这些防火墙往往是自己控制的。

答问题2:逻辑上你至少需要三台机器,客户机、调度器和服务器;物理上你可以用一台,可以考虑用虚拟机(如Xen和VMware)虚拟出三台来。最简单的网络连接是客户机、调度器和服务器在同一个物理网络上。

答问题3:如果只是测试的话,自己可以随便选一个VIP地址,如192.168.0.100等。VIP跟DNS没有直接的关系,除非你要将域名和VIP关联起来。

谢谢您的回答,
不过,第2个问题我还是不明白,
真实服务器到底是用哪根网线把数据直接发送给客户端的呢?

如果还是和调度器相同的那根网线,
那不是就和NAT的模式一样,
调度器(的那根网线)不就成了整个系统的瓶颈了吗?

那么,真实服务器传送数据的那根网线,
是真实服务器上面又接入的一根网线吗?
真实服务器需要直接接在外网上吗?
有应该怎么布线呢?

谢谢!

如果用VS/NAT方式,真实服务器发出的报文一定经过调度器发给客户端。

如果用VS/DR或者VS/TUN方式,真实服务器发出的报文可以不经过调度器,通过自己的路由器直接返回给客户端。

我想布线方式是比较灵活的,关键在于你想采取什么负载均衡方式和什么网络拓扑结构。

那么我可不可以这样理解呢?

真实服务器需要自己独立的连接网络的条件
(有硬件设备,网线,路由器等,
和软件的设置,例如外网的ip地址和连接到外网所需要的设置等),

用以返回数据给客户端。

而且
这个服务器需要有一根网线,
和调度器组成一个“在同一物理网段”的局域网

例如我有3台电脑,
一台用来做调度器,2台用来做真实服务器,
以最简单的布线方法来做,
那么,我就需要3条能够连接到外网的线路,
一条线路连接调度器,
用以实现VIP的概念。

另外2条线路用来连接2台真实服务器,
用以让真实服务器把数据直接传送给客户端。

然后再用一些设备,例如hub和网线,
把这3台电脑连接起来。

我这样理解对吗?

我比较笨,
不好意思了。:P

我不是很明白你所描述的。我们可能把东西搞复杂了。;)

实际的情形可以很简单。例如,在你的例子中,只要三根网络和一个Switch/HUB就可以。

          Switch/HUB
           |   |   |
          /    |   \
        /      |    \
      LB     RS1   RS2

12万分的感谢您的回复,
可能我把问题说的太复杂了。
有些罗嗦了。

您给的图我非常清楚,
那3个线我也知道了。

但是在实际应用中,(可能我没说清楚我发问的出发点是[实际应用]吧!)
连接外网的那根网线是不是直接插在这个switch/hub上就行了呢?

如果这样可以,那么从rs1或者rs2返回的数据,
是不是也要从这根网线出去呢?
请看着个图

 -------
 | iNET |
 -------
 |
 |(我的问题就是这根网线,因为在实际应用中可能非常关心流量的问
 | 题。我担心这根网线的负荷是否太大了,因为有要传送进来的数据,
 | 又要传送出去的数据。虽然出去的数据是从rs1/2直接发出的,
 | 不是通过LB传送,LB不会成为瓶颈,但是瓶颈却变成了这根网线了)
 |
 |    Switch/HUB
 |    |  |  |
 |    /   |  \
 |   /    |   \
 |----LB   RS1  RS2

是不是实际的网络应该是这个样子的呢?
如下图:

----------------
 iNET(clients)
----------------
 |
 | (这根网线只负责输入的数据,有一个公网ip)
 |
 |    Switch/HUB
 |    |  |  |
 |    /  |  \
 |    /  |   \
 |--- LB   RS1  RS2
         |   |
         |   |
         |    -----L1---------- |-----------------|
         |              | iNET(clients) |
         ----------L2------------ |-----------------|
这2根线L1和L2负责直接从RS1/2向客户端发送处理完的数据,
也分别有一个公网ip对应

是不是这个样子的呢?
谢谢!

连接外网的那根网线可以直接插在这个switch/hub上,如下图:

 -------
 | iNET |
 -------
 |
 |
 --------Switch/HUB
      |  |  |
     /   |  \
    /    |   \
      LB   RS1  RS2

你说的没错,进来和出去的数据都要经过连接INET的这根网线。不过,我想瓶颈应该不在网线,而是在路由器的带宽和交换机的带宽。一般来说,路由器和交换机的带宽都是可以升级的,平常的应用很少有1Gbps的吞吐率,所以我想多数集群系统只有一个和Internet相连的路由器,因为这种结构比较简单。

当路由器成为瓶颈时,我们确实可以让它们通过各自的路由器将响应数据发送给客户。

虽然经过调度器所在的机器,但不需要调度器进行报文改写的处理。我的理解,呵呵,不知对不对,最后还是请章老师来定夺。

randomness