一、前言
前面已经对SpringCloudAlibaba这个微服务组合框架进行了初步的学习,nacos是必不可少的一个组件。安装部署nacos渐渐地成了我们程序员的一个基本功,或者说是有没有真正使用过或运用过的一个参考的标志。近期在实施一个项目,公司产品采用集群模式部署nacos,听说这个部署很麻烦,处于好奇,今天抽时间一探究竟。
二、环境准备
2.1 版本说明
组件 | 版本 | 备注 |
---|---|---|
cantos | CentOS Linux release 7.9.2009 (Core) | 安装参考 《win10搭建Vagrant+VirtualBox环境》 |
nacos | 2.2.1 | |
mysql | 5.7.41 | 部署参考 《linux下安装mysql-5.7.23详细步骤》 |
jdk | 1.8.0_251 |
2.2 服务部署规划
主机名 | IP | 部署端口 | 路径 | 说明 |
---|---|---|---|---|
node01 | 192.168.33.11 | 8848 | /opt/nacos | nacos1 |
node02 | 192.168.33.12 | 8848 | /opt/nacos | nacos2 |
node03 | 192.168.33.13 | 8848 | /opt/nacos | nacos3 |
node04 | 192.168.33.14 | 3306 | /opt/mysql | mysql数据库服务 |
三、部署安装
3.1 安装包准备
将压缩包拷贝到/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 | nacos.core.auth.system.type=nacos |
注意
:在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 | ### 开启鉴权 |
注意
:所有集群均需要配置相同的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 | spring: |
由于我们部署使用了最新版的nacos,为了适配,这里需要对项目中的Spring Boot和Spring Cloud Alibaba的版本做升级,具体如下:
类型 | 版本 |
---|---|
Spring Boot Version | 2.3.12.RELEASE |
Spring Cloud Alibaba Version | 2.2.10-RC1 |
提示:具体版本适配情况,可以参考 官网版本说明
编译成功,启动consumer、provider,可以看到已经注册到nacos
我们访问 http://127.0.0.1:8901/consume/hello/wno ,可以看到具体调用记录如下: