1.概述
在《Spring Cloud极简入门》应用架构演变一文中我们有提到,我们可以通过集群手段来实现来提高应用的作业能力,防止单节点故障。在之前的Nacos案例中我们玩的都是单机版的, 本片文章我们来探讨一下Nacos的集群部署。
在Nacos中数据默认是基于内存存储的,当Nacos重启数据(服务列表,配置列表)将会丢失,在Nacos中支持将数据持久到数据库。那么当我们对Nacos做了集群部署之后,多个Nacos节点之间是需要数据同步(数据共享)的,而正好Nacos节点之间的数据同步也是基于数据库来实现。所以我们要多Nacos做集群操作得向对Nacos做数据持久化。
这里我演示的是在centos7上面进行Nacos的集群部署,使用一个服务器上模拟三个Nacos的部署,你需要准备好centos7的环境,安装好JDK,配置好JAVA_HOME,安装好MySql数据库,同时我们会用到Nginx,请先安装好Nginx。
2.Nacos数据持久到Mysql
2.1.配置db信息
找到Nacos的安装目录,然后找到配置文件 : conf/application.properties
配置文件,添加db相关的信息如下:
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
db.user=root
db.password=123456
提示:这里选择的是mysql数据库,并且配置dataSource的四要素,数据库为Nacos。
2.2.创建相关表
在Nacos安装目录中有一个 conf/nacos-mysql.sql
脚本文件,这个是Nacos自带的,你需要创建一个数据库“nacos”
根我们上一个步骤配置的db.url中的数据库保持一致。(我这里用的MySql 5.5.25,你可以选择更高一点的版本)如下:
这里就是Nacos数据持久所需要的表,这里不详细所表的含义,你也可以不用关心。
2.3.小结
到这里其实我们已经完成了持久化的配置,Nacos中的数据会自动持久到Mysql中,重启Nacos也不怕数据的丢失,您可以自己测试一下看看 。数据持久化是Nacos集群的基石。
当然,要做集群是一定要做持久化,做了持久化不一定非得做集群。
3.Nacos集群部署
3.1.Nacos集群方案
在Nacos官网有这么一个集群图例:
这里采用三个Nacos节点(三个centos服务器),通过“VIP”代理到三个Nacos,这里的“VIP”指的是代理,我们后续会采用Nginx来实现,可能你不太明白这里的代理的作用,其实跟我们在《Spring Cloud极简入门》中提高的“负载均衡”的概念是一样的。现在我有三个Nacos,那么我的Java程序客户端应该向哪个Nacos发起服务注册呢?你总不可能让我向三个Nacos都发起注册(实际上也可以),这里的“VIP”(Nginx)代理的作用就是统一接受请求,然后将请求分发(路由)到后端的三个Nacos服务。我们客户端只需要关注“VIP”(Nginx)的地址就可以了。
3.2.集群配置
修改配置文件 cluster.conf,配置三个Nacos的地址和端口 , 如下:
# ip:port
172.17.0.15:8841
172.17.0.15:8842
172.17.0.15:8843
我这里是一个服务器模拟三个Nacos,所以使用端口进行区分。
3.3.修改启动命令
因为是本地测试,所以在启动Nacos的时候需要一个Nacos启动三次(当然你也可以安装和配置三个Nacos),并且每次启动都要修改端口,那么我们就复制三份启动脚本,脚本中的端口修改成不同的端口 , 在生成环境并不需要做如此操作.
复制并修改 bin/startup.sh 如下:
startup-8841.sh
startup-8842.sh
startup-8843.sh
编辑三个启动命令,修改JVM启动端口,分别为:8841,8842,8843如下:
然后启动三启动命令,启动三个Nacos。
3.4.安装Nginx代理
安装工具和依赖
yum install wget -y //已经安装就可以不用安装了
yum install gcc
yum install pcre-devel
yum install zlib zlib-devel
yum install openssl openssl-devel
创建安装目录
mkdir /usr/local/nginx
cd /usr/local/nginx
下载和解压
wget http://nginx.org/download/nginx-1.13.7.tar.gz //下载nginx
tar -xvf nginx-1.13.7.tar.g //解压tar包
编译和安装
./configure
make //执行make命令
make install //执行make install命令
启动Nginx
/usr/local/nginx/sbin/nginx
或者
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
关闭Nginx
pkill -9 nginx
3.5.配置Nginx代理Nacos
修改Nginx配置文件 /usr/local/nginx/conf/nginx.conf
,增加主机配置(Server) 配置三个Nacos的代理(upstream)
提示:这里通过 server 配置了一个主机 ,listen监听的端口是 8848,这个是暴露给客户端的端口,location配置了/nacos/的访问路径,通过 proxy_pass配置代理,然后通过 upstream配置了三个Nacos节点。
4.集群测试
4.1.浏览器测试
通过访问 Nginx 访问Nacos界面: http://centos的ip:8848/nacos/
,记得使用centos的ip
这里可以看到,在集群管理里面出现了三个节点。
4.2.客户端配置
修改springcloudalibaba-user-server-1010的yml配置,将注册中心地址指向Nginx。
spring:
cloud:
nacos:
discovery:
server-addr: centos的ip:8848 #这里指向Nginx地址即可
5.小结
到这里,Nacos就已经完成了,虽然是使用一个服务器模拟三个Nacos,但是集成方式都是一模一样,在生产环境需要把ip指向响应的服务器即可。