中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Nacos集群模式下服務無法注冊怎么解決

發布時間:2022-01-07 13:30:06 來源:億速云 閱讀:402 作者:iii 欄目:開發技術

本篇內容介紹了“Nacos集群模式下服務無法注冊怎么解決”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

    Nacos集群模式下服務無法注冊

    一、環境

    1、服務器:騰訊云 CentOS 7.2 64位 機器三臺

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

    3、nacos版本0.8.0

    二、nacos服務端搭建

    基本按照官網文檔就能搭建起來,另外按照官網文檔修改
    了cluster.conf,添加了三臺機器的IP(172.XX.XX.14:8848, 172.XX.XX.7:8848, 172.XX.XX.14:8848),啟動發現報錯

    java.lang.IllegalStateException: unable to find local peer: 118.XX.XX.52:8848, all 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.java:191)
            at com.alibaba.nacos.naming.monitor.PerformanceLoggerThread.collectmetrics(PerformanceLoggerThread.java:114)
            at sun.reflect.GeneratedMethodAccessor74.invoke(Unknown Source)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:497)

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

    三、服務注冊

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

    java.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.java:335)
            at com.alibaba.nacos.client.naming.net.NamingProxy.reqAPI(NamingProxy.java:267)
            at com.alibaba.nacos.client.naming.net.NamingProxy.registerService(NamingProxy.java:167)
            at com.alibaba.nacos.client.naming.NacosNamingService.registerInstance(NacosNamingService.java:170)
            at org.springframework.cloud.alibaba.nacos.registry.NacosServiceRegistry.register(NacosServiceRegistry.java:56)
            at org.springframework.cloud.alibaba.nacos.registry.NacosServiceRegistry.register(NacosServiceRegistry.java:29)
            at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.register(AbstractAutoServiceRegistration.java:209)
            at org.springframework.cloud.alibaba.nacos.registry.NacosAutoServiceRegistration.register(NacosAutoServiceRegistration.java:75)
            at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.start(AbstractAutoServiceRegistration.java:108)
            at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.bind(AbstractAutoServiceRegistration.java:73)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java: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) {
                    throw new IllegalArgumentException("no leader now.");
                }

    后端日志里確實也打印了這個warning,日志在naming-raft.log中

    Nacos集群模式下服務無法注冊怎么解決

    然后開始調試nacos服務代碼,通過調試發現nacos注冊中心在啟動時會通過NetUtils類中InetAddress.getLocalHost()去獲取本機的IP地址,但這個IP(118.XX.XX.52:8848)并不是本機IP,導致了本機IP不正確,注冊中心并沒加載成功

    翻閱下文檔:

    深層的原因: 在大多數Linux操作系統中,都是以/etc/hosts中的配置查找主機名的而Java 的InetAddress.java 調用 InetAddressImpl.java 的 public native String getLocalHostName() throws UnknownHostException; 來獲取本地主機名, Java 的這個方法是native的,是本地系統的一個實現,此時根據本地/etc/hostname文件中的機器名來獲取本機IP,然而這個IP并不是這臺機器的內網IP,那這個IP是哪里來的?

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

    五、解決

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

    2. 在/etc/hosts里加一行 本機IP mName

    3. 重啟注冊中心,注冊中心啟動成功,發現不報java.lang.IllegalStateException: unable to find local peer: 118.XX.XX.52:8848這個錯誤了,且通過調試發現,IP確實也正確了

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

    服務沒有注冊到nacos的原因分析

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

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>0.2.1.RELEASE</version>
        </dependency>

    “Nacos集群模式下服務無法注冊怎么解決”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    岑溪市| 赞皇县| 大姚县| 饶河县| 镇康县| 汉源县| 铜陵市| 新建县| 四子王旗| 金秀| 改则县| 灌云县| 宝应县| 康定县| 龙泉市| 隆德县| 华蓥市| 灵璧县| 台湾省| 彩票| 千阳县| 万载县| 宜兰市| 太康县| 屏边| 汾阳市| 灌阳县| 元氏县| 崇明县| 湘阴县| 阳山县| 永宁县| 宁武县| 泸溪县| 始兴县| 宣威市| 华阴市| 凭祥市| 濮阳县| 惠州市| 陆川县|