vAnA 发表于 2007-3-29 13:47:23

[讨论]关于负载均衡(线路汇聚?)在网吧的应用

这些天炒得很热,去官方WIKI也能查到资料,原理是在建立新连接时随机走某条线路,如果是这样,跟ECMP在应用上碰到的问题一样,部分网游掉线,原因估计是因为某些条件下需要连接验证服务器或者其他类似原因,新的连接走的路线不一样就断了,不知道商业化的朋友们的解决办法,不过设想如果能尽量搜集全网游的端口,走这些端口的连接保证只走一条线,估计可以解决这个问题吧


另,自己随便翻的官方负载均衡做法


Mangle

/ ip address
add address=192.168.0.1/24 network=192.168.0.0 broadcast=192.168.0.255 interface=Local comment="" \
    disabled=no
add address=10.111.0.2/24 network=10.111.0.0 broadcast=10.111.0.255 interface=wlan2 \
    comment="" disabled=no
add address=10.112.0.2/24 network=10.112.0.0 broadcast=10.112.0.255 interface=wlan1 \
    comment="" disabled=no

这个是给网口添加IP,有两块外网网口,一个内网网口


/ ip firewall mangle

add chain=prerouting in-interface=Local connection-state=new nth=1,1,0 \
    action=mark-connection new-connection-mark=odd passthrough=yes comment="" \
    disabled=no


这是重点了,我们把遇到的第二个并且数据包连接标记为新连接的数据包所请求的连接打上标记"odd"(connection-state=new), 然后该会话建立后这条连接就会被标记为 "odd". 然后我们就能在这条连接继续做ROUTING MARK,继续看下面


add chain=prerouting in-interface=Local connection-mark=odd action=mark-routing \
    new-routing-mark=odd passthrough=no comment="" disabled=no

这条规则就会把上面规则进行标记的"odd"的连接进行MARK ROUTING,注意passthrough为NO,数据包的处理到这条规则为止了


add chain=prerouting in-interface=Local connection-state=new nth=1,1,1 \
    action=mark-connection new-connection-mark=even passthrough=yes comment="" \
    disabled=no
add chain=prerouting in-interface=Local connection-mark=even action=mark-routing \
    new-routing-mark=even passthrough=no comment="" disabled=no

同理,两条规则也是做了类似的标记,不同的是匹配的数据包是每遇到的第三个包含新连接标记的数据包

以上的规则使每条新连接都被打上了"odd"或者"even"的标记

NAT

/ ip firewall nat
add chain=srcnat connection-mark=odd action=src-nat to-addresses=10.111.0.2 \
    to-ports=0-65535 comment="" disabled=no
add chain=srcnat connection-mark=even action=src-nat to-addresses=10.112.0.2 \
    to-ports=0-65535 comment="" disabled=no

给不同的线路的连接做不同的NAT规则~~对应上面的标记

Routing

/ ip route
add dst-address=0.0.0.0/0 gateway=10.111.0.1 scope=255 target-scope=10 routing-mark=odd \
    comment="" disabled=no
add dst-address=0.0.0.0/0 gateway=10.112.0.1 scope=255 target-scope=10 routing-mark=even \
    comment="" disabled=no
add dst-address=0.0.0.0/0 gateway=10.112.0.1 scope=255 target-scope=10 comment="" \
    disabled=no comment="gateway for the router itself"

这段就是给两个线路上对应上ROUTING MARK,是标记为ODD的连接就走10.111.0.1,是标记为10.112.0.1的连接就走10.112.0.1,最后添多一个默认的,让没有标记到的连接自己都走那(一般大家都加捏)

收工……

参考在 "http://wiki.mikrotik.com/wiki/Load_Balancing"

vAnA 发表于 2007-3-29 13:49:24

测试过多线程下载软件,确实能达到汇聚的效果,可是保证不了网吧的正常应用的话,无意义啊,讨论一下~~

netlea 发表于 2007-3-29 14:03:47

也许你说对啦“不过设想如果能尽量搜集全网游的端口,走这些端口的连接保证只走一条线,估计可以解决这个问题吧”

我没有真正试过,只不过他们不"开口"!

有时间大家多多试试就知道啦

