Chinaunix

标题: 请教我的服务能否通过LVS实现负载均衡集群? [打印本页]

作者: miaoer    时间: 2008-10-24 15:48
标题: 请教我的服务能否通过LVS实现负载均衡集群?
服务介绍:
有个固定的TCP端口用于监听,当客户连上来之后会协商一个UDP端口用于通信;于是服务器开启协商的UDP端口与客户端通信。
(请别问我为什么服务设计成这个样子,这是没办法的事情,受到通信协议的制约。)
(请注意:该UDP端口是协商出来的,是动态变化的)

该服务与传统的服务(如WEB之类)有一定的区别,即TCP链接与UDP套接字对之间有耦合关系。

翻看了论坛内的帖子,似乎大多数的集群都是基于IPVS的。 而IPVS在我这种情况下肯定是不适用的,因为无法保证TCP报文与对应的
UDP报文会被schedule到相同的real server 上去。

请问各位师兄,有否碰到过类似情况? 有没有解决办法呢?
我发现有个叫KTCPVS(基于layer-7的)的东东似乎可以用于我这种情况,但是这个KTCPVS好像还没有成熟,是吧?
作者: jerrywjl    时间: 2008-10-24 16:01
我觉得应该可以,不过你找个环境试试不就是了?!
作者: miaoer    时间: 2008-10-24 16:03
标题: 回复 #2 jerrywjl 的帖子
总要有点理论依据了之后才能实践啊,要不会很盲目的啊。
作者: miaoer    时间: 2008-10-24 17:02
自己顶一下!

各位楼上的,楼下的,路过的大哥,给点意见吧。
作者: gl00ad    时间: 2008-10-25 07:16
有个固定的TCP端口用于监听,当客户连上来之后会协商一个UDP端口用于通信;于是服务器开启协商的UDP端口与客户端通信。


LVS schedule -- 固定的TCP端口(NOT UDP)-- to real server
当客户连上来之后 -- real server -- 协商一个UDP端口用于通信
UDP/TCP 服务器 on real servers

Is this what you want?

[ 本帖最后由 gl00ad 于 2008-10-25 07:17 编辑 ]
作者: miaoer    时间: 2008-10-25 08:50
原帖由 gl00ad 于 2008-10-25 07:16 发表
有个固定的TCP端口用于监听,当客户连上来之后会协商一个UDP端口用于通信;于是服务器开启协商的UDP端口与客户端通信。


LVS schedule -- 固定的TCP端口(NOT UDP)-- to real server
当客户连上来之后 -- r ...



Yes. My question is how to schedule the subsequent UDP packets to the same real server as the corresponding TCP packets?
作者: gl00ad    时间: 2008-10-25 09:31
标题: 回复 #6 miaoer 的帖子
I already told you, schedule 固定的TCP端口 to one of the real server, which one does not matter, as it will change.  

your own application 协商一个UDP端口用于通信 on the real server, that mean the application is on each real server, not on LVS server

My question is how to schedule the subsequent UDP packets

do not schedule UDP, schedule 固定的TCP端口

Use persistence to ensure same client IP send to the same real server
use firewall mark to group TCP and UDP port to the same real server on second thought, dynamic UDP port is a problem for sure, let me think about it

[ 本帖最后由 gl00ad 于 2008-10-25 09:37 编辑 ]
作者: miaoer    时间: 2008-10-25 12:23
原帖由 gl00ad 于 2008-10-25 09:31 发表
I already told you, schedule 固定的TCP端口 to one of the real server, which one does not matter, as it will change.  

your own application 协商一个UDP端口用于通信 on the real server, that mean ...



非常感谢gl00ad的帮助。

是的根据客户IP地址来将相同的源地址的IP报文schedule到同一个real server上去,是一个不错的注意。
不过(怪我最开始没说清楚),我的这个服务基本上只有一个客户IP地址,非常特殊。
实际上是这样,我要做两个负载均衡集群。一个做客户端,另一个做服务器端。所以客户端基本上就只有一个IP地址。
不知道我表达清楚没?
作者: jerrywjl    时间: 2008-10-25 12:33
原帖由 miaoer 于 2008-10-24 16:03 发表
总要有点理论依据了之后才能实践啊,要不会很盲目的啊。


那你去看Red Hat的lvs 管理手册好了。http://www.redhat.com.cn/docs --> RHCS/GFS

