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连接的正确分发。
- <font face="微软雅黑">event CLIENT_ACCEPTED {
- if (TCP.localport() >=10000 and TCP.localport() < 10499 ) then
- pool("WSH_1_pool")
- elseif (TCP.localport() >=10500 and TCP.localport() < 11000 ) then
- pool("WSH_2_pool")
- else
- TCP.drop()
- end
- }</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。