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

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

一、基础背景

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

  2. 配置有两种方式

    1. docker

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

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

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

截屏2023-06-20 14.11.08

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

carbon

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

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

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

实测并不需要。

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

截屏2023-06-20 14.19.01

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

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

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

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

  1. 拉取镜像
docker pull nacos/nacos-server

2. 运行容器

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里面会发现我们在第一部分所配置的文件,如下图。

截屏2023-06-20 14.38.39

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

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

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

截屏2023-06-20 14.41.42

carbon_副本

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

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

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

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

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

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

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

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

截屏2023-06-20 14.05.20

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

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

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

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYO9pK7j' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片