NACOS 2.0.3 集群客户端连接出现503 500异常处理 踩坑记录

背景

LINUX 服务器:3台
NACOS 版本: 2.0.3 docker
数据库:无
springboot: 2.1.16.RELEASE
com.alibaba.cloud:2.1.3.RELEASE
控制台可以正常登陆访问进行CRUD
配置文件可以正常读取

异常

2021-09-02  11:16:19.804 [main] ERROR com.alibaba.nacos.client.naming:548- request: /nacos/v1/ns/instance/list failed, servers: [XXX:8848], code: 500, msg: server is DOWNnow, detailed error message: Optional[Distro protocol is not initialized]
2021-09-02  11:16:19.805 [main] ERROR com.alibaba.nacos.client.naming:304- [NA] failed to update serviceName: DEFAULT_GROUP@@freyja
com.alibaba.nacos.api.exception.NacosException: failed to req API:/nacos/v1/ns/instance/list after all servers([XXX:8848]) tried: ErrCode:503, ErrMsg:server is DOWNnow, detailed error message: Optional[Distro protocol is not initialized]
	at com.alibaba.nacos.client.naming.net.NamingProxy.reqApi(NamingProxy.java:552)
	at com.alibaba.nacos.client.naming.net.NamingProxy.reqApi(NamingProxy.java:491)
	at com.alibaba.nacos.client.naming.net.NamingProxy.reqApi(NamingProxy.java:486)
	at com.alibaba.nacos.client.naming.net.NamingProxy.queryList(NamingProxy.java:400)
	at com.alibaba.nacos.client.naming.core.HostReactor.updateService(HostReactor.java:339)
	at com.alibaba.nacos.client.naming.core.HostReactor.updateServiceNow(HostReactor.java:302)
	at com.alibaba.nacos.client.naming.core.HostReactor.getServiceInfo(HostReactor.java:277)
	at com.alibaba.nacos.client.naming.NacosNamingService.subscribe(NacosNamingService.java:446)
	at com.alibaba.cloud.nacos.discovery.NacosWatch.start(NacosWatch.java:124)
	at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:182)
	at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:53)
	at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:360)
	at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:158)
	at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:122)
	at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:894)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.finishRefresh(ServletWebServerApplicationContext.java:162)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:553)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:744)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:391)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:312)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1204)
	at com.csair.freyja.FreyjaApplication.main(FreyjaApplication.java:41)

百度一番基本没什么帮助
然后开始自行修BUG的旅程

先看看异常提示的API

http://ip:8848/nacos/v1/ns/instance/list
server is DOWNnow, detailed error message: Optional[Distro protocol is not initialized]

日志:
protocol-distro.log 以及 naming-distro.log

查看官网issue
发现也找不到什么有用的信息
版本2以前基本没这个问题,而2以后有此问题

可以基本确定是发现服务和版本问题

查看官网2以后发生什么变化,找到有一个有用的信息
在这里插入图片描述
新版本部署

发现原来2.0后是有gRPC的更新
如果docker需要3台不在同一台服务器就要打开这两个端口

总共要4个
8848:nacos默认端口
7848:nacos集群发现端口
9848和9849:分别是客户端和服务端的同步端口必须映射和打开才能做交互

PS:如果非docker部署,直接jar运行记得不能连续3个端口

默认 :GRPC
第一台
8848:9848和9849
第二台
8849:9849和9850
第三台
8850:9850和9851

会发现第一台的grpc和第二胎的9849冲突,他们不会自动往后移的。所以搭建的时候要间隔一位。

我是这样配的就可以顺利启动三台
8846\8848\8850

docker 配置文件3台要修改IP

docker run -d \
--name nacos-server \
--restart always \
-e MODE=cluster \
-e NACOS_SERVER_PORT=8848 \
-e NACOS_SERVERS="ip1:8848 ip2:8848 ip3:8848" \
-e NACOS_SERVER_IP=ip1 \
-e EMBEDDED_STORAGE=embedded \
-e TZ=Asia/Shanghai \
-e JVM_XMS=256m \
-e JVM_XMX=512m \
-p 8848:8848 \
-p 7848:7848 \
-p 9848:9848 \
-p 9849:9849 \
-v /var/nacos/logs:/home/nacos/logs \
-v /var/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties \
nacos:443/nacos-server:2.0.3

