Nacos集群搭建

Nacos集群搭建


1. 集群结构图

官方给出的Nacos集群图:

image-20210409210621117

其中包含3个nacos节点,然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。

计划的集群结构:

image-20210409211355037

三个nacos节点的地址:

节点 ip port
nacos1 192.168.80.1 8845
nacos2 192.168.80.1 8848
nacos3 192.168.80.1 9956

2. 搭建集群


搭建集群的基本步骤:

  • 搭建数据库,初始化数据库表结构
  • 下载nacos安装包
  • 配置nacos
  • 启动nacos集群
  • nginx反向代理

2.1 初始化数据库

Nacos默认数据存储在内嵌数据库Derby中,不属于生产可用的数据库。

官方推荐的最佳实践是使用带有主从的高可用数据库集群,这里采用单点的数据库。

2.2 配置Nacos

将这个包解压到任意非中文目录下,如图:

image-20210402161843337

目录说明:

  • bin:启动脚本
  • conf:配置文件

进入nacos的conf目录,修改配置文件cluster.conf.example,重命名为cluster.conf:

image-20210409212459292

然后添加内容:

1
2
3
192.168.80.1:8845
192.168.80.1:8848
192.168.80.1:9956

这里使用实际ip,在nacos2+中使用loaclhost/127.0.0.1可能出现启动异常。此外,端口不要采用连续的,尽量跨度大,不然启动多个nacos可能有无法启动的。

然后修改application.properties文件,添加数据库配置

1
2
3
4
5
6
7
8
9
10
11
12
### If use MySQL as datasource:
### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
spring.datasource.platform=mysql
# spring.sql.init.platform=mysql

### Count of DB:
db.num=1

### Connect URL of DB:
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=24211

2.3 启动

将nacos文件夹复制三份,分别命名为:nacos1、nacos2、nacos3

image-20210409213335538

然后分别修改三个文件夹中的application.properties,

nacos1:

1
server.port=8845

nacos2:

1
server.port=8848

nacos3:

1
server.port=9956

然后分别启动三个nacos节点:

1
startup.cmd

2.5 nginx反向代理

下载nginx解压到任意非中文目录下:

image-20210410103322874

修改conf/nginx.conf文件,配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
upstream nacos-cluster {
server 192.168.80.1:8845;
server 192.168.80.1:8848;
server 192.168.80.1:9956;
}

server {
listen 80;
server_name localhost;

location /nacos {
proxy_pass http://nacos-cluster;
}
}

而后在浏览器访问:http://localhost/nacos即可。

在Java代码中application.yml文件配置如下:

1
2
3
4
5
6
7
spring:
cloud:
nacos:
discovery:
server-addr: 192.168.80.1:80/nacos # Nacos地址
config:
file-extension: yaml # 文件后缀名