找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 8910|回复: 26

[其它] 透明代理下的负载均衡

  [复制链接]
发表于 2010-8-24 19:40:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
各位同仁大家好.
--------------------------------------------先交待背景------------------------------------------------------------
我经营的公司网络(利比亚,北非),外网接入速度慢,质量差(WIMAX,一种城域无线接入技术).公司要求高,有两千多员工,分三个部分,总公司,十四个分公司和监理.需要用到的ros功能有按IP限速,防火墙,Hotspot认证,Webproxy透明代理,多线(四线以上)负载均衡等.

目前三个部分,每个部门两台ROS,其中一台做hotspot认证,队列限速和防火墙,第二层ROS做NTH负载均衡和透明代理.这里使用两个ROS的原因是,队列限速hotspot等功能可能会影响到负载均衡.于是干脆用两台ROS,其中第一层使用ROS2.9.27,第二层使用ROS3.22.

-------------------------------------------------------问题--------------------------------------------------------
在具体使用的时候发现,webproxy也会影响到负载均衡.因为NTH负载会标记每一个跟ROS新建立的连接.并且选择路由,但是透明代理功能里需要把所有80端口的连接重定向到ROS,再通过ROS建立与网站的连接,这样先前被标记的连接就失效了,而访问网页的数据则从ROS内部发出,并随机选择网关.我现在是四线均衡,这样就造成了有时候其中的一条线被挤得满满的,而其它三条线却是空的.同事上网的时候会时快时慢,如果撞到了空的那条线,速度就快,如果撞到了挤的那条,可能根本无法打开网页,我也不清楚为什么总是第三条线很挤.
----------------------------------------------目前有待测试的解决办法---------------------------------------------------------
前面说到透明代理会把forward裢变成output裢,于是就想办法把ROS内部发现的连接也打上标记,并让这些连接均衡地选择四个网关,而不是随机的.以下是代码:
/ip firewall mangle
下面这一部分是NTH负载均衡,大家都知道的.
*************************************************************************
add action=mark-connection chain=prerouting comment=1nth connection-state=new \
    disabled=no in-interface=lan new-connection-mark=1 nth=4,1 passthrough=\
    yes protocol=tcp
add action=mark-routing chain=prerouting comment="" connection-mark=1 \
    disabled=no in-interface=lan new-routing-mark=1nth passthrough=yes
add action=mark-connection chain=prerouting comment=2nth connection-state=new \
    disabled=no in-interface=lan new-connection-mark=2 nth=4,2 passthrough=\
    yes protocol=tcp
add action=mark-routing chain=prerouting comment="" connection-mark=2 \
    disabled=no in-interface=lan new-routing-mark=2nth passthrough=yes
add action=mark-connection chain=prerouting comment=3nth connection-state=new \
    disabled=no in-interface=lan new-connection-mark=3 nth=4,3 passthrough=\
    yes protocol=tcp
add action=mark-routing chain=prerouting comment="" connection-mark=3 \
    disabled=no in-interface=lan new-routing-mark=3nth passthrough=yes
add action=mark-connection chain=prerouting comment=4nth connection-state=new \
    disabled=no in-interface=lan new-connection-mark=4 nth=4,4 passthrough=\
    yes protocol=tcp
add action=mark-routing chain=prerouting comment="" connection-mark=4 \
    disabled=no in-interface=lan new-routing-mark=4nth passthrough=yes
*********************************************************************
下面这一部分是对output裢作标记.
*********************************************************************
首先选择output裢,因为从ROS到内网数据也在output裢之内,所以在dst-address里面加上一个条件就是不标记发向内网的数据.然后这里使用了Random均衡的方法,因为是四条线,第一条填25%,第二条填33%,第三条填50%,第四条不填,这个是在"我非黑客"的帖子"Random负载均衡里百分比的填法里学到的",在此感谢您的分享.其它的都跟NTH差不多.
add action=mark-connection chain=output comment=Output connection-state=new \
    disabled=no dst-address=!62.192.148.102 dst-port=80 new-connection-mark=1 \
    passthrough=yes protocol=tcp random=25
add action=mark-routing chain=output comment="" connection-mark=1 disabled=no \
    dst-address=!62.192.148.102 new-routing-mark=1nth passthrough=no \
    protocol=tcp
add action=mark-connection chain=output comment="" connection-state=new \
    disabled=no dst-address=!62.192.148.102 dst-port=80 new-connection-mark=2 \
    passthrough=yes protocol=tcp random=33
add action=mark-routing chain=output comment="" connection-mark=2 disabled=no \
    dst-address=!62.192.148.102 new-routing-mark=2nth passthrough=no \
    protocol=tcp
add action=mark-connection chain=output comment="" connection-state=new \
    disabled=no dst-address=!62.192.148.102 dst-port=80 new-connection-mark=3 \
    passthrough=yes protocol=tcp random=50
add action=mark-routing chain=output comment="" connection-mark=3 disabled=no \
    dst-address=!62.192.148.102 new-routing-mark=3nth passthrough=no \
    protocol=tcp
add action=mark-connection chain=output comment="" connection-state=new \
    disabled=no dst-address=!62.192.148.102 dst-port=80 new-connection-mark=4 \
    passthrough=yes protocol=tcp
add action=mark-routing chain=output comment="" connection-mark=4 disabled=no \
    dst-address=!62.192.148.102 new-routing-mark=4nth passthrough=no \
    protocol=tcp