younger 发表于 2007-3-29 14:04:39

只有个别几个网游有问题。我网吧都用了好几个月了。

ymir 发表于 2007-3-29 14:33:40

vAnA
说对了
当一条线中被占满时切到别的线路一定会掉

下载就看不出来了,因为他有可能会走多条线路


我有个和 “专卖精品”帖子已经说得很清楚了

[ 本帖最后由 ymir 于 2007-3-29 14:40 编辑 ]

loopylf 发表于 2007-3-29 14:51:45

负载均衡,Policy route是可以的,但总的来说线路汇聚(捆绑),是需要isp配合的,

ymir 发表于 2007-3-29 15:08:25

isp配合??哪就不用想了,这种事

vAnA 发表于 2007-3-29 17:17:48

:L 我们只是讨论尽量能做到看起来象线路汇聚的效果,肯定不可能真正汇聚的啊,如果你真的有能力跟ISP配合,估计你也有能力给你私开个100M光纤了,那还来讨论这个有什么意义??
还有,我觉得如果是用几条ADSL做这个功能,得解决好单条ADSL的负载,毕竟电话线不稳定啊,而且受限于上传速率,所以上传速率一定要限死,再按ymir说的,那限制好ADSL的满载就是首要任务了,还有 younger 的经验,只有几个网游有问题那就好办了,需要收集的工作量不大,那么要做的就是控制好单条ADSL的上传和下载速度,可以打上PACKET MARK到QUEUE,然后个别网游端口做好ROUTING MARK,估计应用上就没什么问题了~~哈哈~~两条2M的ADSL下载速度达到400K,真的很诱人啊~~

ymir 发表于 2007-3-29 17:34:28

下载快有什么用,有大量用户同时在线时,不掉线才对

负载均衡是相对的

如果是用连接数均衡,用户要上一些加密的网站就不行了

[ 本帖最后由 ymir 于 2007-3-29 17:40 编辑 ]

vAnA 发表于 2007-3-29 17:48:17

:lol 呵呵,在稳定的前提下换来最大的效能是最终目的呀~~

加密是指https??

younger 发表于 2007-3-29 18:26:14

多WAN口负载平衡不能跟汇聚比
汇聚是1+1=2
负载平衡,不可能完全的平衡,1+1<2
这就是汇聚跟负载平衡的区别
ROS的负载平衡的原理是平均分配连接线程,连接建立后就会固定的走一条线,就算这条线的流量大了也不能切换到别的线上,因为切换会导致断线。
多WAN口负载平衡对网游没有任何作用,只有多线程(如:BT、讯雷等)才发挥作用,网速才会提升。

网吧电影网、传奇、神话、网银等需要使用不同TCP端口多次验证的软件就不能在这种负载平衡方式下正常通讯。需要做特殊处理。
传奇的登陆端口跟游戏端口是两条不同的连接,如果这两条连接的源IP不相同的话就不能正常通讯。以上几种情况必须按源地址做策略

[ 本帖最后由 younger 于 2007-3-29 18:27 编辑 ]

ymir 发表于 2007-3-29 18:26:47

是的

ymir 发表于 2007-3-29 18:32:38

younger

younger 是好人,不像有些人自已都没搞清楚就飞上天了

分析的不错,:victory: :victory: :victory: :victory: :victory: :victory:

[ 本帖最后由 ymir 于 2007-3-29 18:35 编辑 ]

younger 发表于 2007-3-29 18:39:00

这是实践的经验

vAnA 发表于 2007-3-29 22:17:23

:lol 恩,有经验的指导思路就很明晰了~~按源地址做策略我可不可以理解为如果网内某个IP的目标端口为某种特别的应用,则把该IP的所有连接都MARK指定单条线路?如果是这样应该也蛮省事,不用把端口都找出来,有个代表性的端口就OK了~~

在我们南宁,光纤价格是4M起,800元/M,ADSL则只为1XX元/M,并且开大还有优惠,如果利用多条线路“看起来”能有光纤那么快,那成本就低好多啊

[ 本帖最后由 vAnA 于 2007-3-29 22:21 编辑 ]
页: [1] 2 3
查看完整版本: [讨论]关于负载均衡(线路汇聚?)在网吧的应用