Tuxedo服务无法启动的问题解决(涉及MP下tlisten和TLOG的报错)

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

转载声明:转载请注明出处,本技术博客是本人原创文章

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> Tuxedo服务无法启动的问题解决(涉及MP下tlisten和TLOG的报错)

今天同事说有一个Tuxedo应用在做测试,但重启了机器和Tuxedo环境后,服务仍无法启动,这次的问题排查和处理比较典型,值得梳理一次。

应用环境: 
OS:SunOS 5.9 
Tuxedo:9.1,MP双机环境

问题现象: 
由于服务不可用,之前有同事使用kill干掉了一些Tuxedo进程,但无法确定具体范围。重启了服务器和Tuxedo环境,问题依旧。

知识背景: 
简单介绍下Tuxedo MP:

多机(MP)模式的配置  一个TUXEDO应用系统可以部署在多台服务器上,这些服务器通过网络连接,这种部署方式称为MP方式,在这些服务器中要选择一台服务器做MASTER服务器,在该服务器上有一个DBBL进程,负责整个TUXEDO应用系统的管理工作。在每台服务器上都有一个BBL进程,它与DBBL进程进行通信,管理各自服务器上的配置。每台服务器上还有一个名为BRIDGE的进程和一个名为TLISTEN的进程,他们负责服务器之间的通讯。

在一个MP方式的TUXEDO应用系统中,不同的服务器之间通过BRIDGE进程进行通讯,该BRIDGE的侦听IP地址及端口在NADDR中指定。在TUXEDO系统启动前,不同服务器之间的通讯是通过tlisten进程来进行的,因为这时还没有BRIDGE进程。NLSADDR为tlisten进程侦听的IP地址及端口。

在一个MP方式的TUXEDO应用系统中,不同的服务器之间通过BRIDGE进程进行通讯,该BRIDGE的侦听IP地址及端口在NADDR中指定。在TUXEDO系统启动前,不同服务器之间的通讯是通过tlisten进程来进行的,因为这时还没有BRIDGE进程。NLSADDR为tlisten进程侦听的IP地址及端口。

问题解决: 
1.尝试重启Tuxedo服务


tmshutdown -y
tmboot -y

回显报错:


exec BBL -A :
        on xx1 - Failed.  tmboot: WARN: No BBL available on site xx1.         Will not attempt to boot server processes on that site.   tmboot: WARN: internal error: CMDTUX_CAT:798: ERROR: Cannot boot remote BBL(xx2), no BRIDGE available on DBBLs node(xx1)   Booting server processes ...   tmboot: WARN: No BBL available on site xx2.         Will not attempt to boot server processes on that site.0 processes started.

从ULOG看第一批错误信息是:


152832.v490f3-tux!tmboot.24746.1.-2: 10-09-2016: Tuxedo Version 9.1, 32-bit
152832.v490f3-tux!tmboot.24746.1.-2: CMDTUX_CAT:1578: ERROR: Could not contact NLS on xx1
152832.v490f3-tux!tmboot.24746.1.-2: CMDTUX_CAT:1576: ERROR: No NLS available for remote machine xx1

这个错误的信息: 
Tuxedo服务无法启动的问题解决(涉及MP下tlisten和TLOG的报错)

说明无法使用tlisten进程和远程节点通信。 
建议是使用TUXCONFIG中NLSADDR值启动远程节点的tlisten进程。

查看ubb配置:


*NETWORK
"XX1"         NADDR="//x.x.x.x:23456"          NLSADDR="//x.x.x.x:12345" 
"XX2"         NADDR="//x.x.x.x:23456"          NLSADDR="//x.x.x.x:12345" 

启动tlisten进程:


$TUXDIR/bin/tlisten -l //x.x.x.x:12345

然后可以验证:


ps -ef|grep tl XX  5310     1  0 09:21:02 ?        0:00 ./tlisten -l //x.x.x.x:12345

2.此时重启Tuxedo环境,依旧无法启动任何节点的服务,查看ULOG,出现了新的报错:


