nacos的持久化配置可能存在的问题

nacos的持久化配置可能存在的问题

一、基础背景

  1. 持久化配置与版本号无关

  2. 配置有两种方式

    1. docker

    2. 下载编译后压缩包方式

    3. 下载源码编译后运行(坑较多,忽略)

二、配置持久化较简单方式——下载遍以后压缩包

在这里插入图片描述

下载之后打开conf目录,修改其中的application.properties文件。

在这里插入图片描述

# db mysql
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://rm-cn-wwo38XXX:3306/ry-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=XXXX

有些文章可能会提到加上这一行:

# 启用 Nacos 持久化功能
nacos.core.persist.enabled=true

实测并不需要。

修改之后打开本地http://localhost:8848/,会发现配置列表已经加载数据库里的信息。

在这里插入图片描述

如上图,全部信息展示完毕,持久化过程完成。

当然,前提是数据库里已经有相应的表信息,建表语句在conf文件夹里面的sql文件可以作为参考。

三、配置持久化坑比较多的方式——Docker

首先是拉取镜像(个人用的是M1芯片的Mac,所以拉取的是第三方nacos)

  1. 拉取镜像
docker pull nacos/nacos-server
  1. 运行容器
docker run --name nacos-server -e MODE=standalone -p 8848:8848 -d nacos/nacos-server

这个命令会启动一个名为 nacos-server 的容器,并将容器的 8848 端口映射到主机的 8848 端口。在容器启动后,可以通过访问 http://localhost:8848/nacos 来访问 Nacos 控制台。

如果需要在容器启动时指定更多的配置参数,可以将它们添加到 docker run 命令中。例如,以下命令将在容器启动时指定 Nacos 的数据库连接信息:

docker run 
--name nacos-server 
-e MODE=standalone 
-e SPRING_DATASOURCE_PLATFORM=mysql 
-e MYSQL_SERVICE_HOST=mysql-host 
-e MYSQL_SERVICE_PORT=3306 
-e MYSQL_SERVICE_DB_NAME=nacos 
-e MYSQL_SERVICE_USER=nacos 
-e MYSQL_SERVICE_PASSWORD=nacos 
-p 8848:8848 
-d nacos/nacos-server

-e之后可以加很多很多环境变量,比如我们在第一部分配置的url等,在这里推荐使用环境变量的方式。

3.1、为什么推荐使用环境变量呢?

我们利用下面的命令进入这个容器

docker exec -it nacos-server /bin/bash

再利用ls,ll等命令展示内部结构,在/home/nacos/conf里面会发现我们在第一部分所配置的文件,如下图。

在这里插入图片描述

可以看到,Files里面有很多文件。

所以我们必须要强调,docker内部和我们直接下载编译好的发行版所显示的内容是大不相同的。

例如在/home/nacos/conf里面我们会发现application.properiies文件:

在这里插入图片描述

在这里插入图片描述

我们会发现,这个文件与我们之前所看见的配置文件是完全不同的,这一点尤为需要注意。

被**${}**包裹的内容就是环境变量。我们也会发现里面有很多的环境变量。

这正是docker所推崇的,也是本人建议采纳的。

3.2、为什么不直接把conf挂载到本地修改呢

有人可能会思考这个问题,利用**-v**命令将文件挂载出去岂不是更方便,利用刚才说的控制环境变量的方式,每当要修改的时候,必须要先关掉容器,再打开一个新容器。

**额,我就是这么想的。。。**所以改了一个一上午的bug。

挂载容易,但千万要记住,不可以只把application.properiies文件在本地的目录上覆盖。因为Docker使用的是**“绑定挂载”(bind mount)**技术,它将本地文件夹与容器中的文件夹直接连接起来,而不是在容器内部创建一个新的文件夹。因此,如果本地文件夹中存在与容器中的文件夹相同路径和名称的文件,则会覆盖容器中的文件。

正如我们刚才所提到的,docker里面的conf目录与我们直接下载的conf目录大不一样。**所以如果要挂载,必须把里面原有的数据都挂载出来。**如果字挂载一个文件,就会报错。

在这里插入图片描述

像这样。这个错误是说从日志中可以看出,Nacos启动失败的原因可能是由于无法找到日志配置文件导致的。个人怀疑是缺少了nacos-logback.XML文件,当然,这只是举个例子,我相信错误肯定不止于此。

以上就是关于nacos持久化的介绍。

改了一上午bug,有点累。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值