前言
版本:
nacos 2.0.4、SpringCloud 2021.0.6.1
nacos有两种模式,单机模式(standalone)和集群模式(cluster)。
- 单机模式:适用于单机和测试环境。
- 集群模式:适用于生产环境,默认开启。
如果你是一个之前从来没有了解过nacos的小白,几乎所有教程都会告诉你要修改启动模式为单机模式(standalone)。
那么我就是要以集群模式启动呢?
本人非常无聊,现在就来探索一下nacos以集群模式启动,SpringCloud的微服务怎么能够连接上。
探索过程
直接启动
yml配置了nacos的连接信息,如下:
默认情况下,nacos是免密的,所以无需配置账号密码信息
spring:
application:
# 应用名称
name: keso-gateway
profiles:
# 环境配置
active: dev
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: 127.0.0.1:8848
config:
# 配置中心地址
server-addr: 127.0.0.1:8848
...
nacos默认就是以集群模式启动的,先启动一下,我们可以看到如下启动信息:
2025-04-10 08:34:34,800 INFO The server IP list of Nacos is []
然后出现启动失败,出现如下异常:
集群配置
这是因为集群的配置文件conf/cluster.conf没有配置。将默认的cluster.conf.example改名为cluster.conf,并配置其中的集群地址为:
127.0.0.1:8848
然后重新启动nacos,可看到如下信息:
2025-04-10 08:34:34,800 INFO The server IP list of Nacos is [127.0.0.1:8848]
nacos成功启动了。但是Spring Cloud的微服务启动时,依然无法连接到nacos,大概会报如下错误:
com.alibaba.nacos.api.exception.NacosException: Nacos cluster is running with 1.X mode, can't accept gRPC request temporarily. Please check the server status or close Double write to force open 2.0 mode. Detail https://nacos.io/en-us/docs/2.0.0-upgrading.html.
强制开启2.0模式
这个错误提示表明nacos集群正以1.X模式运行,暂时无法接受gRPC请求。我们可以关闭双写以强制开启2.0模式。在conf/application.properties添加如下配置信息即可:
nacos.core.remote.raft.enabled=false
再次启动nacos,我们发现启动信息又有所变化:
2025-04-10 08:37:55,019 INFO The server IP list of Nacos is [127.0.0.1:8848, 172.168.0.119:8848]
其中172.168.0.119是我的本机ipv4地址。再次启动微服务,发现还是报相同的错误:
com.alibaba.nacos.api.exception.NacosException: Nacos cluster is running with 1.X mode, can't accept gRPC request temporarily. Please check the server status or close Double write to force open 2.0 mode. Detail https://nacos.io/en-us/docs/2.0.0-upgrading.html.
ipv4地址
有没有可能,我们不应该用127.0.0.1而是应该用ipv4地址呢?
- 修改
conf/cluster.conf,仅保留ipv4地址
172.168.0.119:8848
2. 修改yml配置
spring:
application:
# 应用名称
name: keso-gateway
profiles:
# 环境配置
active: dev
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: 172.168.0.119:8848
config:
# 配置中心地址
server-addr: 172.168.0.119:8848
...
再次重启nacos,重启微服务,连接成功!
集群部署
什么时候业务上有需要再说吧……