同一台机启动多个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的问题

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