第一步,环境准备。
Nacos 因为选举算法的特殊性,要求最少三个节点才能组成一个有效的集群,关于选举算法我会在后面课程中进行讲解,感兴趣的同学可以持续关注。
Nacos 采用 Raft 选举算法构成集群
这里需要准备三台服务器(虚拟机)。
我为此准备了三个 CentOS 7 节点,符合最低运行要求,其 IP 地址分别为:
- 192.168.163.131
- 192.168.163.132
- 192.168.163.133
在这三个节点上安装好 JDK1.8,并配置 JAVA_HOME 环境变量,这些操作在上一节我们已经讲过,不再赘述。
此外还需要额外部署一台 MySQL 数据库用于保存 Nacos 的配置管理、权限控制信息。这里推荐版本为 MySQL5.7 或者 MySQL 8.0。在我这部署版本为 5.7,IP 地址为:192.168.163.100。
MySQL 5.7
第二步,下载安装 Nacos。
访问到 https://github.com/alibaba/nacos/releases/ 网址下载 Nacos 1.4.0 版本,上传到每一台 CentOS 服务器的 /usr/local 目录下,执行解压缩命令,生成 Nacos 目录
tar -xvf nacos-server-1.4.0.tar.gz。
第三步,配置数据库。
使用任意 MySQL 客户端工具连接到 192.168.163.100 MySQL 数据库服务器,创建名为nacos_config的数据库,之后使用 MySQL 客户端执行 /usr/local/nacos/conf/nacos-mysql.sql 文件,完成建表工作。
nacos_config 数据库初始化脚本
nacos_config 表结构
其中比较重要的表我们有必要了解一下。
- config* :所有 config 开头的表都是 Nacos 配置中心使用时保存应用配置的表。
- users:系统用户表,在集群环境下用户信息保存在 users 表中,而非在配置文件中。
- roles:系统角色表,Nacos 的权限基于 RBAC(基于角色的访问控制)模型设计,此表保存角色数据。
- permissions: 系统权限表,说明角色与系统使用权限的对应关系。
第四步,配置 Nacos 数据源。
依次打开 3 台 Nacos 服务器中的核心配置文件 application.properties,文件路径如下:
/usr/local/nacos/conf/application.properties
定位到 36 行 Count of DB “数据源”配置附近,默认数据源配置都被#号注释,删除注释按下方示例配置数据源即可。
### Count of DB: 数据库总数
db.num=1
### Connect URL of DB: 数据库连接,根据你的实际情况调整
db.url.0=jdbc:mysql://192.168.163.100:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=root
第五步,Nacos 集群节点配置
在 /nacos/config 目录下提供了集群示例文件cluster.conf.example
通过 cluster.conf.example 创建集群节点列表
首先利用复制命令创建 cluster.conf 文件。
cp cluster.conf.example cluster.conf
之后打开 cluster.conf,添加所有 Nacos 集群节点 IP 及端口。
192.168.163.131:8848
192.168.163.132:8848
192.168.163.133:8848
Nacos 通过 cluster.conf 了解集群节点的分布情况。
第六步,启动 Nacos 服务器。
在 3 台 Nacos 节点上分别执行下面的启动命令。
sh /usr/local/nacos/bin/startup.sh
注意,集群模式下并不需要增加“-m”参数,默认就是以集群方式启动。
启动时可以通过 tail 命令观察启动过程。
tail -f /usr/local/nacos/logs/start.out
启动日志关键内容如下:
#-Xms2g -Xmx2g 默认运行时 JVM 要求 2G 可用内存
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.275.b01-0.el7_9.x86_64/bin/java -server -Xms2g -Xmx2g ...
...
#列出 Nacos 所有集群节点
INFO The server IP list of Nacos is [192.168.163.131:8848, 192.168.163.132:8848, 192.168.163.133:8848]
...
#Nacos 正在启动
INFO Nacos is starting...
...
#集群模式启动成功,采用外置存储 MySQL 数据库
INFO Nacos started successfully in cluster mode. use external storage
当确保所有节点均启动成功,打开浏览器访问下面网址:
http://192.168.163.131:8848/nacos/#/clusterManagement?dataId=&group=&appName=&namespace=
登录后便可看到集群列表。
所有节点均已上线
UP 代表节点已就绪,DOWN 代表节点已离线,目前所有节点均已就绪。
第七步,微服务接入。
在开发好的微服务程序中,在 application.properties 配置 Nacos 集群的任意节点都可以完成接入工作,Nacos 内置的数据同步机制会保证各节点数据一致性。
# 应用名称,默认也是在微服务中注册的微服务 ID
spring.application.name=sample-service
# 配置 192.168.163.131/132/133 都可以接入 Nacos
spring.cloud.nacos.discovery.server-addr=192.168.163.131:8848,192.168.163.132:8848,192.168.163.133:8848
#连接 Nacos 服务器使用的用户名、密码,默认为 nacos
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discvery.password=nacos
#微服务提供 Web 服务的端口号
server.port=9000
启动微服务后,访问下面三个 URL,会发现服务列表的结果是一致的,这也证明集群模式下 Nacos 能够保证各节点的数据同步。
http://192.168.163.131:8848/nacos/#/serviceManagement?dataId=&group=&appName=&namespace=
http://192.168.163.132:8848/nacos/#/serviceManagement?dataId=&group=&appName=&namespace=
http://192.168.163.133:8848/nacos/#/serviceManagement?dataId=&group=&appName=&namespace=
Nacos 集群节点信息保持同步
到这里 Nacos 集群的主体配置工作已完成,但仅会部署是远不够的,我们还需了解集群的内部运行机制。