Nacos集群搭建

一、下载 Nacos Server

Nacos Server 的安装包可以从 Alibaba 官方 GitHub 中的Release 页面下载。当前最新的稳定版本是 2.0.3,我的项目也使用该版本的 Nacos 做为注册中心和配置中心。在选择 Nacos 版本的时候你要注意,一定要选择稳定版使用,不要选择版本号中带有 BETA 字样的版本(比如 2.0.0-BETA)。后者通常是重大版本更新前预发布的试用版,往往会有很多潜在的 Bug 或者兼容性问题。Nacos 2.0.3 Release note 下方的 Assets 面板中包含了该版本的下载链接,你可以在 nacos-server-2.0.3.tar.gz 和 nacos-server-2.0.3.zip 这两个压缩包中任选一个下载。如果你对 Nacos 的源码比较感兴趣,也可以下载 Source code 源码包来学习。

下载完成后,你可以在本地将 Nacos Server 压缩包解压,并将解压后的目录名改为“nacos-cluster1”,再复制一份同样的文件到 nacos-cluster2,我们以此来模拟一个由两台 Nacos Server 组成的集群。

二、修改启动项参数

Nacos Server 的启动项位于 conf 目录下的 application.properties 文件里,别看这个文件里的配置项密密麻麻一大串,但大部分都不用你操心,直接使用默认值就好。你只需要修改这里面的服务启动端口和数据库连接串就好了。

因为你需要在一台机器上同时启动两台 Nacos Server 来模拟一个集群环境,所以这两台 Nacos Server 需要使用不同的端口,否则在启动阶段会报出端口冲突的异常信息。Nacos Server 的启动端口由 server.port 属性指定,默认端口是 8848。

我们在 nacos-cluster1 中仍然使用 8848 作为默认端口,你只需要把 nacos-cluster2 中的端口号改掉就可以了,这里我把它改为 8948。

接下来,你需要对 Nacos Server 的 DB 连接串做一些修改。在默认情况下,Nacos Server 会使用 Derby 作为数据源,用于保存配置管理数据。Derby 是 Apache 基金会旗下的一款非常小巧的嵌入式数据库,可以随 Nacos Server 在本地启动。但从系统的可用性角度考虑,我们需要将 Nacos Server 的数据源迁移到更加稳定的MySQL 数据库中。

需要修改三处 Nacos Server 的数据库配置。

  • 指定数据源:spring.datasource.platform=mysql 这行配置默认情况下被注释掉了,它用来指定数据源为 mysql,你需要将这行注释放开;

  • 指定 DB 实例数:放开 db.num=1 这一行的注释;

  • 修改 JDBC 连接串:db.url.0 指定了数据库连接字符串,我指向了 localhost 3306 端口的 nacos 数据库,稍后我将带你对这个数据库做初始化工作;db.user.0 和 db.password.0 分别指定了连接数据库的用户名和密码,我使用了默认的无密码 root 账户。

    spring.datasource.platform=mysql
    db.num=1
    db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC#
    db.user.0=root
    db.password.0=
    

下面的图是完整的数据库配置项。

三、创建 DB Schema 和 Table

Nacos Server 的数据库用来保存配置信息、Nacos Portal 登录用户、用户权限等数据,下面我们分两步来创建数据库。

第一步,创建 Schema。第一步,创建 Schema。你可以通过数据库控制台或者 DataGrip 之类的可视化操作工具,执行下面这行 SQL 命令,创建一个名为 nacos 的 schema。

create schema nacos;

第二步,创建数据库表。Nacos 已经把建表语句准备好了,就放在你解压后的 Nacos Server 安装目录中。打开 Nacos Server 安装路径下的 conf 文件夹,找到里面的 nacos-mysql.sql 文件,你所需要的数据库建表语句都在这了。你也可以直接到源码仓库的资源文件中获取 Nacos 建表语句的 SQL 文件。

将文件中的 SQL 命令复制下来,在第一步中创建的 schema 下执行这些 SQL 命令。执行完之后,你就可以在在数据库中看到这些 tables 了,总共有 12 张数据库表。

四、添加集群机器列表

Nacos Server 可以从一个本地配置文件中获取所有的 Server 地址信息,从而实现服务器之间的数据同步。

所以现在我们要在 Nacos Server 的 conf 目录下创建 cluster.conf 文件,并将 nacos-cluster1 和 nacos-cluster2 这两台服务器的 IP 地址 + 端口号添加到文件中。下面是我本地的 cluster.conf 文件的内容。

## 注意,这里的IP不能是localhost或者127.0.0.1
192.168.1.100:8848
192.168.1.100:8948

这里需要注意的是,你不能在 cluster.conf 文件中使用 localhost 或者 127.0.0.1 作为服务器 IP,否则各个服务器无法在集群环境下同步服务注册信息。这里的 IP 应该使用你本机分配到的内网 IP 地址。

五、启动 Nacos Server

Nacos 的启动脚本位于安装目录下的 bin 文件夹,下图是 bin 目录下的启动脚本。其中 Windows 操作系统对应的启动脚本和关闭脚本分别是 startup.cmd 和 shutdown.cmd,Mac 和 Linux 系统对应的启动和关闭脚本是 startup.shshutdown.sh

 sh startup.sh -m standalone

通过 -m standalone 参数,我指定了服务器以单机模式启动。Nacos Server 在单机模式下不会主动向其它服务器同步数据,因此这个模式只能用于开发和测试阶段,对于生产环境来说,我们必须以 Cluster模式启动。

如果希望将 Nacos Server 以集群模式启动,只需要在命令行直接执行 sh startup.sh 命令就可以了。这时控制台会打印以下两行启动日志。

nacos is starting with cluster
nacos is starting,you can check the /Users/banxian/workspace/dev/middleware/nacos-cluster1/logs/start.out

这两行启动日志没有告诉你 Nacos Server 最终是启动成功还是失败,不过你可以在第二行日志中找到一些蛛丝马迹。这行日志告诉了我们启动日志所在的位置是 nacos-cluster1/logs/start.out,在启动日志中你可以查看到一行成功消息“Nacos started successfully in cluster mode”。当然了,如果启动失败,你也可以在这里看到具体的 Error Log。

我们用同样的方式先后启动 nacos-cluster1 和 nacos-cluster2,如上图所示,在启动日志中显示了成功消息“started successfully in cluster mode”,这代表服务器已经成功启动了,接下来你就可以登录 Nacos 控制台了。

六、登录 Nacos 控制台

在 Nacos 的控制台中,我们可以看到服务注册列表、配置项管理、集群服务列表等信息。在浏览器中打开nacos-cluster1或者nacos-cluster2的地址,注意这两台服务器的端口分别是 8848 和 8948。你可以看到下面的 Nacos 的登录页面。

你可以使用 Nacos 默认创建好的用户 nacos 登录系统,用户名和密码都是 nacos。当然了,你也可以在登录后的权限控制 -> 用户列表页面新增系统用户。成功登录后,你就可以看到 Nacos 控制台首页了。

为了验证集群环境处于正常状态,你可以在左侧导航栏中打开“集群管理”下的“节点列表”页面,在这个页面上显示了集群环境中所有的 Nacos Server 节点以及对应的状态,在下面的图中我们可以看到 192.168.1.100:8848 和 192.168.1.100:8948 两台服务器,并且它们的节点状态都是绿色的“UP”,这表示你搭建的集群环境一切正常。