一、前言

前面已经对SpringCloudAlibaba这个微服务组合框架进行了初步的学习,nacos是必不可少的一个组件。安装部署nacos渐渐地成了我们程序员的一个基本功,或者说是有没有真正使用过或运用过的一个参考的标志。近期在实施一个项目,公司产品采用集群模式部署nacos,听说这个部署很麻烦,处于好奇,今天抽时间一探究竟。

二、环境准备

2.1 版本说明

组件版本备注
cantosCentOS Linux release 7.9.2009 (Core)安装参考 《win10搭建Vagrant+VirtualBox环境》
nacos2.2.1
mysql5.7.41部署参考 《linux下安装mysql-5.7.23详细步骤》
jdk1.8.0_251

2.2 服务部署规划

主机名IP部署端口路径说明
node01192.168.33.118848/opt/nacosnacos1
node02192.168.33.128848/opt/nacosnacos2
node03192.168.33.138848/opt/nacosnacos3
node04192.168.33.143306/opt/mysqlmysql数据库服务

三、部署安装

3.1 安装包准备

下载 nacos-server-2.2.1.tar.gz

将压缩包拷贝到/opt目录,进行解压

tar xvf nacos-server-2.2.1.tar.gz

3.2 配置

集群配置

进入到nacos的conf目录,我们将cluster.conf.example文件拷贝一份进行编辑,具体如下

cp cluster.conf.example cluster.conf

修改内容如下:

这里我们是在三台服务器上运行三台nacos服务实例,所以ip地址为上面规划的三个地址。

数据源配置

修改文件application.properties

vi application.properties

修改如下:

其实,后面跟不跟.0都是一样的,因为我们只配置了一台数据库。当然如果你配置了数据库的主备模式,也就是说有多台mysql的话,这里可以配置多个,此时就需要分别指定了。

在mysql中,创建nacos数据库,将目录下mysql-schema.sql导入到数据库中。

3.3 启动

如果启动报如下错误

具体原因是Nacos提供简单的鉴权实现,为防止业务错用的弱鉴权体系,我们需要开启鉴权,同时自定义用于生成JWT令牌的密钥,application.properties中的配置信息为。

1
2
nacos.core.auth.system.type=nacos
nacos.core.auth.enabled=true

注意:在2.2.0.1版本后,社区发布版本将移除以文档如下值作为默认值,需要自行填充,否则无法启动节点。自定义密钥时,推荐将配置项设置为Base64编码的字符串,且原始密钥长度不得低于32字符。在线base64生成 https://base64.us/

1
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789

继续启动,会提示

开启鉴权功能后,服务端之间的请求也会通过鉴权系统的影响。考虑到服务端之间的通信应该是可信的,因此在1.2~1.4.0版本期间,通过User-Agent中是否包含Nacos-Server来进行判断请求是否来自其他服务端。

但这种实现由于过于简单且固定,导致可能存在安全问题。因此从1.4.1版本开始,Nacos添加服务身份识别功能,用户可以自行配置服务端的Identity,不再使用User-Agent作为服务端请求的判断标准。

开启方式:

1
2
3
4
5
6
7
8
9
### 开启鉴权
nacos.core.auth.enabled=true

### 关闭使用user-agent判断服务端请求并放行鉴权的功能
nacos.core.auth.enable.userAgentAuthWhite=false

### 配置自定义身份识别的key(不可为空)和value(不可为空)
nacos.core.auth.server.identity.key=nacos
nacos.core.auth.server.identity.value=nacos

注意:所有集群均需要配置相同的server.identity信息,否则可能导致服务端之间数据不一致或无法删除实例等问题。具体可以参考 https://nacos.io/zh-cn/docs/v2/guide/user/auth.html

然后重新启动nacos

登录nacos控制台,查看集群如下:

提示: 由于本地使用虚拟机部署,ip是10.0.2.15,这个是因为我的服务器网络使用了双网卡:桥接+HostOnly模式。

四、测试

本章节测试我们使用 《Spring-Cloud-Alibaba-Nacos注册中心》 中nacos作为注册中心的例子。

修改consumer、provider中注册中心地址

1
2
3
4
spring:
cloud:
nacos:
server-addr: 192.168.33.11:8848,192.168.33.12:8848,192.168.33.13:8848

由于我们部署使用了最新版的nacos,为了适配,这里需要对项目中的Spring Boot和Spring Cloud Alibaba的版本做升级,具体如下:

类型版本
Spring Boot Version2.3.12.RELEASE
Spring Cloud Alibaba Version2.2.10-RC1

提示:具体版本适配情况,可以参考 官网版本说明

编译成功,启动consumer、provider,可以看到已经注册到nacos

我们访问 http://127.0.0.1:8901/consume/hello/wno ,可以看到具体调用记录如下: