Nacos 简单使用
Nacos 是什么
Nacos(Naming and Configuration Service)是阿里巴巴的一个开源项目,也是 Spring Cloud Alibaba 的一个重要组件。专注于服务发现和配置管理领域。
注意:如果中途发现操作过程一样但还是报错,很有可能是版本号不一致(新版本不一定兼容老版本)。
部署 Nacos 服务器
Nacos 作为 Spring Cloud Alibaba 的一个组件,版本号自然也一定要选择正确,参考 官方版本说明
Spring Cloud Alibaba Version | Sentinel Version | Nacos Version | RocketMQ Version | Dubbo Version | Seata Version |
---|---|---|---|---|---|
2021.0.1.0* | 1.8.3 | 1.4.2 | 4.9.2 | 2.7.15 | 1.4.2 |
2.2.7.RELEASE | 1.8.1 | 2.0.3 | 4.6.1 | 2.7.13 | 1.3.0 |
2.2.6.RELEASE | 1.8.1 | 1.4.2 | 4.4.0 | 2.7.8 | 1.3.0 |
2021.1 or 2.2.5.RELEASE or 2.1.4.RELEASE or 2.0.4.RELEASE | 1.8.0 | 1.4.1 | 4.4.0 | 2.7.8 | 1.3.0 |
2.2.3.RELEASE or 2.1.3.RELEASE or 2.0.3.RELEASE | 1.8.0 | 1.3.3 | 4.4.0 | 2.7.8 | 1.3.0 |
2.2.1.RELEASE or 2.1.2.RELEASE or 2.0.2.RELEASE | 1.7.1 | 1.2.1 | 4.4.0 | 2.7.6 | 1.2.0 |
2.2.0.RELEASE | 1.7.1 | 1.1.4 | 4.4.0 | 2.7.4.1 | 1.0.0 |
2.1.1.RELEASE or 2.0.1.RELEASE or 1.5.1.RELEASE | 1.7.0 | 1.1.4 | 4.4.0 | 2.7.3 | 0.9.0 |
2.1.0.RELEASE or 2.0.0.RELEASE or 1.5.0.RELEASE | 1.6.3 | 1.1.1 | 4.4.0 | 2.7.3 | 0.7.1 |
Nacos 软件直接上 GitHub 下载即可,项目地址为 Releases · alibaba/nacos (github.com)
下载完毕后解压,进入 bin 目录,然后运行单机模式
1 | sh startup.sh -m standalone //Linux |
启动成功后,浏览器输入 http://localhost:8848/nacos 即可打开 Nacos 管理面板,账号和密码默认都是 nacos
搭建 Nacos 客户端
由于 Spring Cloud Alibaba 版本控制器中默认集成了 Nacos,所以在导入时不需要提供版本号
1 | <!--导入Nacos注册与发现中心--> |
修改 application.yml 配置文件
1 | server: |
当有了此配置后,当服务启动时就会自动注册进入 Nacos 注册中心