我要,,,,努力,,,,,,一点 >_<

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 这个问题可能是由于 nacos2.0.3 启动嵌入式 tomcat 失败引起的。可能需要查看日志文件以找出具体的问题。可能需要检查 nacos2.0.3 的配置是否正确,以及 tomcat 的配置等方面的问题。另外,还可以尝试重新启动 nacos,或者更新 nacos 的版本来解决问题。 ### 回答2: nacos2.0.3是一款开源的服务发现和配置管理中心,被广泛应用于不同的领域,如云计算、分布式系统和微服务架构等。然而,有些用户在启动nacos2.0.3集群时会遇到一个错误提示:unable to start embedded tomcat。那么,究竟是什么原因导致这个错误呢? 首先,embedded tomcat是nacos2.0.3内置的tomcat服务器,负责接收和响应请求。这个错误提示表明nacos2.0.3无法启动embedded tomcat,使得nacos2.0.3无法正常提供服务。常见的原因有以下几个: 1. 内存不足:embedded tomcat需要足够的内存来运行,如果内存不足,就会无法启动。可以通过增加内存配置或关闭其他内存占用较大的程序,来解决内存不足的问题。 2. 端口被占用:embedded tomcat需要占用一个特定的端口来监听请求,如果这个端口被其他程序占用,embedded tomcat就无法启动。可以通过查看日志文件,或使用netstat命令查看端口被哪个程序占用,然后进行操作。 3. 文件权限问题:如果启动nacos2.0.3的用户没有足够的文件权限,embedded tomcat就无法正常启动。可以通过修改文件权限或以更高权限的用户运行程序,来解决文件权限问题。 4. 配置错误:如果nacos2.0.3的配置文件中存在错误或不完整,embedded tomcat就无法正常启动。可以通过查看日志文件,或检查配置文件中的参数是否正确,来解决配置错误的问题。 总的来说,unable to start embedded tomcat错误提示的原因复杂多样,用户可以根据错误提示和自身情况进行排查和解决。 ### 回答3: Linux启动Nacos2.0.3集群报错显示unable to start embedded tomcat是由于Nacos启动时自带的内嵌Tomcat服务器无法正常启动导致的错误。解决该问题需要以下方法: 1. 检查nacos启动脚本 首先需要检查一下Nacos的启动脚本是否正确,通常情况下,该脚本会在Nacos的根目录下,命名为startup.sh或者startup.bat。确认脚本没有被修改或损坏是第一步。 2. 检查Nacos的端口号 如果Nacos的端口号被其他应用程序占用,就无法启动内嵌Tomcat服务器。可以通过netstat命令查看端口号是否被占用,例如:netstat -tlnp|grep 8848,其中8848为默认的Nacos端口号。 3. 检查Java环境 另一个可能引发该错误的原因是Java环境没有正确配置。需要确认Java环境变量正确设置,并且版本符合Nacos的要求。例如,在Nacos2.0.3中,需要Java版本为1.8及以上。 4. 检查Nacos的配置文件 Nacos内嵌Tomcat的配置文件存放在Nacos根目录下的conf子目录内。需要确认conf目录内的server.xml文件没有被修改或损坏,特别是关于Tomcat的相关配置项是否正确。 5. 调整内存 如果服务器资源不足,也可能导致内嵌Tomcat无法启动。可以尝试调整一下服务器的内存大小,或者通过JVM参数调整内存大小。例如,在Nacos2.0.3中,可以在启动脚本中添加JAVA_OPT参数,例如:JAVA_OPT="$JAVA_OPT -server -Xms1g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m" 总结: 无法启动Nacos内嵌Tomcat服务器可能是由配置文件、Java环境、端口占用、启动脚本或内存大小等原因引起的。通过仔细检查和调整可以解决该问题,确保Nacos服务器正常启动。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值