解決SpringBoot連線Nacos叢集報400問題

Naylor發表於2022-02-08

問題描述

搭建一個Nacos叢集,使用 SpringBoot 程式連線 Nacos 叢集,在啟動的時候報異常,程式啟動失敗,而後程式假死。詳細控制檯日誌資訊如下:

failed to req API:/nacos/v1/ns/instance after all servers([192.168.1.169:8848]) tried: ErrCode:400, ErrMsg:<html><body><h1>Whitelabel Error Page</h1><p>This application has no explicit mapping for /error, so you are seeing this as a fallback.</p><div id='created'>Tue Feb 08 21:19:48 CST 2022</div><div>There was an unexpected error (type=Bad Request, status=400).</div><div>receive invalid redirect request from peer 127.0.0.1</div></body></html>
	at com.alibaba.nacos.client.naming.net.NamingProxy.reqApi(NamingProxy.java:556) ~[nacos-client-1.4.1.jar:na]
	at com.alibaba.nacos.client.naming.net.NamingProxy.reqApi(NamingProxy.java:498) ~[nacos-client-1.4.1.jar:na]
	at com.alibaba.nacos.client.naming.net.NamingProxy.reqApi(NamingProxy.java:493) ~[nacos-client-1.4.1.jar:na]
	at com.alibaba.nacos.client.naming.net.NamingProxy.registerService(NamingProxy.java:246) ~[nacos-client-1.4.1.jar:na]

環境

  • NacosServer 版本:2.0.3
  • NacosServer叢集部署方式:在windows11下啟動三個例項,分別執行在8848,8858,8868埠上面,三個例項連線同一個MySQL資料庫
  • NacosClient為 SpringBoot 程式,使用 SpringInitializr 建立,未引入其他無關依賴
  • SpringBoot版本:2.5.3
  • SpringCloud版本:2020.0.3
  • SpringCloudAlibaba版本:2021.1
  • 筆記本:酷睿I5-11代,RAM-16G

叢集配置

cluster.conf

127.0.0.1:8848
127.0.0.1:8858
127.0.0.1:8868

解決辦法

刪除data資料夾重啟

Nacos 非常佔資源,Windows11 下,啟動就能把CPU佔到56%(酷睿I5-11代),啟動成功之後佔了1.7G的記憶體。此解決方法是百度出來的,首先停止 SpringBoot 程式、Nacos叢集;然後刪除三個例項下面的 data 資料夾並重新啟動叢集;最後重新啟動 SpringBoot。此時可以正常註冊到 Nacos 叢集中, 每一個例項中的服務列表中都有該 SpringBoot 服務。

修改cluster.conf檔案

本來以為上述方法已經可以解決此問題,畢竟【百度】出來的!可是過了一會之後又報400問題,中間(應該)沒有特別特殊的操作,無非(可能)就是重啟 SpringBoot 服務,修改 Nacos 的 application.properties 檔案和重啟叢集等等。

重新排查了一遍,發現NacosWebUI中的 叢集管理--->節點列表 中多了一個例項,變成了四個,重新檢視了叢集 cluster.conf, 發現每一個例項此配置檔案中都多了一行【192.168.1.169:8858】。這行(好像)不是我加的,但是不管怎麼說,這行都是不必須的,所以我決定刪除這行。首先停止 SpringBoot 程式、Nacos叢集;然後刪除三個例項下面的 data 資料夾,刪除 cluster.conf 檔案中無故(手殘新增)增加的那行,並重新啟動叢集;最後重新啟動 SpringBoot。此時可以正常註冊到 Nacos 叢集中, 每一個例項中的服務列表中都有該 SpringBoot 服務。

原因&原理

//todo

相關文章