Nacos 常見問題及解決方法

芊寶寶最可愛發表於2019-11-05

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 版本中,往往會有大量的無效日誌列印,這些日誌的列印會迅速佔用完使用者的磁碟空間,同時也讓有效日誌難以查詢。目前社群反饋的日誌頻繁列印主要有以下幾種情況:
1、access 日誌大量列印,相關 Issue 點選 這裡

主要表現是 {nacos.home}/logs/access_log.2019-xx-xx.log 類似格式檔名的日誌大量列印,而且還不能自動清理和滾動。這個日誌是 Spring Boot 提供的 Tomcat 訪問日誌列印,Spring Boot 在關於該日誌的選項中,沒有最大保留天數或者日誌大小控制的選項。因此這個日誌的清理必須由應用新建 Crontab 任務來完成,或者透過以下命令關閉日誌的輸出(在生產環境我們還是建議開啟該日誌,以便能夠有第一現場的訪問記錄):

server.tomcat.accesslog.enabled=false

2、服務端業務日誌大量列印且無法動態調整日誌級別。這個問題在 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'

3、客戶端日誌大量列印,主要有心跳日誌、輪詢日誌等。這個問題已經在 1.1.3 解決,請升級到 1.1.3 版本。

叢集管理頁面,Raft Term 顯示不一致問題

在 Nacos 1.0.1 版本中,Nacos 控制檯支援了顯示當前的叢集各個機器的狀態資訊。這個功能受到比較多使用者的關注,其中一個被反饋的問題是列表中每個節點的叢集任期不一樣。如下圖所示,圖片資訊來自  Issue


Nacos 常見問題及解決方法


對於這個任期不一致的問題,原因主要是因為獲取這個資訊的邏輯有一些問題,沒有從對應的節點上獲取叢集任期。這個問題會在下一個 Nacos 版本中修復。目前一個手動檢查叢集任期的辦法是在每個節點上執行以下命令:

curl '127.0.0.1:8848/nacos/v1/ns/raft/state'

然後在返回資訊中查詢本節點的叢集任期。因為每個節點返回的叢集任期中,只有當前節點的資訊是準確的,返回的其他節點的資訊都是不準確的。

原文連結

本文為雲棲社群原創內容,未經允許不得轉載。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69949601/viewspace-2662730/,如需轉載,請註明出處,否則將追究法律責任。

相關文章