在部署一个开源项目时,本地调试遇到seata的服务一直没有找到,于是开始排查。
首先是将所有组件docker-compose发布到云服务器,接下来本地启动应用,控制台一直报错。

ERROR 2968 --- [eoutChecker_1_1] i.s.c.r.netty.NettyClientChannelManager : no available service found in cluster 'default', please make sure registry config correct and keep your seata server running
这个问题就是seata服务端没有正确启动,随即到服务器上查看启动日志,排查问题。
在部署时发现seata一直注册不到nacos上,然后导致了本地应用检测不到SEATA_GROUP而产生报错。
那首先定位问题就是服务端发布的有问题
然后就重新部署发布,使用命令
docker-compose up --build
查看启动日志,首先发现mysql的问题,Operation not permitted,经过一番google,这个问题大概是因为mysql8的版本在docker上部署,会有安全校验,具体解决方法就是在docker-compose.yaml中mysql服务添加参数
security_opt:
- seccomp:unconfined
重新启动后正常,但是这不是造成seata启动错误的原因,根本问题仍未解决

seata在启动之后,根据registry.conf的配置注册到nacos

mall4cloud-seata | 02:25:03.680 INFO --- [ main] i.s.core.rpc.netty.NettyServerBootstrap : Server started, listen port: 8091
mall4cloud-seata | 02:25:03.804 ERROR --- [ main] io.seata.server.Server : nettyServer init erro

在部署包含seata的开源项目时,遇到seata服务无法找到的问题。通过检查发现seata未正确注册到nacos,原因是registry.conf中的serverAddr配置错误。调整为nacos容器IP后,seata启动正常。但seata初始化数据源时,因数据源URL配置为本地IP导致失败。修正为服务器上的mysql容器IP后,seata完全启动。此外,本地项目中SEATA_IP需设为服务器外网IP,以便远程访问。总结了远程部署seata涉及的配置关键点,包括nacos和mysql容器IP的设置。
最低0.47元/天 解锁文章
1万+





