io.seata.core.exception.GlobalTransactionException: Could not register branch into global session xid = status = TimeoutRollbacking while expecting Begin
at io.seata.server.coordinator.AbstractCore.globalSessionStatusCheck(AbstractCore.java:102)
at io.seata.server.coordinator.AbstractCore.lambda$branchRegister$0(AbstractCore.java:73)
at io.seata.server.storage.db.session.DataBaseSessionManager.lockAndExecute(DataBaseSessionManager.java:194)
at io.seata.server.session.SessionHolder.lockAndExecute(SessionHolder.java:324)
at io.seata.server.coordinator.AbstractCore.branchRegister(AbstractCore.java:72)
at io.seata.server.coordinator.DefaultCore.branchRegister(DefaultCore.java:97)
at io.seata.server.coordinator.DefaultCoordinator.doBranchRegister(DefaultCoordinator.java:192)
at io.seata.server.AbstractTCInboundHandler$4.execute(AbstractTCInboundHandler.java:184)
at io.seata.server.AbstractTCInboundHandler$4.execute(AbstractTCInboundHandler.java:179)
at io.seata.core.exception.AbstractExceptionHandler.exceptionHandleTemplate(AbstractExceptionHandler.java:116)
at io.seata.server.AbstractTCInboundHandler.handle(AbstractTCInboundHandler.java:179)
at io.seata.core.protocol.transaction.BranchRegisterRequest.handle(BranchRegisterRequest.java:136)
at io.seata.server.coordinator.DefaultCoordinator.onRequest(DefaultCoordinator.java:427)
at io.seata.core.rpc.processor.server.ServerOnRequestProcessor.onRequestMessage(ServerOnRequestProcessor.java:116)
at io.seata.core.rpc.processor.server.ServerOnRequestProcessor.process(ServerOnRequestProcessor.java:77)
at io.seata.core.rpc.netty.AbstractNettyRemoting.lambda$processMessage$2(AbstractNettyRemoting.java:278)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:750)
Centos7.9上seata一直报以上错误
原因:
seata集群的服务器时间不同步导致,其中有一台与其他延迟1分钟以上,seata默认全局事务超时时间是1分钟。
Linux服务器运行久时,系统时间就会存在一定的误差,一般情况下可以使用date命令进行时间设置,但在做数据库集群分片等操作时对多台机器的时间差是有要求的,此时就需要使用ntpdate进行时间同步
解决:
安装时间同步工具
yum install ntpdate -y
网络时间同步命令;注意:若不加上-u参数, 会出现以下提示:no server suitable for synchronization found
ntpdate -u cn.pool.ntp.org
ntp服务器
cn.pool.ntp.org 中国开源免费NTP服务器
ntp1.aliyun.com 阿里云NTP服务器
ntp2.aliyun.com 阿里云NTP服务器
time1.aliyun.com 阿里云NTP服务器
time2.aliyun.com 阿里云NTP服务器
如果不希望一直手工执行可以添加定时任务,root下执行
crontab -e
复制以下内容,每20分钟执行一次
*/20 * * * * /usr/sbin/ntpdate -u ntp1.aliyun.com >/dev/null &
或者执行
echo "*/20 * * * * /usr/sbin/ntpdate -u ntp1.aliyun.com >/dev/null &" >> /var/spool/cron/root