JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

SpringCloud Alibaba之Nacos集群、持久化

wys521 2024-10-05 04:12:32 精选教程 16 ℃ 0 评论

欢迎关注头条号:老顾聊技术

精品原创技术分享,知识的组装工

目录

  1. 前言
  2. 安装数据库
  3. 初始化数据库
  4. 修改配置文件
  5. 持久化实现
  6. 集群模式部署
  7. 主机规划
  8. 集群配置
  9. 启动实例
  10. 配置代理服务器
  11. 客户端链接nacos集群
  12. 总结

前言

前面的系列文章已经介绍了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、用户名和密码。配置样例如下:

spring.datasource.platform=mysql


db.num=1
db.url.0=jdbc:mysql://192.168.31.250:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456

到这里,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台服务器,多个实例端口的方式搭建集群

192.168.31.153 8848
192.168.31.153 8849
192.168.31.153 8850

复制三份Nacos安装包,将 conf/application.properties 中的

server.port=8848

分别改为:

server.port=8848
server.port=8849
server.port=8850

集群配置

在Nacos的conf目录下有一个cluster.conf.example,可以直接把example扩展名去掉来使用,也可以单独创建一个cluster.conf文件,然后打开将后续要部署的Nacos实例地址配置在这里。本文以在本地不同端口启动3个Nacos服务端为例,可以如下配置:

192.168.31.153:8848
192.168.31.153:8849
192.168.31.153:8850

启动实例

因为3个Nacos的实例都在本地,只是以不同的端口区分,所以我们在启动Nacos的时候,需要修改不同的端口号

下面介绍一种方法来方便地启动Nacos的三个本地实例,我们可以将bin目录下的startup.sh脚本复制三份,分别用来启动三个不同端口的Nacos实例,为了可以方便区分不同实例的启动脚本,我们可以把端口号加入到脚本的命名中,比如:

startup-8848.sh
startup-8849.sh
startup-8850.sh

然后,分别修改这三个脚本中的参数,具体如下图的红色部分(端口号根据上面脚本命名分配):

这里我们通过-Dserver.port的方式,在启动命令中,为Nacos指定具体的端口号,以实现在本机上启动三个不同的Nacos实例来组成集群。

修改完3个脚本配置之后,分别执行下面的命令就可以在本地启动Nacos集群了:

# ./startup-8848.sh
# ./startup-8849.sh
# ./startup-8850.sh

在实际生产环境部署的时候,由于每个实例分布在不同的节点上,我们可以直接使用默认的启动脚本(除非要调整一些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端的配置;

客户端链接Nacos集群

修改bootstrap.yml配置文件中的nacos地址

如:localhost:80

到这里,Nacos的集群搭建就完成了!我们可以通过Nginx配置的代理地址:http://localhost:80/nacos/来访问Nacos,在SpringCloud Alibaba应用中也可以用这个地址来作为注册中心和配置中心的访问地址来配置

总结

到这里Nacos相关的基本实战介绍,就到这里了;接着老顾会继续介绍SpringCloud Alibaba的其他组件。谢谢!!


---End---

最近老顾上传了微服务网关的分享课程,请大家多多支持

推荐阅读

1基于RocketMq的SpringCloud Stream框架实战入门

2、如何搭建消息中间件应用框架之SpringCloud Stream

3面试必备:网关异常了怎么办?如何做全局异常处理?

4Gateway网关系列(二):SpringCloud Gateway入门实战,路由规则

5Gateway网关系列开篇:SpringCloud的官方网关Gateway介绍

6API网关在微服务架构中的应用,这一篇就够了

7学习Lambda表达式看这篇就够了,不会让你失望的哦(续篇)

8Lambda用在哪里?几种场景?

9、为什么会出现Lambda表达式,你知道吗?

10、不说“分布式事务”理论,直接上大厂阿里的解决方案,绝对实用

11、女程序员问到这个问题,让我思考了半天,Mysql的“三高”架构

12、大厂二面:CAP原则为什么只能满足其中两项?而不能同时满足

13、阿里P7二面:聊聊零拷贝的原理

14、秒杀系统的核心点都在这里,快来取

15、你了解如何利用token方式实现分布式Session吗?

16、Mysql索引结构演变,为什么最终会是那个结构呢?让你一看就懂

17、一场比赛涉及到的知识,用通俗易通的方式介绍并发协调

18、企业实战Redis全方面思考,你思考了吗?

19、面试题:Thread的start和run的区别

20、面试题:什么是CAS?CAS的作用以及缺点

21、如何访问redis中的海量数据?避免事故产生

22、如何解决Redis热点问题?以及如何发现热点?

23、如何设计API接口,实现统一格式返回?

24、你真的知道在生产环境下如何部署tomcat吗?

25、分享一线互联网大厂分布式唯一ID设计 之 snowflake方案

26、分享大厂分布式唯一ID设计方案,快来围观

27、你想了解一线大厂的分布式唯一ID生成方案吗?

28、你知道如何处理大数据量吗?(数据拆分篇)

29、如何永不迁移数据和避免热点? 根据服务器指标分配数据量(揭秘篇)

30、你知道怎么分库分表吗?如何做到永不迁移数据和避免热点吗?

31、你了解大型网站的页面静态化吗?

32、你知道如何更新缓存吗?如何保证缓存和数据库双写一致性?

33、你知道怎么解决DB读写分离,导致数据不一致问题吗?

34、DB读写分离情况下,如何解决缓存和数据库不一致性问题?

35、你真的知道怎么使用缓存吗?

36、如何利用锁,防止缓存击穿?重构思想的重要性

37、海量订单产生的业务高峰期,如何避免消息的重复消费?

38、你知道如何保障生产端100%消息投递成功吗?

39、微服务下的分布式session该如何管理?

40、阿里二面:filter、interceptor、aspect应如何选择?很多人中招

41、互联网架构重要组员CDN,很多高级开发都没有实操过,来看这里

42、阿里二面:CDN缓存控制原理,看看能不能难住你

43、SpringCloud Alibaba之Nacos多环境多项目管理

44、SpringCloud Alibaba系列之Nacos配置中心玩法

45、SpringCloud Alibaba之Nacos注册中心

46、SpringCloud Plus版本之SpringCloud Alibaba

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表