前面的系列文章已经介绍了Nacos作为注册中心和配置中心,以及Nacos的基本使用方式。但之前的文章中都是基于单机模式部署的,生产环境不可能是单机部署的,所以本文介绍一下Nacos的集群部署。
之前在Nacos控制台配置的一下信息,默认Nacos使用嵌入式cmdb数据库实现数据的存储。所以,如果启动多个默认配置下的Nacos节点,数据存储是存在一致性问题的。为了解决这个问题,Nacos采用了集中式存储的方式来支持集群化部署,目前只支持MySQL的存储。
安装数据库
目前Nacos仅支持Mysql数据库,且版本要求:5.6.5+
初始化数据库
Nacos的数据库脚本文件在我们下载Nacos-server时的压缩包中nacos\conf目录,初始化文件:nacos-mysql.sql。
此处我创建一个名为 nacos 的数据库,然后执行初始化脚本,成功后会生成 11 张表,如下图所示的表结构
修改配置文件
这里是需要修改Nacos-server的配置文件
Nacos-server其实就是一个Java工程或者说是一个Springboot项目,他的配置文件在nacos\conf目录下,名为 application.properties,增加支持MySQL数据源配置,添加(目前只支持mysql)数据源的url、用户名和密码。配置样例如下:
到这里,Nacos数据存储到MySQL的配置就完成了,可以尝试继续用单机模式启动Nacos。然后再根据之前学习的Nacos配置中心的用法来做一些操作,配合MySQL工具就可以看到数据已经写入到数据库中了。
关于Nacos数据的持久化实现,与其他的中间件相比,在实现上并没有采用分布式算法来解决一致性问题,而是采用了比较常规的集中化存储来实现。
由于采用单一数据源的方式,直接解决了分布式一致性问题,所以从学习成本的角度上来说,Nacos的实现原理会更容易被理解和接受。但是,从部署的负责度和硬件投入成本上来说,与etcd、consul、zookeeper这些通过算法方式解决一致性问题的中间件相比,就显得不足了。
在引入MySQL的存储时,由于多了一个中间件的存在,整个Nacos系统的整体可用性一定是会所有下降的。所以为了弥补可用性的下降,在生产上MySQL的高可用部署也是必须的,成本再次提高。当然现在云端的产品,相对蛮便宜的,有成熟的Mysql方案。
集群模式部署
前面部署的是单机版的Nacos Server,这生产环境肯定不行;生产环境肯定需要集群部署,下面我们就来搭建Nacos集群。官方提供了三种集群方式
http://ip1:port/openAPI 直连ip模式,机器挂则需要修改ip才可以使用。
http://VIP:port/openAPI 挂载VIP模式,直连vip即可,下面挂server真实ip,可读性不好。
http://nacos.com:port/openAPI 域名 + VIP模式,可读性好,而且换ip方便,推荐模式
官方推荐了VIP方式,还需要keepalive支持,比较麻烦;老顾这里分享一个代理方案,结合nginx实现集群。架构图如下:
由于机器数量的原因,我们采用1台服务器,多个实例端口的方式搭建集群
复制三份Nacos安装包,将 conf/application.properties 中的
分别改为:
集群配置
在Nacos的conf目录下有一个cluster.conf.example,可以直接把example扩展名去掉来使用,也可以单独创建一个cluster.conf文件,然后打开将后续要部署的Nacos实例地址配置在这里。本文以在本地不同端口启动3个Nacos服务端为例,可以如下配置:
启动实例
因为3个Nacos的实例都在本地,只是以不同的端口区分,所以我们在启动Nacos的时候,需要修改不同的端口号。
下面介绍一种方法来方便地启动Nacos的三个本地实例,我们可以将bin目录下的startup.sh脚本复制三份,分别用来启动三个不同端口的Nacos实例,为了可以方便区分不同实例的启动脚本,我们可以把端口号加入到脚本的命名中,比如:
然后,分别修改这三个脚本中的参数,具体如下图的红色部分(端口号根据上面脚本命名分配):
这里我们通过-Dserver.port的方式,在启动命令中,为Nacos指定具体的端口号,以实现在本机上启动三个不同的Nacos实例来组成集群。
修改完3个脚本配置之后,分别执行下面的命令就可以在本地启动Nacos集群了:
在实际生产环境部署的时候,由于每个实例分布在不同的节点上,我们可以直接使用默认的启动脚本(除非要调整一些JVM参数等才需要修改)。只需要在各个节点的Nacos的bin目录下执行sh startup.sh命令即可。
在Nacos的集群启动完毕之后,根据架构图所示,我们还需要提供一个统一的入口给我们用来维护以及给Spring Cloud应用访问。简单地说,就是我们需要为上面启动的三个Nacos实例做一个可以为它们实现负载均衡的访问点。这个实现的方式非常多,这里我们就用Nginx来实现。
nginx的安装部署,小伙伴们自行网上查看,这里就不介绍了。
配置NGINX
为NGINX添加如下配置(对于Linux操作系统,如在安装NGINX时未自定义目录,则可在 /etc/nginx/conf.d 新建文件,命名为nacos.conf ,内容如下;同时删除default.conf即可):
测试
访问 http://localhost/nacos 可看到Nacos的登录页,登录后即可正常使用Nacos。
实际项目中,建议为Nacos绑定一个域名(域名解析 & 修改NGINX配置的server_name),这样即使未来Nacos Server需要迁移,也无需修改Nacos Client端的配置;
如:localhost:80
到这里,Nacos的集群搭建就完成了!我们可以通过Nginx配置的代理地址:http://localhost:80/nacos/来访问Nacos,在SpringCloud Alibaba应用中也可以用这个地址来作为注册中心和配置中心的访问地址来配置。
总结
到这里Nacos相关的基本实战介绍,就到这里了;后续可以关注微信公众号:java程序员聚集地,更新!