同一臺機啓動多個nacos的問題

同一臺機使用不同的端口號,啓動多個Nacos節點時,會有jdk的堆棧不夠端口號衝突的問題。

 問題解決

1、解決jdk的堆棧不夠的問題

修改啓動腳本的堆棧大小:windows系統修改startup.bat,linux系統修改startup.sh,修改如下(具體數字可自行修改)

#修改前
set "NACOS_JVM_OPTS=-server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%BASE_DIR%\logs\java_heapdump.hprof -XX:-UseLargePages"

#修改後
set "NACOS_JVM_OPTS=-server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%BASE_DIR%\logs\java_heapdump.hprof -XX:-UseLargePages"

2、解決端口號衝突問題

觀察異常,如果出現 “Caused by: java.net.BindException: Address already in use: bind”,則應當屬於是端口號衝突的情況。

問題原因

nacos在2.0版本以後,除對外的端口外,還佔用另外3個端口,公式如下。

raft port: ${server.port} - 1000
grpc port: ${server.port} + 1000
grpc port for server: ${server.port} + 1001

假設對外端口爲8848,即總共會有4個端口被佔用,分別爲:7848=(8848-1000)88489848=(8848+1000)、9849=(8848+1001),

因此,在同一臺機要啓動多個nacos節點,要避開所有佔用的端口才可以,需要前後計算一下。

錯誤示範:假設要啓動2個nacos節點,對外端口分別設置爲 :800010000 看似兩個端口相差甚遠不會衝突,但是:

8000  節點啓動後佔用端口分別爲:7000 、8000、9000、9001

10000節點啓動後佔用端口分別爲:9000、10000、11000、11001

兩個節點間有重複端口:9000,因此這樣啓動nacos節點必然是不成功的,只能啓動一個,另一個啓動時拋 java.net.BindException 異常。

解決辦法

改成其他不衝突的端口即可,如將10000改爲12000即可。

12000節點啓動後佔用端口分別爲:11000、12000、13000、13001

參考

同一臺機啓動多個nacos的問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章