Nacos集群模式下服務無法註冊問題

2022-09-20 18:21:06 字數 3936 閱讀 8056

目錄

1、伺服器:騰訊雲 centos 7.2 64位 機器三颱

2、jdk1.8.0_151(由於nacos必須1.8以上),1.8以下會有啟動問題,務必公升級

3、nacos版本0.8.0

基本按照官網文件就能搭建起來,另外按照官網文件修改

了cluster.conf,新增了三颱機器的ip(172.xx.xx.14:8848, 172.xx.xx.7:8848, 172.xx.xx.14:8848),啟動發現報錯

j**a.lang.illegalstateexception: unable to find local peer: 118.xx.xx.52:8848, a程式設計客棧ll peers: [172.xx.xx.14:8848, 172.xx.xx.7:8848, 172.xx.xx.14:8848]

at com.alibaba.nacos.naming.raft.peerset.local(peerset.j**a:191)

at com.alibaba.nacos.naming.monitor.performanceloggerthread.collectmetrics(performanceloggerthread.j**a:114)

at sun.reflect.generatedmethodaccessor74.invoke(unknown source)

at sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.j**a:43)

at j**a.lang.reflect.method.invoke(method.j**a:497)

不理它,先把報錯的ip加上後,啟動成功。

此時啟動服務應用進行服務註冊,發現報如下錯誤:

jpqoij**a.lang.illegalstateexception: failed to req api:/nacos/v1/ns/instance after all servers([172.xx.xx.23:80]) tried

at com.alibaba.nacos.client.naming.net.namingproxy.reqapi(namingproxy.j**a:335)

at com.alibaba.nacos.client.naming.net.namingproxy.reqapi(namingproxy.j**a:267)

at com.alibaba.nacos.client.naming.net.namingproxy.registerservice(namingproxy.j**a:167)

at com.alibaba.nacos.client.naming.nacosnamingservice.registerinstance(nacosnamingservice.j**a:170)

at org.springframework.cloud.alibaba.nacos.registry.nacosserviceregistry.register(nacosserviceregistry.j**a:56)

at org.springframework.cloud.alibaba.nacos.registry.nacosserviceregistry.register(nacosserviceregistry.j**a:29)

at org.springframework.cloud.client.serviceregistry.abstractautoservicerewww.cppcns.comgistration.register(abstractautoserviceregistration.j**a:209)

at org.springframework.cloud.alibaba.nacos.registry.nacosautoserviceregistration.register(nacosautoserviceregistration.j**a:75)

at org.springframework.cloud.client.serviceregistry.abstractautoserviceregistration.start(abstractautoserviceregistration.j**a:108)

at org.springframework.cloud.client.serviceregistry.abstractautoserviceregistration.bind(abstractautoserviceregistration.j**a:73)

at sun.reflect.nativemethodaccessorimpl.invoke0(native method)

at sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.j**a:62)

at sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.j**a:43)

at j**a.lang.reflect.method.invoke(method.j**a:498)

服務端應用啟動報呼叫服務註冊失敗,但nacos服務後台三颱機器均啟動成功,且後台能正常進入,通過url訪問/nacos/v1/ns/instance,也是能正常訪問。實在無解,除錯**

根據除錯發現,走到了no leader now,遂懷疑nacos註冊中心並未啟動成功,之前在cluster.conf中新增的118.xx.xx.52:8848並未解決真正的問題,所以還是不要偷懶,發現問題就要找到真實原因,以免把真實原因給蓋掉了

loggers.raft.info("程式設計客棧i'm not leader, will proxy to leader.");

if (raftcore.getleader() == null)

後端日誌裡確實也列印了這個warning,日誌在naming-raft.log中

然後開始除錯nacos服務**,通過除錯發現nacos註冊中心在啟動時會通過netutils類中inetaddress.getlocalhost()去獲取本機的ip位址,但這個ip(118.xx.xx.52:8848)並不是本機ip,導致了本機ip不正確,註冊中心並沒載入成功

翻閱下文件:

深層的原因: 在大多數linux作業系統中,都是以/etc/hosts中的配置查詢主機名的而j**a 的inetaddress.j**a 呼叫 inetaddressimpl.j**a 的 public native string getlocalhostname() throws unknownhostexception; 來獲取本地主機名, j**a 的這個方法是native的,是本地系統的乙個實現,此時根據本地/etc/hostname檔案中的機器名來獲取本機ip,然而這個ip並不是這台機器的內網ip,那這個ip是**來的?

查詢到騰訊雲相關配置地方,都沒有這個ip,以及在機器上也沒找到,後來通過ping本機名獲取到了以上報錯的ip,猜測這個ip是騰訊雲統一分配的,而且生產的機器ping出來的結果也一樣。

1. 設定本機名稱:/etc/hostname   mname     最好不是寫ip位址的形式,若寫則必須是本機的完全ip形式(不要只寫一半),如果有就不用設定了

2. 在/etc/hosts裡加一行 本機ip mname

3. 重啟註冊中心,註冊中心啟動成功,發現不報j**a.lang.illegalstateexception: unable to find local peer: 118.xx.xx.52:8848這個錯誤了,且通過除錯發現,ip確實也正確了

4. 修改cluster.conf去掉了118.xx.xx.52:8848,重啟服務應用進行註冊,服務註冊成功

因為沒有加上版本號,導致不能註冊。

org.springframework.cloud

程式設計客棧tid>spring-cloud-starter-alibaba-nacos-discovery

0.2.1.release

本文標題: nacos集群模式下服務無法註冊問題

本文位址:

docker 下nacos集群搭建

目錄 1 準備工作 2 拉取映象 3 啟動mysql 4 匯入sql指令碼 4.1 建立連線,新建資料庫nacos 4.2 匯入指令碼 4.3 匯入成功 5 啟動nacos 6 啟動nginx docker pull mysql docker pull nacs server docker pull...

微服務構建專案 五 nacos集群構建

nacos支援三種部署方式 單節點 集群 多集群。一般在聯絡的時候單節點就可以了,但是在生產環境中,為提高專案的穩定性,需要部署nacos集群。nacos bin startup.cmd預設是使用啟動集群模式,要想使用單點模式啟動nacos使用命令如下 startup.cmd m standalon...

Linux下Nacos集群與持久化配置

前言 不斷學習就是程式設計師的宿命 接 springcloud alibaba學習 nacos服務註冊與配置中心 官網集群部署說明 恕我直言,沒看懂,翻譯一下 nacos預設自帶是嵌入式資料庫derby,官網pom可檢視 切換至mysql資料庫,參考 mysql主從熱備 環境準備 1個nginx 最...