093320.v490f3-tux!tlisten.5310.1.-2: CMDTUX_CAT:4209: INFO: Accepted request from //10.6.157.43:32816, seq # 3
093322.v490f3-tux!DBBL.3262.1.0: CMDTUX_CAT:4350: INFO: BBL started on xx1 - Release 9000
093322.v490f3-tux!BBL.5363.1.0: 10-10-2016: Tuxedo Version 9.1, 32-bit, Patch Level 119
093322.v490f3-tux!BBL.5363.1.0: LIBTUX_CAT:296: ERROR: _tlog_open: _gp_tblopen: VTOC not initialized
093322.v490f3-tux!BBL.5363.1.0: LIBTUX_CAT:319: ERROR: Log start cannot open tlog

查看错误信息: 
Tuxedo服务无法启动的问题解决(涉及MP下tlisten和TLOG的报错)

Tuxedo服务无法启动的问题解决(涉及MP下tlisten和TLOG的报错) 问题矛头基本指向了TLOG路径是否正确,是否有权限。查看了TLOG路径,文件存在。为了简便起见,直接重建TLOG。

查看ubb配置:


*MACHINES"XX"    LMID="xx"          ...         TLOGDEVICE="/opt/app/tuxapp/tuxxx/log/TLOG"          TLOGNAME="TLOG"         TLOGSIZE=200

TLOG文件记录事务处理流程以便在错误发生时回滚事务操作,必须为参与事务处理的每台机器创建一个TLOG文件。创建TLOG时先进入tmadmin界面,用crdl命令创建设备文件,命令格式:


crdl –b blocks –z config -b blocks 为设备文件的大小,以块(block)为单位
-z config 为设备文件名,应和配置文件中TLOGDEVICE相同TER节点上执行:

然后执行crlog命令创建TLOG, 命令格式为:


crlog –m machine为机器名

MASTER节点上执行:


100150.v490f6-tux!tmadmin.5928.1.-2: 10-10-2016: Tuxedo Version 9.1, 32-bit
100150.v490f6-tux!tmadmin.5928.1.-2: LIBTUX_CAT:334: ERROR: No BBL
100150.v490f6-tux!tmadmin.5928.1.-2: LIBTUX_CAT:334: ERROR: No BBL

查看TLOG生成时间已经是最新的了。

3.重启Tuxedo环境,MASTER节点服务基本正常了,但SLAVE节点的ULOG报错:

MASTER节点的ULOG报错:


092218.v490f3-tux!tmboot.5315.1.-2: WARN: internal error: CMDTUX_CAT:798: ERROR: Cannot boot remote BBL(xx2), no BRIDGE available on DBBLs node(xx1)
092218.v490f3-tux!tmboot.5315.1.-2: WARN: No BBL available on site xx2.         Will not attempt to boot server processes on that site.

tmboot -y指令回显报错:


exec BBL -A :
        on xx2 - Failed.  tmboot: WARN: No BBL available on site xx2.         Will not attempt to boot server processes on that site.

说明SLAVE的BBL进程启动失败。 
再看下SLAVE的TLOG产生时间还是旧的,且为空,说明可能和这个文件有关。

但SLAVE节点无法使用tmadmin登录执行TLOG创建:


TMADMIN_CAT:196: ERROR: The boot mode is only available on the MASTER processor.

此时学了一招,就是使用Tuxedo提供的示例脚本来辅助创建TLOG,


cd $TUXDIR/samples/atmi/bankapp  vi crtlog.sh
#(c) 2003 BEA Systems, Inc. All Rights Reserved.
#Copyright (c) 1990 Unix System Laboratories, Inc.
#All rights reserved
#ident  "@(#) samples/atmi/bankapp/crtlog.sh    $Revision: 1.5 $"

if [ "${1}" = "-m" ] ; then
#
# If -m specified, create device and TLOG
#

tmadmin -!                
    echo     crdl -b 500 -z ${TLOGDEVICE}     crlog -m SITE1     q     !
elif [ -z "${1}" ] ; then
#
# If -m not specified, create device only
#
tmadmin -c -!                
    echo     crdl -b 500 -z ${TLOGDEVICE}     q !else
# If other things specified, error#     echo "$0:  usage:  $0 [-m]"     exit 2
fi
if [ ${?} -eq 0 ] ; then     echo "`basename ${0}` successful."     exit 0
fi

只需要将${TLOGDEVICE}换为ubb中对应值,SITE1换为xx2,然后执行:


