免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 10279 | 回复: 6
打印 上一主题 下一主题

关于Haproxy tcp模式的多域名识别问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-03-05 14:29 |只看该作者 |倒序浏览
咨询各位一个问题,现在有一个需求,就是通过判断不同的域名,指向到后端不同的服务器的相应端口,基于tcp的 而非http的。(2个域名a记录已指向haproxy服务器)

想让端口复用,比如图中监听8778端口,然后通过不同于的域名进行识别,然后判断发给后端的哪台服务器。不知道haproxy是否可以实现,试验了几次都没有效果。通过tcpdump抓不到从后端返回的包。
如果haproxy无法实现 哪款负载均衡程序能够完成这个需求。

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
2 [报告]
发表于 2014-03-05 14:39 |只看该作者
tcp是4层的实现, haproxy 怎么知道你访问的哪个域名? 难道它还要把7层的包解开, 你又不是HTTP, 它知道怎么解么?

论坛徽章:
0
3 [报告]
发表于 2014-03-05 16:23 |只看该作者
对呀,所以不清楚如何实现,如果域名识别这块用mode http,下面后端判断使用mode tcp会报错。所以寻求一个解决办法。
回复 2# q1208c


   

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
4 [报告]
发表于 2014-03-05 16:32 |只看该作者
回复 3# izzy_sec

我觉得你的需求可能实现不了.
没听说有人先查看7层的内容, 再用 4层的方式来转发的.
因为4层转发的目的是为了快. 如果已经解析了7层的数据, 为啥不直接用7层的转发呢? 反正已经解开了.
   

论坛徽章:
0
5 [报告]
发表于 2014-03-05 18:35 |只看该作者
我的需求其实是这样子的,一台haproxy作为负载均衡,假设主要为2个游戏做负载,后端2款游戏的登陆验证端口都是8888,那么负载均衡上面就需要用到8888这个端口的复用,因为要
提供后后端2个不同的游戏相同端口进行转发,一般来说haproxy只会监听一个端口,然后根据轮询、权重等一系列设置进行负载均衡,但是,想通过一种方式来识别来自相同端口的访问发给不同后端服务器,能想到最好的识别方法就是域名,game.aaa.com:8888 发给后端1.1.1.1 game.bbb.com发给2.2.2.2,监听的端口不变。
回复 4# q1208c


   

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
6 [报告]
发表于 2014-03-05 18:56 |只看该作者
回复 5# izzy_sec

你想错了.

在 http 请求中, domain_name 是 request 的一部分, 所以, 只要能够解析 http 请求, 自然会知道你请求的是哪个域名, web server 和 7层的 load balance 都是一样的方式来处理的. 所以, 才有了虚拟主机的的概念.

但是, 在一般的 tcp 请求中, 根本没有 domain name, 只是在请求之前, 会发起一个 dns 解析, 把要访问的 domain name 解析成 真正的IP地址. 然后, 向这个 IP地址去 建立相应的 tcp 连接, 再发起相应的请求. 也就是说, 除非你的 7层数据包里有domain name 这一项, 否则, 整个 tcp 连接中, 没人知道 domain name是啥, 只知道端口和IP.

所以, 如果你能确定你的请求中带有domain name, 并且, 它是可以被解析出来的. 或许可以用插件的方式来支持你这一需求. 如果你的数据包里没有 domain name, 那估计你只能另想办法了.
   

论坛徽章:
0
7 [报告]
发表于 2014-03-10 14:08 |只看该作者
谢谢分享!学习了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP