【iPro案例分享】利用iPro实现中间件Tuxedo的负载均衡
  

江威 3503

{{ttag.title}}
1、Tuxedo服务机制
       Tuxedo服务是一种CS应用。其机制类似被动模式的FTP服务。Tuxedo服务会产生两个TCP连接:一个称为WSL连接,是服务固定的监听控制连接;另一个是WSH连接,是真正调用服务的连接。
WSL连接固定监听一个配置好的端口,并且配置好后续WSH连接的端口范围。
例:WSL CLOPT="-A -- -n //1.1.1.1:6789 -p 10000 -P 11000 ..."
在这个WSL连接的配置中,WSL监听在本地网卡IP为1.1.1.1的6789端口上,WSH的端口范围为10000-11000。下图为一个client调用Tuxedo服务的连接图。
        首先,client产生WSL连接,去请求服务。Tuxedo服务器收到请求后,会指定client去连接另一个端口完成真正的服务调用,也就是WSH连接。WSH是有server指定的,而且IP和Port是写在WSL连接的TCP Data中。然后,client去建立WSH连接完成整个请求。
        以上图为例,WSL连接为1.1.1.1:6789;WSH连接为1.1.1.1:10001。
2、Tuxedo负载均衡
        基于Tuxedo的服务机制,采用AD给Tuxedo服务器做负载均衡时,基本有两类方案:
       1) 源地址会话保持方案
       因为WSH连接是由WSL决定。所以,AD要保证WSH连接被分发到正确的服务器上。这正好符合源地址会话保持的机制。因此,使用源地址会话保持可以保证服务的正常。
源地址会话保持是指AD在作负载均衡时是根据访问请求的客户端源地址作为判断关连会话的依据。对来自同一IP地址的所有访问请求在一定时间内都会被保持到一台服务器上去。这个时间可以调整,一般设置为稍大于应用的session timeout时间。这样同一个客户发出的WSL和WSH连接在一定时间内都会被转发到同一台服务器上。
而如果客户发出的前后两个连接间隔大于AD上设置的超时值,AD将会将新来的连接认为是新的会话然后进行负载平衡。
       基于原地址的会话保持实现起来简单,只需要根据数据包三、四层的信息就可以实现,效率也比较高。存在的问题就在于当多个客户是通过代理或地址转换的方式来访问服务器时,由于都分配到同一台服务器上,会导致服务器之间的负载严重失衡。另外一种情况上客户机数量很少,但每个客户机都会产生多个并发访问,对这些必发访问也要求通过负均均衡器分配到多个服器上,这时基于客户端源地址的会话保持方法也会导致负载均衡失效。
优点:配置简单,无需应用服务器作任何修改。
缺点:因为源地址会话保持有可能导致压力不是非常平均。

       2) iPro方案
       如果不使用源地址会话保持,那么需要Tuxedo服务器配置不同的WSH端口范围。AD通过iPro识别WSH端口来正确分发WSH连接。
例如,两台Tuxedo服务器,服务器1的WSH端口范围配置为10000-10499;服务器2的WSH端口范围配置为10500-10999。
这样,在AD上建立两个vs,一个WSL的vs,一个WSH的vs。在WSL的pool中使用Least Connection(Node)算法,可以将WSL连接分发到总连接数(主要是WSH连接)最少的服务器上,从而使服务器压力尽可能平均。
在WSH的vs上使用下面的iPro,可以保证WSH连接的正确分发。
  1. <font face="微软雅黑">event CLIENT_ACCEPTED {
  2.     if  (TCP.localport() >=10000 and TCP.localport() < 10499 ) then
  3.         pool("WSH_1_pool")
  4.     elseif (TCP.localport() >=10500 and TCP.localport() < 11000 ) then
  5.         pool("WSH_2_pool")
  6.     else
  7.         TCP.drop()
  8.     end
  9. }</font>
复制代码

优点:压力平均。
缺点:需要Tuxedo服务器端更改配置配合。
3、修改WSL连接配置
        因为AD在做负载均衡时,需要做IP地址转换,这点类似防火墙。这样就产生一个问题:WSH连接无法正常建立。为什么会这样?
        在第一部分,已经介绍过Tuxedo服务的机制。因为,WSH连接是在WSL连接中Data中直接指定IP和Port给client。这个IP通常的Tuxedo服务器本地IP。这样,client会试图直接去连接服务器的真实IP去建立WSH连接。通常位于AD后的服务器IP都是无法直连的,这样连接自然无法建立。
        所以,需要修改WSL连接配置,让WSL告诉client建立WSH连接的ip是防火墙做NAT后的地址,在本文档中则是AD的VIP。
        修改方案很简单如下:
WSL CLOPT="-A -- -n //1.1.1.1:6789  -H //VIP:VPort  -p 10000 -P 11000 ..."
增加一个-H的参数,则WSL会告诉client应该用什么IP去建立WSH连接。
具体文档,可参考BEA网站上的官方文档,文章ID为2009,关键字为防火墙,Tuxedo。

打赏鼓励作者,期待更多好文!

打赏
暂无人打赏

我的名字叫小屁孩 发表于 2017-9-24 13:36
  

Friday hooray! +11 S豆

顶顶顶顶顶顶顶顶顶顶
发表新帖
热门标签
全部标签>
每日一问
功能体验
技术盲盒
技术笔记
新版本体验
2023技术争霸赛专题
技术咨询
干货满满
标准化排查
产品连连看
GIF动图学习
安装部署配置
信服课堂视频
秒懂零信任
自助服务平台操作指引
技术晨报
深信服技术支持平台
答题自测
答题榜单公布
卧龙计划
通用技术
畅聊IT
云计算知识
排障笔记本
安全攻防
社区帮助指南
专家问答
技术圆桌
在线直播
MVP
网络基础知识
升级
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
运维工具
用户认证
原创分享
解决方案
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
SDP百科
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
加速技术
产品预警公告
玩转零信任
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
纪元平台
华北区拉练
天逸直播
以战代练
文档捉虫活动
山东区技术晨报
齐鲁TV
华北区交付直播
每周精选

本版达人

新手61940...

本周建议达人

zhao_HN

本周分享达人

ZSFKF

本周提问达人