2013年8月17日星期六

取代haproxy 的简单的tcproxy

        db 的服务要迁移,原本也是用haproxy 来做mysql 的代理跨机房的业务过渡。由于,也不知道为什么,负责网络
(在外地)同仁把haproxy 给过滤掉了,mysql 客户端测试连接的时候直接给断开了,很明显是 tcp 以上的协议阻挡,
我都反馈的很清楚了。最可气的是我找中间人去理论,说的很清楚 telnet 端口号是没有问题的,但那哥们死心眼的让我
确认一下tracertoute 是不是正常(一个三层telnet 都是通的,还较真的让我看网络是不是通的,后面我也无奈的贴了,
都是通滴,真想跟他说下让他看看计算机网络 OSI 模型)。
telnet 返回的信息(这不明白的是提示输入密码么):

Escape character is '^]'.
N
5.5.23-log8a7A737Y<] ? uF:2,%t9_R\Xmysql_native_password

使用haproxy 后的客户端访问提示信息:
Unable to connect to remote host: Connection refused

        最后中间同事也烦了,说自己的事自己搞定吧。无奈啊,google 之,发现了这个 tcproxy:
https://github.com/dccmx/tcproxy

sample usagetcproxy "11212 -> 11211"
tcproxy "192.168.0.1:11212 -> 192.168.0.2:11211"

not implemented yettcproxy "any:11212 -> rr{192.168.0.100:11211 192.168.0.101:11211 192.168.0.102:11211}"
tcproxy "any:11212 -> hash{192.168.0.100:11211 192.168.0.101:11211 192.168.0.102:11211}"

这种规则就只是一条命令的事,我也不用什么hash 来做,当然你的需求必须同样的简单。
这种应该是直接走tcp ,没有封包(估计haproxy 就是由于封包的header 才被拦截),顺利的跑了一个月,没出问题。

总结: 万不得已,还是自己找路。

2 条评论:

Edgar 说...

不明白,“在网络上把haproxy 给过滤掉”,这是指什么,非得换成tcproxy才行

Unknown 说...

网络为了安全,会禁止一些特定的工具反向连接到服务器内部端口。haproxy 会有一个header,类似于浏览器的 user-agent,防火墙工具根据这些规则来设定。

发表评论