同一台机启动多个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、9848、9849
因此,在同一台机启动多个nacos节点式,要避开所有占用的端口才可以。
错误示范:假设要启动2个nacos节点,对外端口分别设置为8847、8848 8847节点占用端口:7847、8847、9847、9848 8848节点占用端口:7848、8848、9848、9849 两个节点间有重复端口9848,因此这样启动nacos节点必然是不成功的,只能启动一个,另一个启动时抛java.net.BindException异常。
解决办法: 改成其他不冲突的端口即可,如将8847改为8846即可。
|