Nacos 常見問題及解決方法

Nacos 開源至今已有一年,在這一年裏,獲得了不少用戶的支持和反饋。在與社區的交流中,咱們發現有一些問題出現的頻率比較高,爲了可以讓用戶更快的解決問題,咱們總結了這篇常見問題及解決方法,這篇文章後續也會合併到 Nacos 官網的 FAQ 裏。

如何依賴最新的 Nacos 客戶端?

不少用戶都是經過 Spring Cloud Alibaba 或者 Dubbo 依賴的 Nacos 客戶端,那麼 Spring Cloud Alibaba 和 Dubbo 中依賴的 Nacos 客戶端版本,每每會落後於 Nacos 最新發布的版本。在一些狀況下,用戶須要強制將 Nacos 客戶端升級到最新,此時卻每每不知道該升級哪一個依賴,這裏將 Spring Cloud Alibaba 和 Dubbo 的依賴升級說明以下:

Spring Cloud Alibaba

用戶一般是配置如下Maven依賴來使用的 Nacos:
<!--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 包:
<dependency>
  <groupId>com.alibaba.nacos</groupId>
  <artifactId>nacos-client</artifactId>
  <version>[a particular version]</version>
</dependency>複製代碼
若是 nacos-client 升級了,對應的 spring-cloud 客戶端版本不必定也同步升級,這個時候能夠採用以下的方式強制升級 nacos-client(以 nacos-discovery 爲例):
<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 客戶端時,只須要以下修改依賴:
<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 服務框架中被反覆構造了屢次,能夠參考 Issue
這個問題已經獲得了修復,預期會在下個 Spring Cloud Alibaba 版本中發佈。

日誌打印頻繁的問題

在老的 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'複製代碼
而後在返回信息中查找本節點的集羣任期。由於每一個節點返回的集羣任期中,只有當前節點的信息是準確的,返回的其餘節點的信息都是不許確的。
本文做者:朱鵬飛,Github ID @nkorange,Nacos 開源負責人,阿里巴巴雲原生應用平臺技術專家。

本文爲雲棲社區原創內容,未經容許不得轉載。
相關文章
相關標籤/搜索