0%

Nacos持久化

Nacos 持久化配置:从嵌入式数据库到 MySQL 集群方案

Nacos 默认使用嵌入式数据库 Derby 存储配置和服务元数据,但其仅适用于单机模式。在生产环境的集群部署中,为保证数据一致性和高可用性,需将数据持久化到外置数据库(目前官方仅支持 MySQL)。本文详细介绍 Nacos 持久化的配置步骤及注意事项。

为什么需要持久化?

  • Derby 的局限性:嵌入式数据库仅存在于当前 Nacos 节点的内存和本地文件中,集群环境下各节点数据无法同步,导致配置和服务信息不一致;
  • 数据可靠性:MySQL 支持数据持久化和主从备份,避免 Nacos 节点故障导致数据丢失;
  • 集群一致性:Nacos 集群所有节点连接同一 MySQL 数据库,确保配置和服务信息全局一致。

Nacos 持久化到 MySQL 的步骤

1. 环境准备

  • MySQL 版本:推荐 5.7 及以上(需支持 InnoDB 引擎);
  • Nacos 版本:2.0.x 及以上(确保兼容 MySQL 驱动);
  • 权限:拥有 MySQL 数据库的创建、表操作权限。

2. 初始化数据库脚本

Nacos 提供了内置的数据库初始化脚本,步骤如下:

  1. 找到脚本文件
    在 Nacos 安装目录的conf文件夹中,找到nacos-mysql.sql脚本(若不存在,可从Nacos 源码distribution/conf目录下载)。

  2. 执行脚本

    • 登录 MySQL 客户端,创建名为nacos的数据库(名称可自定义):

      1
      CREATE DATABASE IF NOT EXISTS nacos CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
    • 切换到nacos数据库,执行nacos-mysql.sql脚本:

      1
      2
      USE nacos;
      SOURCE /path/to/nacos/conf/nacos-mysql.sql; -- 替换为实际脚本路径
  3. 验证表结构
    脚本执行成功后,会创建 12 张表(如config_info存储配置、service_info存储服务信息等),可通过show tables;查看。

3. 配置 Nacos 连接 MySQL

修改 Nacos 的配置文件,指定 MySQL 连接信息:

  1. 打开配置文件
    进入 Nacos 安装目录的conf文件夹,编辑application.properties

  2. 添加 MySQL 配置
    在文件末尾添加以下配置(注释默认的 Derby 配置,若有):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    ### 启用MySQL作为数据源
    spring.datasource.platform=mysql

    ### 数据库实例数量(单实例填1,主从架构可填多个)
    db.num=1

    ### 第1个数据库连接信息
    db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
    db.user.0=root # MySQL用户名
    db.password.0=123456 # MySQL密码

    ### 若有多个数据库(主从),继续添加db.url.1、db.user.1等
    # db.url.1=jdbc:mysql://slave-mysql:3306/nacos?...
    # db.user.1=root
    # db.password.1=123456
    • 参数说明:
      • serverTimezone=Asia/Shanghai:指定时区,避免时间同步问题;
      • useSSL=false:禁用 SSL(测试环境可关闭,生产环境建议开启);
      • autoReconnect=true:网络中断后自动重连。

4. 验证持久化效果

  1. 启动 Nacos
    以单机模式启动 Nacos(集群模式需配置集群节点):

    1
    2
    3
    sh startup.sh -m standalone  # Linux/Mac
    # 或 Windows
    startup.cmd -m standalone
  2. 创建测试配置
    登录 Nacos 控制台,新建一个配置(如test-dev.yaml),发布后查看 MySQL 的config_info表:

    1
    SELECT * FROM config_info WHERE data_id = 'test-dev.yaml';

    若能查询到记录,说明配置已成功持久化到 MySQL。

  3. 测试数据同步
    重启 Nacos 节点,查看控制台是否能加载刚才创建的配置(若能加载,证明持久化生效)。

集群环境下的持久化注意事项

  1. 所有节点连接同一 MySQL
    Nacos 集群的每个节点必须在application.properties中配置相同的 MySQL 连接信息,确保数据来源一致。

  2. MySQL 高可用
    生产环境建议部署 MySQL 主从架构或使用云数据库(如 RDS),避免 MySQL 单点故障导致 Nacos 不可用。

  3. 数据库权限控制

    • 为 Nacos 创建专用 MySQL 用户,仅授予nacos数据库的SELECTINSERTUPDATEDELETE权限;
    • 禁止使用root用户直接连接,降低安全风险。
  4. 表结构升级
    升级 Nacos 版本时,需检查是否有新的数据库脚本(如nacos-mysql.sql更新),并执行升级脚本以兼容新功能。

  5. 连接池配置
    可在application.properties中自定义数据库连接池参数(如最大连接数、超时时间):

    1
    2
    3
    ### 连接池配置
    spring.datasource.hikari.maximum-pool-size=20
    spring.datasource.hikari.connection-timeout=30000

常见问题与解决方案

  1. Nacos 启动报错 “无法连接 MySQL”?
    • 检查db.url.0中的 IP、端口、数据库名是否正确;
    • 确认 MySQL 服务是否启动,防火墙是否开放 3306 端口;
    • 验证db.user.0db.password.0是否正确,可通过mysql -u用户名 -p密码测试连接。
  2. 配置发布后 MySQL 中无记录?
    • 检查spring.datasource.platform=mysql是否配置(若漏配,默认使用 Derby);
    • 查看 Nacos 日志(logs/nacos.log),是否有 “表不存在” 错误(可能是脚本未执行或执行失败)。
  3. 集群节点数据不一致?
    • 确保所有节点的application.properties中 MySQL 配置完全一致;
    • 检查 MySQL 是否启用了 binlog,主从同步是否正常(主从架构时)。
  4. MySQL 性能瓶颈?
    • 监控config_infoservice_info表的读写频率,必要时添加索引;
    • 调整连接池参数(如maximum-pool-size),避免连接数不足。

总结

Nacos 持久化到 MySQL 是集群部署的必选配置,通过将配置和服务信息存储到外置数据库,确保了集群数据的一致性和可靠性

欢迎关注我的其它发布渠道

表情 | 预览
快来做第一个评论的人吧~
Powered By Valine
v1.3.10