这是我参与11月更文挑战的第18天,活动详情查看:2021最后一次更文挑战
本节详细探讨如何搭建一个生产可用的Nacos集群。讨论的内容主要包括:使用MySQL作为存储持久化数据,以及如何搭建Nacos集群。
一、部署架构图
部署架构图如下:
二、安装MySQL数据库
生产环境需使用MySQL作为后端存储,因此需要搭建MySQL。生产中,MySQL建议至少主备模式,高可用MySQL更佳。
- 高可用MySQL搭建方案有很多(例如MMM、MHA、Galera Cluster、MySQL NDB Cluster、MySQL InnoDB Cluster 以及 Group Replication 等),不同方案搭建方式不同。所以MySQL集群的搭建本文就不赘述了,请同学们自行百度。
- 常见高可用方案对比可参考 《MySQL高可用方案选型参考》
注:建议使用MySQL 5.6.5+
2.1 导入初始化脚本
找到 conf/nacos-mysql.sql
,将其导入到数据库中。
2.2 配置数据库连接
找到 conf/application.properties
,添加如下内容:
# 表明用MySQL作为后端存储
spring.datasource.platform=mysql
# 有几个数据库实例
db.num=2
# 第1个实例的地址
db.url.0=jdbc:mysql://192.168.8.1:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
# 第2个实例的地址
db.url.1=jdbc:mysql://192.168.12.2:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456
复制代码
三、主机规划
3.1 定义集群部署的ip和端口,即cluster.conf文件
cluster.conf文件如下所示:
192.168.8.2:8848
192.168.8.3:8849
192.168.8.4:8850
复制代码
实际项目中,应该为nacos集群规划多台服务器,然后搭建过程也是一致的,只要把IP改成你对应的服务器IP就OK了。
3.2 给每个服务器配置一个Nacos文件
复制三份Nacos安装包,将 conf/application.properties
中的
server.port=8848
复制代码
分别改为:
server.port=8848
server.port=8849
server.port=8850
复制代码
3.3 启动每个Nacos
直接运行脚本 ./startup.sh 不用加 -m standalone
四、配置Nginx
完成上面的配置后,已经基本完成集群搭建的90%了,这里我们可以通过Nginx配置,为Nacos提供统一的入口,来实现一个简单的负载均衡。
Nginx配置如下
upstream nacos-server {
server 192.168.8.2:8848;
server 192.168.8.3:8849;
server 192.168.8.4:8850;
}
server {
listen 8847;
server_name localhost;
location /nacos/
{
proxy_pass http://nacos-server/nacos/;
}
}
复制代码
执行命令 sudo nginx
启动nginx。
通过8847端口访问Nacos后台,此时Nginx会将请求分发至nacos-server
下的地址中,这里默认的分发策略是线性轮询
。
五、有可能会遇到的问题
在集群搭建完成后,启动nacos客户端进行服务注册时报错,提示服务端没有启动,稍后再试
,如下:
code:503 msg: server is STARTING now, please try again later!
- 后台可访问只能说明
nacos-consloe
模块启动成功 - 无法注册服务
nacos-naming
模块可能启动失败了
解决办法如下:
- 修改hosts,在hosts文件中添加
yourip hostname
,例如:10.1.8.27 lars
- 修改cluster.conf,修改集群配置文件,全部用实际ip+端口的方式,而非
127.0.0.1
参考: Nacos支持三种部署模式
感谢: