上一篇文章我们学习了 Nacos 的基本使用,很多小伙伴私信我说:"单机 Nacos 用着挺香的,但是万一挂了怎么办?"

确实,单机 Nacos 存在两个致命问题:

  1. 数据丢失:Nacos 默认用嵌入式数据库 Derby 存储数据,数据存在本地,一旦服务器挂了,所有配置都没了

  2. 单点故障:只有一个节点,只要这个节点挂了,所有服务都注册不了也发现不了,整个微服务系统就瘫痪了

今天我们就来解决这两个问题,学习 Nacos 的持久化和集群搭建,让你的 Nacos 稳如老狗,再也不用担心单点故障!

一、Nacos 持久化:把数据存到 MySQL 里

1. 为什么要持久化?

刚才说了,Nacos 默认用的是嵌入式数据库 Derby,这个数据库有个缺点:每个 Nacos 节点都有自己的 Derby 数据库。如果我们搭建集群,每个节点的数据都是独立的,会导致数据不一致的问题。

所以生产环境中,我们必须把 Nacos 的数据库切换成 MySQL,让所有 Nacos 节点都共享同一个 MySQL 数据库,这样数据就一致了,而且 MySQL 的数据备份和恢复也更方便。

2. 持久化步骤

1)新建 Nacos 数据库

首先在 MySQL 中新建一个名为nacos的数据库,字符集选utf8mb4

2)执行 SQL 脚本

Nacos 已经为我们准备好了建表脚本,就在/usr/local/nacos/conf目录下,文件名是nacos-mysql.sql。把这个脚本复制到 Navicat 或者 MySQL 命令行中执行,会自动创建所有需要的表。

3)修改 Nacos 配置文件

编辑/usr/local/nacos/conf/application.properties文件,找到数据库配置部分,修改成如下内容:


把里面的 IP、端口、用户名、密码改成你自己的 MySQL 信息。

4)重启 Nacos

重启完成后,去 Nacos 控制台发布一个配置,然后去 MySQL 的config_info表中查看,就能看到我们发布的配置已经存到 MySQL 里了!这说明持久化成功了。

二、Nacos 集群搭建:3 台节点最靠谱

1. 为什么集群要 3 台?

很多人会问:"集群搭 2 台不行吗?为什么一定要 3 台?"

这是因为 Nacos 集群采用的是Raft 一致性算法,这个算法要求集群中必须有超过半数的节点存活才能正常工作。

  • 2 台节点:超过半数需要 2 台,只要 1 台挂了,集群就挂了,和单机没区别

  • 3 台节点:超过半数需要 2 台,允许 1 台挂了,集群仍然正常工作

  • 4 台节点:超过半数需要 3 台,也只允许 1 台挂了,和 3 台效果一样,但浪费资源

所以3 台节点是性价比最高的集群方案,生产环境一般都用 3 台。

2. 集群搭建步骤

我们在同一台服务器上模拟 3 个 Nacos 节点,用不同的端口区分(8851、8852、8853)。

1)修改 cluster.conf 配置文件

在文件末尾添加 3 个节点的地址:


⚠️ 注意:这里要写服务器的真实 IP,不要写 [127.0.0.1](127.0.0.1)!

2)复制 3 份 Nacos

3)修改每个节点的端口号

分别编辑 3 个节点的application.properties文件,修改server.port


⚠️ 踩坑提醒:我第一次配置的时候,手滑把 nacos-8853 的端口写成了 8852,导致启动失败,大家一定要仔细检查每个节点的端口号!

4)启动集群

分别启动 3 个节点:


启动完成后,访问任意一个节点的控制台,比如http://192.168.61.132:8851/nacos,进入 "集群管理 - 节点列表",就能看到 3 个节点都在线了!

三、Nginx 反向代理:统一入口

现在我们有 3 个 Nacos 节点了,服务注册的时候总不能写 3 个地址吧?这时候就需要 Nginx 来做反向代理,提供一个统一的入口,让所有服务都通过 Nginx 访问 Nacos 集群。

1. 安装 Nginx

1)安装依赖

2)下载 Nginx

⚠️ 踩坑提醒:如果下载时遇到 "当前不支持该文件类型,请尝试其他文件" 的错误,大概率是网络问题或者下载链接不对,可以换个浏览器下载或者用国内镜像源。

3)解压安装

2. 配置 Nginx 反向代理

编辑/usr/local/nginx/conf/nginx.conf文件,修改成如下内容:


3. 启动 Nginx


现在我们就可以通过http://192.168.61.132来访问 Nacos 集群了!Nginx 会自动把请求转发到其中一个健康的节点上。

四、集群测试

最后我们来测试一下集群是否正常工作。修改服务的配置文件,把 Nacos 地址改成 Nginx 的地址:


启动服务,去 Nacos 控制台查看,服务已经成功注册到集群中了。

现在我们手动关掉一个 Nacos 节点,比如 8851,然后刷新控制台,会发现集群仍然正常工作,服务也能正常注册和发现。这说明我们的集群搭建成功了!

五、总结

今天我们学习了 Nacos 的进阶内容:

  1. Nacos 持久化:把数据从 Derby 切换到 MySQL,解决数据丢失问题

  2. Nacos 集群搭建:3 台节点实现高可用,允许 1 台节点故障

  3. Nginx 反向代理:为集群提供统一入口

到这里,Nacos 的核心内容我们就都学完了。从入门到进阶,从单机到集群,相信大家已经能够在生产环境中使用 Nacos 了。

如果这篇文章对你有帮助,别忘了点赞收藏关注哦!有任何问题都可以在评论区留言,我会一一解答~

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