试验环境:
OS:Linux 4
Tuxedo:10.3
鉴于Tuxedo卓越的运行效率,并可持续为用户提供服务,本文针对Tuxedo高可用性方面进行分析,力求以实际试验结果来说明Tuxedo各个部件的高可用性实现方式。由于个人水平有限,有结果不一致之处以官方说明为准。
涉及Tuxedo组件:
Tuxedo /WS
Tuxedo MP
Tuxedo多域
高可用性简介
系统的可用性是指系统处于正常可用状态的时间所占的百分比,系统可用性下降通常由两个因素导致:系统失败率和系统恢复时间。有以下两个方法可以衡量系统的可用性:
平均无故障时间(MTBF):是指系统在正常运行状态的平均时间
平均恢复时间(MTTR):是指在系统失败之后,需要多长时间来恢复系统
因此,系统的可用性可定义为:可用性= MTBF /(MTBF + MTTR)
那么提高系统的可用性就可从两方面出发:提高系统的可靠性,并降低系统失败恢复时间
环境简介
本试验所使用的架构示意图如下:
image
从客户端出发,首先连接DOM1域,DOM1域为MP(多机)模式,DOM1域主要用来为用户提供连接池,并从DOM2、DOM3导入同名服务,转发客户端请求,DOM2、DOM3提供实际服务
各组件高可用性分析
客户端:
Tuxedo客户端通过设置WSNADDR并以特定的符号分割,可以实现在客户端进行tpinit()时的failover以及负载均衡,设置方法为:
export WSNADDR=(//192.168.1.50:3333"|"//192.168.1.51:3333),//192.168.1.51:3333,//192.168.1.50:3333
当WSNADDR以“,”分割时,客户端会首先判断第一个地址是否可用,若不可用就按顺序尝试后面的地址;当WSNADDR以“|”分割,客户端会随机使用所分割的地址进行连接建立。当前配置中,正常情况下可以在192.168.1.50;3333以及192.168.1.51:3333之间进行负载均衡,当某个地址无法建立连接时,即进行“,”后面地址尝试。示意图如下:
image
这种方式所实现的高可用性,在于判断是否可完成tpinit()操作,即与WSL建立连接过程,若WSL进程正常,且可正常进行连接建立,则不会发生failover过程。
多机模式:
多机(MP)模式下,可实现多机中各节点之间的负载均衡和容错功能,客户端可任何一个节点建立连接,如果该服务器上没有该客户端所要调用的service,Tuxedo可以自动把请求发送到其它的有该service的机器上处理,并把结果返回到客户端,请求通过BRIDGE进程在这些服务器之间进行传递。当然,这些对客户端是透明的。不仅如此,如果设置了负载均衡(LDBAL=Y),那么Tuxedo将根据它们的负载情况报,将请求发送到负载较小的服务器上。而且还提供软件级别的Cluster功能,如果其中某-台或几台(当然不能是全部)服务器出现故障了,那么正常的机器仍然能够继续运行,如果它们之间的网络连接断了,BRIDGE进程会自动进行重试,并且在这些服务器之间可以配置多个网络连接通路,当其中的一个出现故障时,会自动采用别的连接通路。
image
多网关进程
可在Tuxedo中配置多个网关组,设置域网关进程连接策略为ON_STARTUP或INCOMINGONLY,即可实现failover机制,当某个网关进程失败,均可实现透明地将请求转交给其他可用网关进程处理。示意图如下:
image
图中,当地一个网关进程失败之后,系统会选择其他可用的网关进程去进行连接,并转发客户端请求。
多域failover
若多个域同时提供同名服务,那么可设置网关进程连接策略为“ON_STARTUP”或”INCOMINGONLY“,示意图如下所示:
image
如上图所示,DOM2、DOM3均想DOM1提供了”a“的服务,若DOM2失败,DOM1中的客户端请求会自动转发至DOM3进行处理,保证系统持续运行。同时该方式还可实现多域之间的负载均衡。
多实例
通过ubb配置文件中,配置*SERVER段中对应server的MIN/MAX参数,设定每个进程的实例启动数量,若其中一个server失败,客户端请求可转发至其他可用server进行处理。同时server还可以设置可重启特性,可保证在server实例失败之后,最快将失败的重新实例启动。
案例分析
本案例为当前应用较广的高可用性方案,相关参数配置如下:
DOM1:
ubb配置
*RESOURCES
#IPCKEY <Replace with a valid IPC Key>
#Example:
IPCKEY 123456
DOMAINID dom1
MASTER simple1,simple2
MAXACCESSERS 100
MAXSERVERS 50
MAXSERVICES 100
MODEL MP
LDBAL Y
OPTIONS LAN,MIGRATE
*MACHINES
DEFAULT:
APPDIR="/app/tuxedo/dom1"
TUXCONFIG="/app/tuxedo/dom1/tuxconfig"
TUXDIR="/app/tuxedo/tuxedo10gR3"
MAXWSCLIENTS=10
myvm1 LMID=simple1
APPDIR="/app/tuxedo/dom1"
TUXCONFIG="/app/tuxedo/dom1/tuxconfig"
TUXDIR="/app/tuxedo/tuxedo10gR3"
MAXWSCLIENTS=10
myvm2 LMID=simple2
UID=503
GID=503
#Example:
#beatux LMID=simple
*GROUPS
GROUP1
LMID=simple1 GRPNO=1 OPENINFO=NONE
GROUP2 LMID=simple2 GRPNO=2 OPENINFO=NONE
DMGRP1 LMID=simple1 GRPNO=3 OPENINFO=NONE
GWGRP1 LMID=simple1 GRPNO=5 OPENINFO=NONE
GWGRP2 LMID=simple1 GRPNO=6 OPENINFO=NONE
GWGRP3 LMID=simple2 GRPNO=7 OPENINFO=NONE
GWGRP4 LMID=simple2 GRPNO=8 OPENINFO=NONE
*SERVERS
DEFAULT:
CLOPT="-A"
WSL SRVGRP=GROUP1 SRVID=2
CLOPT="-A — -n //192.168.1.50:3333 -m 2 -M 5 -x 10"
#simpserv SRVGRP=GROUP1 SRVID=1
WSL SRVGRP=GROUP2 SRVID=4
CLOPT="-A — -n //192.168.1.51:3333 -m 2 -M 5 -x 10"
simpserv SRVGRP=GROUP1 SRVID=15
DMADM SRVGRP=DMGRP1 SRVID=5
GWADM SRVGRP=GWGRP1 SRVID=6
GWTDOMAIN SRVGRP=GWGRP1 SRVID=7
GWADM SRVGRP=GWGRP2 SRVID=8
GWTDOMAIN SRVGRP=GWGRP2 SRVID=9
GWADM SRVGRP=GWGRP3 SRVID=10
GWTDOMAIN SRVGRP=GWGRP3 SRVID=11
GWADM SRVGRP=GWGRP4 SRVID=12
GWTDOMAIN SRVGRP=GWGRP4 SRVID=13
*NETWORK
simple1 NADDR="//192.168.1.50:7000"
NLSADDR="//192.168.1.50:7001"
simple2 NADDR="//192.168.1.51:7000"
NLSADDR="//192.168.1.51:7001"
BRIDGE="/dev/tcp"
*SERVICES
域配置:
*DM_LOCAL
"LDOM1" TYPE=TDOMAIN GWGRP="GWGRP1" DOMAINID="LDOM1" CONNECTION_POLICY=ON_STARTUP
"LDOM2" TYPE=TDOMAIN GWGRP="GWGRP2" DOMAINID="LDOM2" CONNECTION_POLICY=ON_STARTUP
"LDOM3" TYPE=TDOMAIN GWGRP="GWGRP3" DOMAINID="LDOM3" CONNECTION_POLICY=ON_STARTUP
"LDOM4" TYPE=TDOMAIN GWGRP="GWGRP4" DOMAINID="LDOM4" CONNECTION_POLICY=ON_STARTUP
*DM_REMOTE
"RDOM1" TYPE=TDOMAIN DOMAINID="RDOM1"
"RDOM2" TYPE=TDOMAIN DOMAINID="RDOM2"
"RDOM3" TYPE=TDOMAIN DOMAINID="RDOM3"
"RDOM4" TYPE=TDOMAIN DOMAINID="RDOM4"
*DM_TDOMAIN
"LDOM1" NWADDR="//192.168.1.50:5555"
"LDOM2" NWADDR="//192.168.1.50:6666"
"LDOM3" NWADDR="//192.168.1.51:5555"
"LDOM4" NWADDR="//192.168.1.51:6666"
"RDOM1" NWADDR="//192.168.1.50:7777"
"RDOM2" NWADDR="//192.168.1.50:8888"
"RDOM3" NWADDR="//192.168.1.51:7777"
"RDOM4" NWADDR="//192.168.1.51:8888"
*DM_EXPORT
*DM_IMPORT
TOUPPER RDOM=RDOM1,RDOM2,RDOM3,RDOM4
TOUPPER RDOM=RDOM2,RDOM3,RDOM4,RDOM1
TOUPPER RDOM=RDOM3,RDOM4,RDOM1,RDOM2
TOUPPER RDOM=RDOM4,RDOM1,RDOM2,RDOM3
DOM2
ubb配置:
*RESOURCES
#IPCKEY <Replace with a valid IPC Key>
#Example:
IPCKEY 123453
DOMAINID dom2
MASTER dom2
MAXACCESSERS 100
MAXSERVERS 50
MAXSERVICES 100
MODEL SHM
LDBAL N
*MACHINES
DEFAULT:
APPDIR="/app/tuxedo/dom2"
TUXCONFIG="/app/tuxedo/dom2/tuxconfig"
TUXDIR="/app/tuxedo/tuxedo10gR3"
#Example:
# APPDIR="/home/me/simpapp"
# TUXCONFIG="/home/me/simpapp/tuxconfig"
# TUXDIR="/usr/tuxedo"
myvm2 LMID=dom2
#Example:
#beatux LMID=simple
*GROUPS
GROUP1
LMID=dom2 GRPNO=1 OPENINFO=NONE
DMGRP LMID=dom2 GRPNO=2 OPENINFO=NONE
GWGRP1 LMID=dom2 GRPNO=3 OPENINFO=NONE
GWGRP2 LMID=dom2 GRPNO=4 OPENINFO=NONE
GWGRP3 LMID=dom2 GRPNO=5 OPENINFO=NONE
*SERVERS
DEFAULT:
CLOPT="-A"
simpserv SRVGRP=GROUP1 SRVID=1 MIN=2 MAX=2
DMADM SRVGRP=DMGRP SRVID=5
GWADM SRVGRP=GWGRP1 SRVID=8
GWTDOMAIN SRVGRP=GWGRP1 SRVID=7
GWADM SRVGRP=GWGRP2 SRVID=10
GWTDOMAIN SRVGRP=GWGRP2 SRVID=9
GWADM SRVGRP=GWGRP3 SRVID=12
GWTDOMAIN SRVGRP=GWGRP3 SRVID=11
*SERVICES
TOUPPER
域配置:
*DM_LOCAL
"RDOM3" TYPE=TDOMAIN GWGRP="GWGRP1" DOMAINID="RDOM3"
"RDOM4" TYPE=TDOMAIN GWGRP="GWGRP2" DOMAINID="RDOM4"
"RDOM6" TYPE=TDOMAIN GWGRP="GWGRP3" DOMAINID="RDOM6"
*DM_REMOTE
"LDOM1" TYPE=TDOMAIN DOMAINID="LDOM1"
"LDOM2" TYPE=TDOMAIN DOMAINID="LDOM2"
"LDOM3" TYPE=TDOMAIN DOMAINID="LDOM3"
"LDOM4" TYPE=TDOMAIN DOMAINID="LDOM4"
*DM_TDOMAIN
"LDOM1" NWADDR="//192.168.1.50:5555"
"LDOM2" NWADDR="//192.168.1.50:6666"
"RDOM3" NWADDR="//192.168.1.51:7777"
"RDOM4" NWADDR="//192.168.1.51:8888"
"LDOM3" NWADDR="//192.168.1.51:5555"
"LDOM4" NWADDR="//192.168.1.51:6666"
"*DM_EXPORT
*DM_IMPORT
DOM3:
ubb配置:
*RESOURCES
#IPCKEY <Replace with a valid IPC Key>
#Example:
IPCKEY 123451
DOMAINID dom3
MASTER dom3
MAXACCESSERS 100
MAXSERVERS 50
MAXSERVICES 100
MODEL SHM
LDBAL N
*MACHINES
DEFAULT:
APPDIR="/app/tuxedo/dom3"
TUXCONFIG="/app/tuxedo/dom3/tuxconfig"
TUXDIR="/app/tuxedo/tuxedo10gR3"
#Example:
# APPDIR="/home/me/simpapp"
# TUXCONFIG="/home/me/simpapp/tuxconfig"
# TUXDIR="/usr/tuxedo"
myvm1 LMID=dom3
#Example:
#beatux LMID=simple
*GROUPS
GROUP1
LMID=dom3 GRPNO=1 OPENINFO=NONE
DMGRP LMID=dom3 GRPNO=2 OPENINFO=NONE
GWGRP1 LMID=dom3 GRPNO=3 OPENINFO=NONE
GWGRP2 LMID=dom3 GRPNO=4 OPENINFO=NONE
GWGRP3 LMID=dom3 GRPNO=5 OPENINFO=NONE
*SERVERS
DEFAULT:
CLOPT="-A"
simpserv SRVGRP=GROUP1 SRVID=1 MIN=2 MAX=2
DMADM SRVGRP=DMGRP SRVID=5
GWADM SRVGRP=GWGRP1 SRVID=8
GWTDOMAIN SRVGRP=GWGRP1 SRVID=7
GWADM SRVGRP=GWGRP2 SRVID=10
GWTDOMAIN SRVGRP=GWGRP2 SRVID=9
GWADM SRVGRP=GWGRP3 SRVID=11
GWTDOMAIN SRVGRP=GWGRP3 SRVID=12
*SERVICES
TOUPPER
域配置:
*DM_LOCAL
"RDOM1" TYPE=TDOMAIN GWGRP="GWGRP1" DOMAINID="RDOM1"
"RDOM2" TYPE=TDOMAIN GWGRP="GWGRP2" DOMAINID="RDOM2"
*DM_REMOTE
"LDOM1" TYPE=TDOMAIN DOMAINID="LDOM1"
"LDOM2" TYPE=TDOMAIN DOMAINID="LDOM2"
"LDOM3" TYPE=TDOMAIN DOMAINID="LDOM3"
"LDOM4" TYPE=TDOMAIN DOMAINID="LDOM4"
*DM_TDOMAIN
"LDOM1" NWADDR="//192.168.1.50:5555"
"LDOM2" NWADDR="//192.168.1.50:6666"
"LDOM3" NWADDR="//192.168.1.51:5555"
"LDOM4" NWADDR="//192.168.1.51:6666"
"RDOM1" NWADDR="//192.168.1.50:7777"
"RDOM2" NWADDR="//192.168.1.50:8888"
"RDOM5" NWADDR="//192.168.1.50:9999"
*DM_EXPORT
*DM_IMPORT
TOUPPER
该模式可在如下情况下持续工作:
客户端与DOM1中任意一个节点网络失败
DOM1中单个节点WSL失败
DOM1所有节点中最多3个网关进程失败
DOM2、DOM3任意三个网关进程失败
DOM1中任意一个节点失败
DOM2、DOM3其中一个域失败
其中需要注意的是,在故障发生时刻,由于公告板中未来得及清理注册信息,可能会导致某些请求调用失败。
--转自