Nacos的单节点模式(standalone),配置的数据是默认存储到内嵌的数据库derby中。如果我们要搭建集群的话,数据需要共享,此时内嵌数据库无法满足,需要将Nacos对接Mysql进行数据存储。同时因为有多个节点,我们需要可以使用nginx进行负载均衡,代理多个节点,如下图:
我在这里演示如何搭建伪集群,生产环境部署类似,只需要将ip改为每台服务器的ip即可,同时端口也可以都使用相同的。
新建集群安装目录
mkdir nacos_cluster
下载nacos安装包
cd nacos_cluster
wget https://github.com/alibaba/nacos/releases/download/1.3.1/nacos-server-1.3.1.zip
解压
unzip nacos-server-1.3.1.zip
数据库初始化
将nacos/conf目录下的schema.sql导入mysql数据库中,默认创建数据库:nacos,表:
config_info |
config_info_aggr |
config_info_beta |
config_info_tag |
config_tags_relation |
group_capacity |
his_config_info |
permissions |
roles |
tenant_capacity |
tenant_info |
users |
修改配置
# 连接mysql
vim nacos/conf/application.properties
# 将mysql相关配置的注释放开,用户名密码改为自己的数据库用户名和密码,如下:
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.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=root
db.password=mysql
# 集群配置改名
mv cluster.conf.example cluster.conf
# 更改集群配置ip和端口
vim cluster.conf
# 改为自己机器ip,我的机器ip为:192.168.0.103
192.168.0.103:8848
192.168.0.103:8849
192.168.0.103:8850
复制三个节点
mv nacos nacos_8848
cp -r nacos_8848 nacos_8849
cp -r nacos_8848 nacos_8850
# 修改端口
vim nacos_8849/conf/application.properties
server.port=8848 改为 server.port=8849
vim nacos_8850/conf/application.properties
server.port=8848 改为 server.port=8850
启动三个节点
在windows中(默认启动时单机版本)以集群方式启动:startup.cmd -m cluster
在mac/linux中(默认启动时集群版本)以集群方式启动:startup.sh
nginx代理配置
upstream nacos {
server 127.0.0.1:8848;
server 127.0.0.1:8849;
server 127.0.0.1:8850;
}
server {
listen 80;
server_name localhost;
location ^~ /nacos {
proxy_pass http://nacos;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
检查
浏览器访问:http://127.0.0.1/nacos
用户名:nacos 密码:nacos
查看集群管理-节点列表,可以看到三个节点,并且其中一个节点的状态为:LEADER,至此nacos伪集群搭建完毕。