*********************************************************************
做完上面的工作后,在connection里查看,以前从ROS内发出的连接都没有标记的,现在也有标记了,而且数量比较均衡.
具体的实用效果还待下午测试.
在这里发出这个办法,是希望向同仁们交流学习,望大家能指出有哪些不足和不对的地方,或者有哪些办法能更好地解决ROS内部发出的数据不能均衡的问题.望大家多多指教.谢谢.
routeros
发表于 2010-8-24 19:49:32 | 显示全部楼层
多谢~很好的资料
routeros
回复

使用道具 举报

发表于 2010-8-24 20:40:44 | 显示全部楼层
什么来的
routeros
回复

使用道具 举报

 楼主| 发表于 2010-8-24 20:58:18 | 显示全部楼层
回复 3# WGHBOY


    谢谢WGHBOY 大哥也来排场,在此想向您请教一下,ROS里面到底哪些连接是NEW连接呢?我知道NTH里面的NEW连接,但是如果是从ROS内部建立的连接呢?特别是像透明代理里面,访问网站的连接被重定向到了ROS.然后再从ROS发向外网,那么这里面有没有NEW连接存在呢?而NEW连接又是从什么时候开始的呢?谢谢大哥指教.
routeros
回复

使用道具 举报

发表于 2010-8-24 21:30:07 | 显示全部楼层
多少线的NTH也可以在IP>FIR>NAT里做webproxy端口就OK了,还分什么NEW连接?
routeros
回复

使用道具 举报

 楼主| 发表于 2010-8-24 22:32:03 | 显示全部楼层
回复 5# jia_ok


    在NAT里做完webproxy之后,访问网页的数据就相当于是多网关方式随机负载了.会出现有的线路太拥挤,而有些线路空闲的情况.
routeros
回复

使用道具 举报

发表于 2010-8-24 22:51:50 | 显示全部楼层
你自己看看有没有帮助,, 11.jpg 12.jpg
routeros
回复

使用道具 举报

 楼主| 发表于 2010-8-24 23:17:43 | 显示全部楼层
回复 7# jia_ok


    jia_ok 大哥,那几张图没怎么看明白,可能我太笨,非常感谢你的帮助. 不知能否看看你的脚本?这个问题缠绕了我很久了,做梦都想把它解决掉.呵呵.非常感谢!
routeros
回复

使用道具 举报

 楼主| 发表于 2010-8-24 23:34:04 | 显示全部楼层
在教程里看到,NEW状态就是表示正在建立新TCP连接的数据包.  而透明代理功能,所有的数据都会转向ROS,ROS再建立与外网的连接,然后再返回给用户,这样说来,ROS代理里的每一条向外请求的连接都是NEW状态
routeros
回复

使用道具 举报

发表于 2010-8-24 23:44:48 | 显示全部楼层
你做NTH时要把passthrough=yes
下面是标记你全部数据(一定要排放在你的NTH的下面)
/ip firewall mangle
add action=mark-connection chain=prerouting comment=ALL disabled=no \
    new-connection-mark=WEB passthrough=yes
add action=mark-routing chain=prerouting comment="" connection-mark=WEB disabled=no new-routing-mark=WEB passthrough=yes
下面是NAT
/ip firewall nat
add action=src-nat chain=srcnat comment="" connection-mark=WEB disabled=no protocol=tcp src-address=123.123.123.123 to-ports=8080
routeros
回复

使用道具 举报

 楼主| 发表于 2010-8-25 00:20:31 | 显示全部楼层
本帖最后由 flint60 于 2010-8-25 00:23 编辑

回复 10# jia_ok

Flags: X - disabled, I - invalid, D - dynamic
0   chain=srcnat action=masquerade

这一句是透明代理重定向的.
1  chain=dstnat action=dst-nat to-addresses=62.192.148.101 to-ports=8080
     protocol=tcp src-address=62.192.148.100/30 in-interface=lan dst-port=80

这是我的NAT下面的语句.   这个ROS本身同时应用了NTH负载和透明WEB代理功能.
routeros
回复

使用道具 举报

发表于 2010-8-25 01:25:14 | 显示全部楼层
。。。好像 敝人 有发 代理 均衡贴
routeros
回复

使用道具 举报

 楼主| 发表于 2010-8-25 04:13:57 | 显示全部楼层
回复 12# 47771885


    前辈,不好意思,我不知道有人已经发过了,能否告诉我一下你的贴子地址?强烈渴望学习.因为这些东西都是我自己想当然的做法.并没有多少技术根据和实践证明.望前辈指教.非常感谢!
routeros
回复

使用道具 举报

 楼主| 发表于 2010-8-25 04:30:24 | 显示全部楼层
回复 12# 47771885


    47771885 前辈,通过你的发贴记录,我找到了你发的那贴,帖子地址:http://bbs.routerclub.com/viewthread.php?tid=44290&highlight=

原因你在很早以前就想到了,不过我也感到很高兴,毕竟靠自己的努力和尝试,想到了这样的方法,也是一种成就感.看前辈的这篇帖子上说:有时候有人需求这样的,我就是真正实实需求这样的,不过还好,我这里不需要提供网络游戏服务,关于有的游戏用80端口的问题我也不必担心.

还有不知道您对这个方法的可行性感觉怎么样.不知道有没有测试过,我现在一条线的ROS代理正在试用,如果效果可以,准备马上复制到另外两台ROS上.再次谢谢您的关注,让我找到了一个人可以证实我的做法.谢谢!
routeros
回复

使用道具 举报

发表于 2010-8-25 09:23:23 | 显示全部楼层
1
routeros
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|软路由 ( 渝ICP备15001194号-1|渝公网安备 50011602500124号 )

GMT+8, 2024-5-30 02:40 , Processed in 0.100670 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表