# Nacos 的集群化部署
前面的介绍中,我们并未对 Nacos 服务端做任何特殊的配置,一切均以默认的单机模式运行,但是单机运行模式仅适用于学习与测试环境,对于有高可用要求的生产环境显然是不合适的。那我们怎么搭建支持高可用的集群环境呢?
在搭建 Nacos 集群前,我们需要先修改 Nacos 的数据持久化配置为 MySQL 存储。默认情况下,Nacos 使用内嵌的数据库 Derby 实现数据的存储,这种情况下,如果启动多个默认配置下的 Nacos 节点,数据存储是存在一致性问题的。为了解决这个问题,Nacos 采用了集中式存储的方式来支持集群化部署,但目前 Nacos 只支持 MySQL 的存储,且版本要求:5.6.5+
# 1、Nacos 配置的持久化:
(1)初始化 MySQL 数据库:
首先在 MySQL 中新建一个数据库 nacos-config(名称随意),然后执行 Nacos 中的 SQL 脚本,该脚本是 Nacos-server 的 conf 文件夹中的 nacos-mysql.sql,如下图:
执行该脚本,将会自动创建表,如下图:
(2)修改 conf/application.properties 配置文件:
Nacos-server 也是一个 Spring Boot 项目,想要连接自己的数据库,当然要配置数据源了,配置文件同样在 Nacos-server 中的 conf 目录下,如下图:
只需要将 application.properties 中的 Mysql 配置成自己的数据源并重启 Nacos-server 即可 ,如下:
# 此项一定要启用,默认是注释掉的 | |
spring.datasource.platform=mysql | |
# 注意MySQL8.0以上版本指定url时一定要带入serverTimezone参数 | |
db.num=1 | |
db.url.0=jdbc:mysql://localhost:3306/nacos_config?serverTimezone=Asia/Shanghai&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true | |
db.user=root | |
db.password=123456 | |
# 可选启用配置 | |
nacos.cmdb.dumpTaskInterval=3600 | |
nacos.cmdb.eventTaskInterval=10 | |
nacos.cmdb.labelTaskInterval=300 | |
nacos.cmdb.loadDataAtStart=false |
# 2、Nacos 集群化部署:
Nacos 官方推荐在生产环境使用集群模式部署,这样可以避免单点故障,集群化部署的架构图如下:
请求先通过 Nginx 集群进行转发到 Nacos 集群中,当然为了保持高可用,数据库也需要是集群模式。那么接下来我们就演示下搭建 Nacos 集群的方法。
由于条件限制,我们仅在一台服务器上启动三个 Nacos 服务演示。Nacos 的端口分别为 8848、8849、8850。
(1)修改端口号:
Nacos 默认的端口号是 8848,那么如何修改端口呢?只需要修改 conf 目录下的 application.properties 中的 server.port 即可,如下图:
(2)修改集群配置:
那么如何配置集群呢?在 conf 目录下有一个 cluster.conf.example 文件,如下图:
只需要将 cluster.conf.example 这个文件复制一份为 cluster.conf 放在 conf 目录下,其中配置的内容如下:
172.16.1.84:8848 | |
172.16.1.84:8849 | |
172.16.1.84:8850 |
(3)修改数据源:
这个在持久化的那里已经讲过了,只需要将 application.properties 中的数据源替换掉,如下:
# 此项一定要启用,默认是注释掉的 | |
spring.datasource.platform=mysql | |
# 注意MySQL8.0以上版本指定url时一定要带入serverTimezone参数 | |
db.num=1 | |
db.url.0=jdbc:mysql://localhost:3306/nacos_config?serverTimezone=Asia/Shanghai&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true | |
db.user=root | |
db.password=123456 | |
# 可选启用配置 | |
nacos.cmdb.dumpTaskInterval=3600 | |
nacos.cmdb.eventTaskInterval=10 | |
nacos.cmdb.labelTaskInterval=300 | |
nacos.cmdb.loadDataAtStart=false |
(4)启动 Nacos:
经过上述的步骤 Nacos 集群已经配置好了,启动 Nacos 成功后,访问任意一个端口的 Nacos 服务,在 “集群管理 -> 节点列表” 中将会看到自己搭建的三个节点,如下图:
至此,Nacos 集群算是搭建完成了
(5)Nginx 中的配置:
此处就不演示 Nginx 集群搭建了,直接在单机的 Nginx 中配置。直接修改 nginx 的 conf 文件,内容如下:
upstream nacos{ | |
server 172.16.1.84:8848; | |
server 172.16.1.84:8849; | |
server 172.16.1.84:8850; | |
} | |
server{ | |
listen 80; | |
location / { | |
proxy_pass http://nacos; | |
} | |
} |
(6)项目中配置 server-addr:
既然搭建了集群,那么项目中也要配置一下,有两种方式,下面分别介绍:
第一种:通过直连的方式配置,如下:
spring: | |
application: | |
## 指定服务名称,在nacos中的名字 | |
name: cloud-producer-server | |
cloud: | |
nacos: | |
discovery: | |
# nacos的服务地址,nacos-server中IP地址:端口号 | |
server-addr: 172.16.1.84:8848,172.16.1.84:8849,172.16.1.84:8850 |
第二种:直接连接 Nginx,如下:
spring: | |
application: | |
## 指定服务名称,在nacos中的名字 | |
name: cloud-producer-server | |
cloud: | |
nacos: | |
discovery: | |
# nacos的服务地址,nacos-server中IP地址:端口号 | |
server-addr: 172.16.1.84:80 |
Nacos 集群搭建非常简单,唯一的配置就是在 cluster.conf 中设置三个 Nacos 服务的地址。