Nacos踩坑記錄之The IPv4 address("nacos.xxxx.local") is incorrect

2022-01-09 程序猿shy

版本
spring-cloud-alibaba:2021.1
項目構建工具:gradle
nacos-server:2.0.3

1、問題

昨天早上上班來了之後,運營的同事著急的過來說生產環境登不上了,我趕緊打開日誌看了之後,就發現了這樣的報錯

問了運維他們說他們大晚上的也沒改伺服器的配置,於是就開啟了漫長的debug之路

2、分析思路

在網上看了一大堆的解決方案之後,最後發現了兩個比較合適的解決方案
1、https://github.com/alibaba/nacos/issues/5788
2、https://segmentfault.com/a/1190000040083941
其中方案一在和運維的同事討論之後,認為我們自己的伺服器環境不適合那種解決方案,所以就注重參考了方案二,下面來具體說一下方案二

---華麗的分割線-

方案二中的這段話引起了我的注意

仔細查看了我的代碼之後發現,雖然我引入的是spring-cloud-alibaba的2021.1版本,但是在spring-cloud-starter-alibaba-nacos-config和spring-cloud-starter-alibaba-nacos-discovery中nacos-client的版本還是1.4.1

也就是說雖然大的版本升級了,但是裡面nacos-client的小版本並未升級。

3、解決方案

找到了這個問題之後,我們就可以在grade(或者maven)中手動排除一下nacos-client,重新引入一下nacos-client的最新版本

    compile ('com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config') {        exclude group:'com.alibaba.nacos', module:'nacos-client'    }    compile ('com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery') {        exclude group:'com.alibaba.nacos', module:'nacos-client'    }    compile ('com.alibaba.nacos:nacos-client:2.0.3')

改了之後的依賴關係是這樣的

重新上線部署之後,截止目前還沒發現別的問題

4、問題總結

雖然是生產環境登不上了,但是我在仔細排查之後發現,其實服務本身並未宕機,直接調用該服務上的接口還是可以調的通的,只是該服務被nacos從服務列表中剔除了,出現該問題的原因應該是:報錯之後打斷了服務和nacos之間的心跳連接,nacos連接不上服務之後,就剔除了該服務,所以在feign調用的時候就報錯了,但是不知道為什麼服務恢復之後沒有自動重連。至於為什麼會好好的出現這個異常,還需要再繼續研究一下。

Spring Cloud Alibaba和Spring Cloud和Nacos的版本對應關係:


因為我們公司項目的Spring Cloud版本之前升級到了2020.0.1,所以我的Spring Cloud Alibaba的版本只可以選擇2021.1,那麼我的Nacos版本也就只可以選擇1.4.1了,But我當前的Nacos版本卻是最新的2.0.3,不過目前還沒有發現不可逆的錯誤。
筆者在此謹慎的告訴大家:版本升級的時候,一定要看清楚各個版本之間的對應關係,避免因為版本不對應的原因導致一些莫名其妙的bug

出現這個問題之後,我們在生產環境加上了Nacos的Prometheus監控平臺,具體的搭建流程大家可以參考Nacos的官方文檔自行操作

參考連結:

https://github.com/alibaba/nacos/issues/5788

https://segmentfault.com/a/1190000040083941