我正是因为做过并看过才告诉你。不过你那个服务,只有你自己试了。你不试怎么知道?!
作者: miaoer    时间: 2008-10-25 12:44
原帖由 jerrywjl 于 2008-10-25 12:33 发表


那你去看Red Hat的lvs 管理手册好了。http://www.redhat.com.cn/docs --> RHCS/GFS

我正是因为做过并看过才告诉你。不过你那个服务,只有你自己试了。你不试怎么知道?!



关于LVS的配置等我都看过的。
问题的关键不在于怎么配置,而是目前的LVS解决方案是否在理论上能满足我的需求?
我目前需要的应该是一种layer-7的schedule算法,并且能够插入我自己的用户数据解析代码来实现特定
用户数据流之间的schedule绑定。
作者: jerrywjl    时间: 2008-10-25 14:38
原帖由 miaoer 于 2008-10-25 12:44 发表



关于LVS的配置等我都看过的。
问题的关键不在于怎么配置,而是目前的LVS解决方案是否在理论上能满足我的需求?
我目前需要的应该是一种layer-7的schedule算法,并且能够插入我自己的用户数据解析代码来 ...



行不行的问题,我觉得还是要靠benchmark来以事实说明;用与不用LVS,毕竟要经过不断调试才能真正说明问题。
既然已经是熟手,我想做这样的工作并不需要花多少时间和精力。
你说对了,除了IPVS方面的其他的东西,接触的人我看还真不是很多,毕竟没有这样的环境。看来你只有慢慢等做过的并且愿意讨论该问题的人了。

[ 本帖最后由 jerrywjl 于 2008-10-25 14:41 编辑 ]
作者: miaoer    时间: 2008-10-25 16:17
原帖由 jerrywjl 于 2008-10-25 14:38 发表



行不行的问题,我觉得还是要靠benchmark来以事实说明;用与不用LVS,毕竟要经过不断调试才能真正说明问题。
既然已经是熟手,我想做这样的工作并不需要花多少时间和精力。
你说对了,除了IPVS方面的其他 ...



Anyway, thank you very much.
作者: gl00ad    时间: 2008-10-25 23:43
标题: 回复 #12 miaoer 的帖子
不过(怪我最开始没说清楚),我的这个服务基本上只有一个客户IP地址,非常特殊。
实际上是这样,我要做两个负载均衡集群。一个做客户端,另一个做服务器端。所以客户端基本上就只有一个IP地址。
不知道我表达清楚没?没说清楚

一个做客户端负载均衡集群 -- why?
另一个做服务器端负载均衡集群
客户端基本上就只有一个IP地址 -- 只有一个IP地址 or 只有一个客户?

我不清楚, I am trying to read your minds ... are you trying to break our minds?
let us say - you use layer 7 switch, what identify an application? port number - you have dynamic ports on both sides, you got give yourself a design graph, share with us if your boss is OK with that.
作者: miaoer    时间: 2008-10-27 12:19
标题: 回复 #13 gl00ad 的帖子
那我来详细解释一下吧:

|--------------|                            |-------------|
|Network A      |                            |Network B     |
|                    |                           |                   |
|                    |                           |                   |
|                    |                           |                   |
|                    |                           |                   |
|  |---------|   |    |-----------|    |  |----------| |
|  |             |  |     |               |    |  |              | |
|  |Server A |------|My Server  |-----|Server B   | |
|  |             |  |     |               |    |  |              | |
|  |---------|   |    |-----------|    |  |----------| |
|                    |                           |                   |
|                    |                           |                   |
|                    |                           |                   |
|--------------|                            |-------------|

拓扑图上
首先,我这个服务器是一个网关,是两个网络A和B之间通信的网关。 所有A网络的用户必须通过Server A 和Network B通信,所有B网络的用户也必须通过Server B 和Network B通信。 因此,对我的服务器My Server 来说性能是必须要考虑的因素,因此我希望做个集群来做load balance。
Server A 与My Server 之间 以及 Server B 与 My Server 之间都是通过TCP 固定端口来协商UDP端口号来进行数据收发。
并且,对于不同的会话,有可能协商出许多的UDP端口号来进行通信。
这样一来对My Server 而言,客户其实就是Server A和Server B.

[ 本帖最后由 miaoer 于 2008-10-27 12:23 编辑 ]
作者: Au_Hank    时间: 2008-10-27 13:04
我觉得你采用HA比采用LOAD BALANCE更好. 个人感觉作为通信中转, 通常服务器的性能不是瓶颈
作者: miaoer    时间: 2008-10-27 13:13
标题: 回复 #15 Au_Hank 的帖子
HA 也需要 LOAD BALANCE 也是需要的,因为在我的服务器上除了做数据的通信中转以外,还要做大量数据的编码/解码,计算量是很大的,如果不做LOAD BALANCE;以后如果用户多了以后,超负载后就无法扩容啊。
作者: kns1024wh    时间: 2008-10-27 21:43
标题: 回复 #1 miaoer 的帖子
首先要是一个服务进程,如果不是就很难处理
作者: gl00ad    时间: 2008-10-28 01:16
标题: 回复 #16 miaoer 的帖子
HA 也需要 LOAD BALANCE 也是需要的

Let us forget (HA 也需要) for a moment, focus on (LOAD BALANCE 也是需要的) using LVS

Server A 与My Server 之间  -- real server vs LVS
Server B 与 My Server 之间 -- real server vs LVS



let us use a similar example, ftp (active and passive) from redhat Document about firewall mark

/etc/vsftpd.conf
pasv_min_port=10000
pasv_max_port=20000
pasv_address=n.n.n.n


You must able to set up a UDP port range for your application, right?
/sbin/iptables -t nat -A POSTROUTING -p tcp -s n.n.n.0/24 --sport 20 -j
MASQUERADE

/sbin/iptables -t mangle -A PREROUTING -p tcp -d n.n.n.n/32 --dport 21 -j MARK
--set-mark 21
/sbin/iptables -t mangle -A PREROUTING -p tcp -d n.n.n.n/32 --dport
10000:20000 -j MARK --set-mark 21


Does it make any sense? anyone, please comment!

[ 本帖最后由 gl00ad 于 2008-10-28 01:19 编辑 ]
作者: Au_Hank    时间: 2008-10-28 06:14
原帖由 gl00ad 于 2008-10-28 01:16 发表

Let us forget (HA 也需要) for a moment, focus on (LOAD BALANCE 也是需要的) using LVS




let us use a similar example, ftp (active and passive) from redhat Document about firewall mark

...


你的意思是让单一端口的TCP控制连接变成多端口的TCP控制连接,然后根据端口号码做LOAD BALANCE?这个主义很不错的样子
作者: coolerfeng    时间: 2008-10-28 09:59
感觉用HAproxy在7层做负载均衡比较好,LVS是4层的,应该是不行的
作者: 双鱼石    时间: 2008-10-28 16:01
guangzhu............
作者: miaoer    时间: 2008-10-28 21:34
标题: 回复 #18 gl00ad 的帖子
我目前碰到的关键问题是:
如何将协商UDP端口的TCP链接与协商出来的UDP通信数据 schedule到相同的RS上去。
作者: miaoer    时间: 2008-10-28 21:38
标题: 回复 #20 coolerfeng 的帖子
请教 coolerfeng 兄弟
HAproxy是个什么软件? 我目前正是在寻找一个稳定以及可扩展的7层负载均衡模块或者软件。

因为还没有找到比较合适的7层交换软件,因此目前我初步打算自己在IPVS上做扩展实现我自己的基于应用的均衡算法。
作者: gl00ad    时间: 2008-10-28 22:53
原帖由 miaoer 于 2008-10-28 21:34 发表
我目前碰到的关键问题是:
如何将协商UDP端口的TCP链接与协商出来的UDP通信数据 schedule到相同的RS上去。

persistence and firewall mark

read document/test to see the theory hold
作者: miaoer    时间: 2008-10-31 10:50
标题: 回复 #24 gl00ad 的帖子
Persistence and firewall mark  are not able to handle this.
The UDP port is negotiated dynamicly and varies all the time.
作者: gl00ad    时间: 2008-11-01 02:29
原帖由 miaoer 于 2008-10-31 10:50 发表
Persistence and firewall mark  are not able to handle this.
The UDP port is negotiated dynamicly and varies all the time.


at least the UDP port has a range like ftp min max port number range 10000-20000

You know your application better than everyone else does, you think LVS cannot, why waste our time asking:
请教我的服务能否通过LVS实现负载均衡集群?
作者: miaoer    时间: 2008-11-03 17:13
标题: 回复 #26 gl00ad 的帖子
I am searching for a stable layer-7 based switch method.
I am here asking for help, just want to know whether there is some one who did this kind of things before. I didn't intend to waste your time.  If you think these questions wasted your time, I am really sorry for that.




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2