sh crtlog.sh   tmadmin - Copyright (c) 1996-1999 BEA Systems, Inc.
Portions * Copyright 1986-1997 RSA Data Security, Inc.
All Rights Reserved.
Distributed under license by BEA Systems, Inc.
Tuxedo is a registered trademark.

 Echo now on.

 crdl -b 1024 -z //opt/app/tuxapp/tuxxx/log/TLOG
Device created: //opt/app/tuxapp/tuxxx/log/TLOG

 q crtlog_k.sh successful.

4.重启Tuxedo环境,发现SLAVE仍无法启动服务,ULOG报错:


103728.v490f6-tux!BSBRIDGE.5909.1.0: ERROR: msgrcv err(LIBTUX_CAT:666: ERROR: Message operation failed because the queue was removed): errno=36,qid=5620,buf=3639704,bytes=4572,type=0,flag=0
103728.v490f6-tux!BSBRIDGE.5909.1.0: CMDTUX_CAT:499: ERROR: Shutting down bridge, serious message receive error

报错信息: 
Tuxedo服务无法启动的问题解决(涉及MP下tlisten和TLOG的报错) 
看来内存中的内容还是有些混乱,或许和之前的操作未清除干净有关。

执行清理IPC操作:


eval `ipcs|grep -w tuxxx|awk '{print "ipcrm -" $1, $2 ";"}`</code><p>
</p></pre>
再次重启Tuxedo环境,此时主备环境服务均可以启动:
<pre class="prettyprint" name="code" style=" white-space: nowrap; word-wrap: break-word; box-sizing: border-box;  overflow-y: hidden; overflow-x: auto; margin-top: 0px; margin-bottom: 1.1em; font-family: 'Source Code Pro', monospace; padding: 5px 5px 5px 60px; font-size: 14px; line-height: 1.45; word-break: break-all; color: rgb(51, 51, 51); border: 1px solid rgba(128, 128, 128, 0.0745098); border-radius: 0px; background-color: rgba(128, 128, 128, 0.0470588); "><code class="hljs r has-numbering" style="display: block; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace; font-size: inherit; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">exec DBBL -A :         on xx1 - process id=5793 ... Started. exec BBL -A :         on xx1 - process id=5794 ... Started. exec BBL -A :         on xx2 - process id=6142 ... Started.  Booting server processes ...

总结: 
1.ULOG中的信息还是比较有价值,排查时需要。 
2.Tuxedo的错误号含义,可以参考如下: 
http://docs.oracle.com/cd/E13203_01/tuxedo/tux91/messages/index.htm 
3.本案例问题主要先是tlisten进程未启动,然后需要创建TLOG(此处还有一种方法就是删除ubb中TLOG的配置),还要会操作SLAVE如何创建TLOG的方法,另外就是清理IPC资源的方法。本案例重启服务器和Tuxedo环境均为解决根本问题,所以重启大法未必所有场景可用。 
4.往往一个报错解决了,会跟着另一个报错,层层推进,“兴奋-打击-兴奋”的循环,或许这么解决问题后,才会带来一股酸爽的感觉。

如果您觉得此篇文章对您有帮助,欢迎关注微信公众号:bisal的个人杂货铺,您的支持是对我最大的鼓励!

Tuxedo服务无法启动的问题解决(涉及MP下tlisten和TLOG的报错)
本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

转载声明:转载请注明出处,本技术博客是本人原创文章

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> Tuxedo服务无法启动的问题解决(涉及MP下tlisten和TLOG的报错)


 上一篇
客户端ADR配置 客户端ADR配置
前两天YJ部门有一个使用occi的应用,启动时出现报错,应用日志记录的内容是Occipool error,没有任何其他信息了,后来同事向应用中加了一些日志语句,重编译运行才发现报的是ORA-00020错误,数据库process连接进程达到了
下一篇 
一个低级的ORA-01017错误 一个低级的ORA-01017错误
事件缘由: 使用sys账户创建了一个数据清理的存储过程,再创建一个Oracle job定时运行这个存储过程,用于做表数据的清理。第二天看表数据未删除,说明job执行有错,打算使用sys账号登录查看job运行情况,反复输入sys账户信息,总提