相關焦點

  • Nacos 集群部署模式最佳實踐
    = NacosFactory.createNamingService(properties);Dubbo 配置dubbo.registry.address={VIP}:8848dubbo.registry.protocol=nacos域名配置VIP 模式和直連模式都不具備可讀性,所以在實際生產中,往往還會給 VIP 掛載一個域名。
  • Nacos 2.0的Spring Boot Starter來了!
    用戶可以方便地使用Spel表達式來定義NacosValue,與Spring功能完美整合,減少SpringBoot玩家們的工作量。修復了高並發場景下的一致性問題阿里雲內部同學在使用Nacos-spring-boot項目進行大規模壓測的過程中,出現了一些配置讀取錯誤:在大流量頻繁修改某些dataId的配置的過程中,客戶端可能會拉取到舊版本的配置數據,導致客戶端配置數據反覆
  • SpringCloud學習筆記0-Seata與nacos集成
    docker for windows搭建Nacos 1.2.02.使用docker for windows搭建Seata 1.2.03.使用windows環境搭建mysql 5.73.本地工程環境JDK 82.重要說明    1.Seata 0.0.9-Seata 1.2.0每個版本都有各自的玩法,千萬不要用1.2.0的方式去玩1.0.0,會坑死人
  • Nacos的那些事兒(一):集群搭建
    git clone https://github.com/alibaba/nacos.git //編譯打包 (install命令完成了項目編譯、單元測試(跳過)、打包功能,同時把打好的可執行jar包布署到本地maven倉庫) cd nacos/ mvn -Prelease-nacos -Dmaven.test.skip=true clean install -
  • SpringBoot 2.0 + Nacos + Sentinel 流控規則集中存儲
    #nacos中存儲規則的groupIdspring.cloud.sentinel.datasource.ds.nacos.groupId=SENTINEL_GROUP#定義存儲的規則類型spring.cloud.sentinel.datasource.ds.nacos.rule-type=flow控制臺配置
  • Nacos 快速開始
    從 Github 上下載源碼方式git clone https://github.com/alibaba/nacos.gitcd nacos/mvn -Prelease-nacos clean install -Uls -al distribution/target/// change the $version to your actual
  • 微服務學習之路(1)——配置中心Nacos鏡像製作、集群搭建
    yum autoremove -y wget \ && ln -snf /usr/share/zoneinfo/$TIME_ZONE /etc/localtime && echo $TIME_ZONE > /etc/timezone \ && yum clean allADD bin/docker-startup.sh
  • Spring Cloud Alibaba之一:Nacos
    如上所示,Nacos幫我們維護了各微服務的配置文件,當服務註冊到Nacos中時,Nacos會向服務分發它們的配置文件,並將服務的服務名和服務地址記錄下來。當order service調用product service時,只需要傳遞product的服務名,即可進行訪問(雖然服務地址可能變化,但服務名一般不會變)。
  • 詳解nacos註冊中心服務註冊流程
    一、nacos 簡介本文的目的在於詳解 nacos 註冊中心的服務註冊流程,所以首先需要對 nacos 有個基本的了解。nacos 提供了一組簡單易用的特性集,幫助您快速實現動態服務發現、服務配置、服務元數據及流量管理。Nacos 幫助您更敏捷和容易地構建、交付和管理微服務平臺。nacos 是構建以「服務」為中心的現代應用架構 (例如微服務範式、雲原生範式) 的服務基礎設施。
  • Nacos 1.3.0 發布, 全新內核構建
    successfully in cluster mode. use embedded storage同時,為了方便用戶查詢本機節點的數據同步情況,Nacos 1.3.0 配置模塊開放了新的運維 Open-API,供其查詢當前節點本地數據存儲情況,其使用方式如下GET /nacos
  • 今天來學學Nacos
    -Dmaven.test.skip=true clean install -U ls -al distribution/target/cd distribution/target/nacos-server-$version/nacos/binunzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gzcd
  • nacos gateway動態路由
    --nacos依賴--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency
  • SpringCloud Alibaba-nacos註冊中心
    Nacos Spring Cloud 快速開始安裝nacos下載地址:https://github.com/alibaba/nacos/releases下載完成之後,解壓。'compile group: 'org.springframework.cloud', name: 'spring-cloud-starter-alibaba-nacos-discovery', version: '0.1.1.RELEASE'注意:這裡之前確實採坑,因為nacos是新生態所以無法自動和cloud或boot版本一致,所以必須寫入版本號,版本 0.2
  • sentinel dashboard集成nacos
    <i class="glyphicon glyphicon-filter"></i>&nbsp;&nbsp;流控規則</a></li>修改後會調用FlowControllerV2中的接口application.properties 中增加配置sentinel.nacos.serverAddr
  • Nacos 權限控制介紹及實戰
    用戶管理創建用戶:POST/nacos/v1/auth/users?username=xx&password=yy刪除用戶:DELETE/nacos/v1/auth/users?username=xx&password=yy更新用戶:PUT/nacos/v1/auth/users?
  • 微服務註冊中心Nacos入門
    Nacos集群部署本例搭建是偽集群,在一臺虛擬機上起3個nacos服務,使用nginx做負載均衡。文件:#mysql資料庫連接信息,需要自己創建資料庫,sql腳本在conf/nacos-mysql.sqlserver.port=8849  #3個nacos服務埠號分別為8849,8850,8851spring.datasource.platform=mysqldb.num=1db.url.0=jdbc:mysql://192.168.1.14:
  • 服務發現、配置中心,Nacos幫我們都搞定了
    usr/local/進到/usr/local/,啟動服務,單機環境下需要加上參數-m standalone. with standalone"else    echo "nacos is starting with cluster"fi啟動後訪問:http://ip:8848/nacos/ 即可進入nacos管理頁面,默認登陸名和密碼都是nacos(四)Nacos實現服務註冊發現中心4.1 服務註冊
  • 【Spring Cloud Alibaba】Nacos 服務註冊與發現
    1、服務註冊首先創建一個名為:spring-cloud-alibaba-nacos-discovery 的引用,相關依賴為以下內容,核心依賴 spring-cloud-starter-alibaba-nacos-discovery<dependencies>
  • 聊一聊基於Nacos的metadata完成服務間的AB測試
    );var app = builder.Build();app.MapGet("/", () =>{    return Results.Ok("OK - feature");});app.Run("http://*:9885");{  "nacos
  • 微服務的靈魂擺渡者Nacos究竟有多強?
    用戶名:nacos;密碼:nacos登錄成功的界面如下:nacos-server,對外暴露服務nacos-consumer:註冊進入nacos-server,調用nacos-provider的服務由於使用了多模塊聚合項目,只需要創建一個nacos-provider模塊即可。