LVS能构架成这样的集群不

电信,网通,有线通,三线路分别在三个不同地点(一个市内不同IDC)。三个点都有服务器群。
想达到用户访问过来时按照来源不同分别由不同的线路响应它的请求。

服务器都是提供web服务,web是做电子商务的而且是单位的门户。

主要是不知道怎么搞定三个线路的分流问题,DNS解析是自己做还是给外面做。

Forums:

这种类型的分流跟LVS无关,做智能DNS解析就行。如果非要使用LVS,可以考虑VPN+NAT和TUN模式,但是访问质量可能会有问题。您如果在电信、网通、有线通各有好几台web服务器想做负载均衡,那么LVS就能派上用场了。

智能DNS解析主要是需要根据源地址来划分。对于您的需求来说,可以把用户分成四种类型,分别对应您认为的访问电信(telecom)、网通(cnc)、有线通(ocn)最快的还有一些未知(unknown)的可以做轮询。举个例子,有四个DNS是被广大用户所用:1.1.1.1、2.2.2.2、3.3.3.3、4.4.4.4,分别对应电信、网通、有线通、未知这些运营商的网段。

假定一下条件:
自建授权域名服务器IP:100.100.100.100
托管域名:greatlvs.org
托管主机名:www.greatlvs.org
电信托管机器IP:11.11.11.11
网通托管机器IP:22.22.22.22
有线通托管机器IP:33.33.33.33。

然后就要配置一下DNS。我使用bind9来搭建自己的授权域名服务器。配置文件的框架如下文所示。
--------------------我是可爱的分割线--------------------
/etc/named.conf的内容片段:

acl "acl_telecom" {
1.1.1.0/24; #这里是一个大列表,您可以在网络上搜索到的。一般是用一个网段来表示,IP/掩码位数。
};

acl "acl_cnc" {
2.2.2.0/24;
};

acl "acl_ocn" {
3.3.3.0/24;
};

;这里不需要写acl "acl_any"是因为可以取非。凡是不属于上述列表的就是属于这个隐含的any了。
;any表示的是任意来源地址。如果只写any不做取非,那个view是不能放在最开始的,否则就会最
;先匹配,就不往下走了。

view "view_telecom" {
match-clients { acl_telecom; };
zone "greatlvs.org" {
type master;
file "data/greatlvs.org-telecom";
allow-query {any;};
};
};

view "view_cnc" {
match-clients { acl_cnc; };
zone "greatlvs.org" {
type master;
file "data/greatlvs.org-cnc";
allow-query {any;};
};
};

view "view_ocn" {
match-clients { acl_ocn; };
zone "greatlvs.org" {
type master;
file "data/greatlvs.org-ocn";
allow-query {any;};
};
};

view "view_unknown" {
match-clients { !acl_telecom; !acl_cnc; any; };
zone "greatlvs.org" {
type master;
file "data/greatlvs.org-any";
allow-query {any;};
};
};

--------------------我是可爱的分割线--------------------
greatlvs.org-telecom的内容片段:
$ORIGIN .
$TTL 14400 ; 4 hours
greatlvs.org IN SOA ns1.greatlvs.org. root.greatlvs.org. (
2009011001 ; serial
7200 ; refresh (2 hours)
7200 ; retry (2 hours)
43200 ; expire (12 hours)
21600 ; minimum (6 hours)
)
IN NS ns1.greatlvs.org.
IN A 100.100.100.100 #授权DNS解析服务器IP
www IN A 11.11.11.11 #等价写法是:www.greatlvs.org. IN A 11.11.11.11

--------------------我是可爱的分割线--------------------
greatlvs.org-cnc的内容片段:
$ORIGIN .
$TTL 14400 ; 4 hours
greatlvs.org IN SOA ns1.greatlvs.org. root.greatlvs.org. (
2009011001 ; serial
7200 ; refresh (2 hours)
7200 ; retry (2 hours)
43200 ; expire (12 hours)
21600 ; minimum (6 hours)
)
IN NS ns1.greatlvs.org.
IN A 100.100.100.100 #授权DNS解析服务器IP
www IN A 22.22.22.22

--------------------我是可爱的分割线--------------------
greatlvs.org-ocn的内容片段:

$ORIGIN .
$TTL 14400 ; 4 hours
greatlvs.org IN SOA ns1.greatlvs.org. root.greatlvs.org. (
2009011001 ; serial
7200 ; refresh (2 hours)
7200 ; retry (2 hours)
43200 ; expire (12 hours)
21600 ; minimum (6 hours)
)
IN NS ns1.greatlvs.org.
IN A 100.100.100.100 #授权DNS解析服务器IP
www IN A 33.33.33.33

--------------------我是可爱的分割线--------------------
greatlvs.org-any的内容片段:

$ORIGIN .
$TTL 14400 ; 4 hours
greatlvs.org IN SOA ns1.greatlvs.org. root.greatlvs.org. (
2009011001 ; serial
7200 ; refresh (2 hours)
7200 ; retry (2 hours)
43200 ; expire (12 hours)
21600 ; minimum (6 hours)
)
IN NS ns1.greatlvs.org.
IN A 100.100.100.100 #授权DNS解析服务器IP
www IN A 11.11.11.11 #等价写法是:www.greatlvs.org. IN A 11.11.11.11
www IN A 22.22.22.22
www IN A 33.33.33.33

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;说明:
;在greatelvs.org-any列了三个A记录主要是为了DNS轮询。对于无法划分清楚的源地址,
;一般用轮询的方式。如果某台服务器可能对所有的访问质量都好,可以只指定一台。
;比如我们只划分了中国的运营商,没有划分国外,因此国外的IP我们都归入了unknown
;视图内,假设从国外访问网通速度很快,可以让unknown的来访问22.22.22.22网通机器。
;具体要怎么用,就要具体情况具体分析,根据自己的策略来定了。比如网通机器的压力
;很大,那么可以通过在greatlvs.org-cnc里边加上其他A记录来做轮询分流。
--------------------我是可爱的分割线--------------------

只要把acl、view、zone准备妥当,DNS配置运行无误,那么通过DNS智能解析是可以分流,把来源不同的用户分流到不同的服务器上去。常见的CDN网络加速中最后一跳的实现就是通过这种方式来实现的。这里要注意区分一点:网通用户如果指定了电信的DNS,解析结果也会是去访问电信的节点,而不会是网通的节点。

非常感谢得到这么详细的回复。我会仔细研读。电信,网通,各点都有几台服务器,这样可以用LVS,然后中心点分流用智能DNS分流。

由于排版的问题导致经过格式化的文本看起来一塌糊涂。大概的思路就是那样子,具体的配置文件您可以遵照各自的服务软件的标准配置格式来书写。

我只是做过这样的东西,正好知道。希望对您能有一点点帮助。

randomness