增加配置类
当有消费者要调用注册中心的服务时,必须配置一个负载均衡策略,Spring Cloud Alibaba 默认的负载均衡器是 Ribbon,只需要在 RestTemplate 的 Bean 上加上 @LoadBalanced 注解即可开启它的负载均衡器
1 |
|
此时就可以通过服务名调用 Nacos 注册中心中已经注册的服务了
在 controller 中调用注册中心的模块
1 |
|
至此,Nacos-Client 环境搭建成功
Nacos 配置参数
Nacos 参数的配置主要在 application.yml 中进行,文档可参考 Nacos-discovery/wiki,主要配置项如下:
配置项 | Key | 默认值 | 说明 |
---|---|---|---|
服务端地址 | spring.cloud.nacos.discovery.server-addr |
无 | Nacos Server 启动监听的ip地址和端口 |
服务名 | spring.cloud.nacos.discovery.service |
${spring.application.name} | 给当前的服务命名 |
服务分组 | spring.cloud.nacos.discovery.group |
DEFAULT_GROUP | 设置服务所处的分组 |
权重 | spring.cloud.nacos.discovery.weight |
1 | 取值范围 1 到 100,数值越大,权重越大 |
网卡名 | spring.cloud.nacos.discovery.network-interface |
无 | 当IP未配置时,注册的IP为此网卡所对应的IP地址,如果此项也未配置,则默认取第一块网卡的地址 |
注册的IP地址 | spring.cloud.nacos.discovery.ip |
无 | 优先级最高 |
注册的端口 | spring.cloud.nacos.discovery.port |
-1 | 默认情况下不用配置,会自动探测 |
命名空间 | spring.cloud.nacos.discovery.namespace |
无 | 常用场景之一是不同环境的注册的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。 |
AccessKey | spring.cloud.nacos.discovery.access-key |
无 | 当要上阿里云时,阿里云上面的一个云账号名 |
SecretKey | spring.cloud.nacos.discovery.secret-key |
无 | 当要上阿里云时,阿里云上面的一个云账号密码 |
Metadata | spring.cloud.nacos.discovery.metadata |
无 | 使用Map格式配置,用户可以根据自己的需要自定义一些和服务相关的元数据信息 |
日志文件名 | spring.cloud.nacos.discovery.log-name |
无 | |
集群 | spring.cloud.nacos.discovery.cluster-name |
DEFAULT | 配置成Nacos集群名称 |
接入点 | spring.cloud.nacos.discovery.enpoint |
UTF-8 | 地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址 |
是否集成Ribbon | ribbon.nacos.enabled |
true | 一般都设置成true即可 |
是否开启Nacos Watch | spring.cloud.nacos.discovery.watch.enabled |
true | 可以设置成false来关闭 watch |
Nacos 集群部署
之前使用的 ./startup.sh -m standalone
命令就是以单机模式启动 nacos 服务器。但是当我们用到微服务架构时,往往是项目规模达到了一定的程度。所以在真正使用的时候,大部分情况下都是以集群方式进行部署的,参考文档
下载若干个 nacos 服务器
这里以三个为例,给他们重命名,建议在名字后面加上端口号方便区分:
注意:单机集群启动的时候不能使用连续的端口了,会报错
修改 application.properties 配置文件
在这一步需要配置数据源为 MySQL,因为 Nacos 内部使用的数据源 Hikari。我们要想搭建集群,就必须使用同一数据源(类似于 Scrapy 的分布式爬虫)
如下配置:
1 | #*************** Config Module Related Configurations ***************# |
修改三个 nacos 的端口:
1 | ### Default web server port: |
修改 cluster.conf.example
先将其复制一份为 cluster.conf,然后再进行修改
主要就是添加 nacos 集群节点
例如:
1 | #it is ip |
创建 MySQL 数据库
按照其要求创建 MySQL 数据库,并执行他所提供的 sql 文件(nacos-mysql.sql)
执行完之后表结构大致如下:
修改项目 application.yml 文件
官方推荐集群部署后使用VIP或者域名访问,不过也可以使用直连模式:
1 | spring: |
至此,就实现了 Nacos 的集群部署。接下来,我们也可以使用负载均衡软件如 Nginx 来进行集群的负载均衡。
使用 nginx 进行反向代理
修改 /etc/nginx/nginx.conf 文件
1 | # Nacos |
启动所有 nacos 服务器,并启动 nginx,理论上打开浏览器 http://localhost:8847/nacos
登录后即可看到如下效果:
nginx 默认的负载均衡机制是轮询方式,所以理论上请求时就会在三台服务器之间来回跳
至此,Nacos 集群环境就搭建好了,修改项目的 Nacos 地址配置文件:
1 | spring: |
启动对应服务,OK,日常报错:
查看官方文档,发现 2.x 版本和 1.x 版本还不太一样:
Nacos2.0版本相比1.X新增了gRPC的通信方式,因此需要增加2个端口。新增端口是在配置的主端口(server.port)基础上,进行一定偏移量自动生成。
端口 | 与主端口的偏移量 | 描述 |
---|---|---|
9847 | 1000 | 客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求 |
9848 | 1001 | 服务端gRPC请求服务端端口,用于服务间同步等 |
使用VIP/nginx请求时,需要配置成TCP转发,不能配置http2转发,否则连接会被nginx断开。
(图片来源于网络,侵删)
注意:使用 Nginx 配置 tcp 转发时需要用到 stream 模块,而 Nginx 在安装时是默认不编译 stream 模块的,需要我们手动安装
成功安装之后查看:
接下来配置 nginx 的 tcp 转发:
- 修改 nginx.conf,在最后一行加上
include /usr/local/nginx/tcp.d/*.conf;
,注意不要写在 http 里 - 新建 /usr/local/nginx/tcp.d/tcp.conf
- 编辑 tcp.conf 文件
1 | # tcp.conf |
- 修改项目的 Nacos 地址配置文件:
1 | spring: |
启动服务,完成!