通过之前的几篇有关Nacos的文章,对于Nacos分别作为服务注册中心以及配置中心时,与Spring Cloud体系结合的基础使用方法已经讲解完毕了。下面我们就要从生产部署角度,介绍Nacos的相关内容。这里具体说说Nacos的数据存储以及生产配置的推荐。
数据持久化
在之前的教程中,我们对于Nacos服务端自身并没有做过什么特殊的配置,一切均以默认的单机模式运行,完成了上述的所有功能学习。但是,Nacos的单机运行模式仅适用于开发和测试环境,对于有高可用要求的生产环境就不太合适了。
有人说我们可不可以直接通过启动多个单机模式Nacos服务的方式,来实现多个节点Nacos的高可用吗?答案是不可以!
那我们应该如何才能实现Nacos的高可用集群搭建?
在搭建Nacos集群之前,我们需要知道,默认情况下,Nacos使用内嵌的cmdb数据库完成数据的存储。所以,如果启动多个默认配置的Nacos节点,数据存储是存在不一致问题的。为了解决这个问题,Nacos采用了集中式存储方式来支持集权化部署,目前只支持MySQL的存储。
配置Nacos的MySQL存储只需要下面三步:
第一步:安装数据库,这里选择的版本:5.7.x
具体安装步骤这里就不在说明
第二步:初始化MySQL数据库,初始化文件可以从Nacos工程包下 conf 目录获取:
执行完毕后可以看到如下图所示的表结构:
第三步:修改Nacos工程包下 ** conf/application.properties**文件,增加支持MySQL数据源的配置:
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456
这样,Nacos数据存储到MySQL的配置就完成了,可以尝试继续使用单机模式启动Nacos。看配置是否生效。
思考
关于Nacos数据的持久化实现,与其他的中间件的相比,在实现上并没有采用分布式算法来解决一致性问题,而是采用常规的集中化存储来实现。由于采用单一数据源的方式,直接解决分布式一致性问题,所以从学习角度上来说,Nacos的实现原理会更容易理解和接受。但是,从部署的复杂度和硬件投入成本来说,与consul、zookeeper这些通过算法方式实现分布式一致性问题的中间件相比,就略显不足了。
同时,在引入MySQL的存储时,由于多了一个中间件存在,整个Nacos系统的整体可用性一定会有所下降的。所以为了弥补可用性的下降,在生产上MySQL的高可用部署也是必须的(成本再次提高)。不论如何提高,可用性都很难达到100%,所以这种方式,不论如何提升存储的可用性,理论上对Nacos集群的自身可用性都会产生微小的影响。
不过上面的思考都是从理论上,粗略讨论的,并没有经过详细的成本评估与可用性计算。所以,对于实际应用场景,可能这些成本的增加和可用性的降低并没有那么大的影响。
下一章节,我们将通过MySQL数据库完成对Nacos管理用户进行自定义。