Nacos 集群配置与应用

Posted by aclyyx on 12-31,2021

起源

一直觉得集群是一件十分神秘的事物,只敢远观,不敢触碰。今回起了兴致,我就偏偏要戳他一戳。一戳,您猜怎么着?如丝般顺滑。

版本说明

Nacos:2.0.3 Release
Spring Boot:2.5.6
Spring Cloud:2020.0.4
Spring Cloud Alibaba:2021.1

Nacos 配置和启动

配置

配置过程并不复杂,Nacos官方原带有cluster.conf.example集群配置样例。只需要把它复制一份,命名为cluster.conf;编辑其中的 IP:PORT 使地址端口能与实际环境相符即可。
如:

192.168.1.20:8848
192.168.1.21:8848

再者,集群配置需要使用数据作为存储配置,开启 MySQL 配置,编辑application.properties文件,如下内容:

#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://192.168.1.20:3306/nacos-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456

别忘了把各个服务器中的 Nacos 都修改一遍。

启动

直接运行 Nacos 的 bin 目录中的启动命令
不要添加-m cluster参数。

startup.cmd      # Window
./startup.sh     # Linux

Spring Boot 配置

上面配置启动好 Nacos 服务后,接下来在 Spring Boot 应用中 配置 bootstrap.yml 文件。
在原先的基础上再添加 IP:PORT 就可以了(使用“,”分割)

# Spring
spring: 
  ... ...
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 192.168.1.20:8848,192.168.1.21:8848
      config:
        # 配置中心地址
        server-addr: 192.168.1.20:8848,192.168.1.21:8848

看疗效

启动 Spring Boot 服务后,打开任意一个 Nacos 服务地址(如http://192.168.1.20:8848/nacos

nacos集群1

可以看到服务已经在服务列表中已经可以看到服务注册进来了。

Linux 启动 Nacos 遇到的问题

在 Linux 中启动 Nacos 2.0.3 时启动失败,日志中显示如下:

错误: 找不到或无法加载主类 
原因: java.lang.ClassNotFoundException:

根据参考解决办法有2, 一是使用Java8版本,二是修改 Nacos 启动脚本;修改脚本方便如下,主要是取消JAVA_OPT_EXT_FIX的配置。

# JAVA_OPT_EXT_FIX="-Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${JAVA_HOME}/lib/ext"
JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${JAVA_HOME}/lib/ext"
  
# echo "$JAVA $JAVA_OPT_EXT_FIX ${JAVA_OPT}"
echo "$JAVA ${JAVA_OPT}"
  
# echo "$JAVA $JAVA_OPT_EXT_FIX ${JAVA_OPT}" > ${BASE_DIR}/logs/start.out 2>&1 &
# nohup "$JAVA" "$JAVA_OPT_EXT_FIX" ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 &

echo "$JAVA ${JAVA_OPT}" > ${BASE_DIR}/logs/start.out 2>&1 &
nohup "$JAVA" ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 &

参考

Nacos 集群 - 知乎
nacos在mac上部署提示找不到或无法加载主类