Nacos 常见问题及解决方法

Nacos 开源至今已有一年,在这一年里,获得了不少用户的支持和反馈。在与社区的交流中,咱们发现有一些问题出现的频率比较高,为了可以让用户更快的解决问题,咱们总结了这篇常见问题及解决方法,这篇文章后续也会合并到 Nacos 官网的 FAQ 里。git

如何依赖最新的 Nacos 客户端?

不少用户都是经过 Spring Cloud Alibaba 或者 Dubbo 依赖的 Nacos 客户端,那么 Spring Cloud Alibaba 和 Dubbo 中依赖的 Nacos 客户端版本,每每会落后于 Nacos 最新发布的版本。在一些状况下,用户须要强制将 Nacos 客户端升级到最新,此时却每每不知道该升级哪一个依赖,这里将 Spring Cloud Alibaba 和 Dubbo 的依赖升级说明以下:github

Spring Cloud Alibaba

用户一般是配置如下Maven依赖来使用的 Nacos:spring

<!--Nacos Discovery-->
<dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
     <version>[latest version]</version>
 </dependency>

<!--Nacos Config-->
<dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
     <version>[latest version]</version>
 </dependency>复制代码

这两个 JAR 包实际上又依赖了如下的 JAR 包:tomcat

<dependency>
  <groupId>com.alibaba.nacos</groupId>
  <artifactId>nacos-client</artifactId>
  <version>[a particular version]</version>
</dependency>复制代码

若是 nacos-client 升级了,对应的 spring-cloud 客户端版本不必定也同步升级,这个时候能够采用以下的方式强制升级 nacos-client(以 nacos-discovery 为例):bash

<dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
     <version>[latest version]</version>
     <excludes>
          <exclude>
                 <groupId>com.alibaba.nacos</groupId>
                 <artifactId>nacos-client</artifactId>
          </exclude>
     </excludes>
 </dependency>

<dependency>
  <groupId>com.alibaba.nacos</groupId>
  <artifactId>nacos-client</artifactId>
  <version>[latest version]</version>
</dependency>复制代码

Dubbo

Dubbo 也是相似的道理,用户一般引入的是如下的依赖:框架

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo-registry-nacos</artifactId>
    <version>[latest version]</version>
</dependency>
    
<!-- Dubbo dependency -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <version>[latest version]</version>
</dependency>复制代码

须要升级 Nacos 客户端时,只须要以下修改依赖:curl

<dependency>
  <groupId>com.alibaba.nacos</groupId>
  <artifactId>nacos-client</artifactId>
  <version>[latest version]</version>
</dependency>复制代码

客户端 CPU 高,或者内存耗尽的问题

问题的现象是依赖 Nacos 客户端的应用,在运行一段时间后出现 CPU 占用率高,内存占用高甚至内存溢出的现象,能够参考 Issue优化

这种状况首先要作的是分析 CPU 高或者内存占用高的缘由,经常使用的命令有 top、jstack、jmap、jhat 等。其中一种状况是 Nacos 客户端实例在 Spring Cloud Alibaba 服务框架中被反复构造了屡次,能够参考 Issueurl

这个问题已经获得了修复,预期会在下个 Spring Cloud Alibaba 版本中发布。spa

日志打印频繁的问题

在老的 Nacos 版本中,每每会有大量的无效日志打印,这些日志的打印会迅速占用完用户的磁盘空间,同时也让有效日志难以查找。目前社区反馈的日志频繁打印主要有如下几种状况:
一、access 日志大量打印,相关 Issue 点击这里

主要表现是 {nacos.home}/logs/access_log.2019-xx-xx.log 相似格式文件名的日志大量打印,并且还不能自动清理和滚动。这个日志是 Spring Boot 提供的 Tomcat 访问日志打印,Spring Boot 在关于该日志的选项中,没有最大保留天数或者日志大小控制的选项。所以这个日志的清理必须由应用新建 Crontab 任务来完成,或者经过如下命令关闭日志的输出(在生产环境咱们仍是建议开启该日志,以便可以有第一现场的访问记录):

server.tomcat.accesslog.enabled=false复制代码

二、服务端业务日志大量打印且没法动态调整日志级别。这个问题在 1.1.3 已经获得优化,能够经过 API 的方式来进行日志级别的调整,调整日志级别的方式以下:

# 调整naming模块的naming-raft.log的级别为error:
curl -X PUT '$nacos_server:8848/nacos/v1/ns/operator/log?logName=naming-raft&logLevel=error'
# 调整config模块的config-dump.log的级别为warn:
curl -X PUT '$nacos_server:8848/nacos/v1/cs/ops/log?logName=config-dump&logLevel=warn'复制代码

三、客户端日志大量打印,主要有心跳日志、轮询日志等。这个问题已经在 1.1.3 解决,请升级到 1.1.3 版本。

集群管理页面,Raft Term 显示不一致问题

在 Nacos 1.0.1 版本中,Nacos 控制台支持了显示当前的集群各个机器的状态信息。这个功能受到比较多用户的关注,其中一个被反馈的问题是列表中每一个节点的集群任期不同。以下图所示,图片信息来自 Issue



对于这个任期不一致的问题,缘由主要是由于获取这个信息的逻辑有一些问题,没有从对应的节点上获取集群任期。这个问题会在下一个 Nacos 版本中修复。目前一个手动检查集群任期的办法是在每一个节点上执行如下命令:

curl '127.0.0.1:8848/nacos/v1/ns/raft/state'复制代码

而后在返回信息中查找本节点的集群任期。由于每一个节点返回的集群任期中,只有当前节点的信息是准确的,返回的其余节点的信息都是不许确的。

原文连接

本文为云栖社区原创内容,未经容许不得转载。