nacos的持久化配置可能存在的问题
一、基础背景
-
持久化配置与版本号无关
-
配置有两种方式
-
docker
-
下载源码编译后运行(坑较多,忽略)
-
二、配置持久化较简单方式——下载遍以后压缩包
下载之后打开conf目录,修改其中的application.properties文件。
# 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/,会发现配置列表已经加载数据库里的信息。
如上图,全部信息展示完毕,持久化过程完成。
当然,前提是数据库里已经有相应的表信息,建表语句在conf文件夹里面的sql文件可以作为参考。
三、配置持久化坑比较多的方式——Docker
首先是拉取镜像(个人用的是M1芯片的Mac,所以拉取的是第三方nacos)
- 拉取镜像
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
里面会发现我们在第一部分所配置的文件,如下图。
可以看到,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,有点累。。。