Docker下Nacos持久化配置

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 在Docker环境下,实战将Nacos的所有数据从嵌入式数据库改为MySql存储

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码): https://github.com/zq2599/blog_demos
  • 本文是《Spring Cloud Alibaba实战系列》的第五篇,学习如何将Nacos服务所用的数据库从嵌入式数据库改为MySql。

系列文章链接

  • 下面是《Spring Cloud Alibaba实战系列》的所有文章地址:
  1. 《Docker下,两分钟极速体验Nacos》
  2. 《Docker下的Nacos环境开发》
  3. 《Docker下,两分钟极速体验Nacos配置中心》
  4. 《Docker下Nacos配置应用开发》
  5. 《Docker下Nacos持久化配置》;

官方操作指导

在这里插入图片描述

  • 如果您是在物理机上操作,按照上述步骤即可完成,如果您的Nacos部署在Docker上,下本文可以用来做参考:

环境信息

  1. Nacos server版本:1.1.0
  2. 操作系统:CentOS Linux release 7.6.1810
  3. Docker:1.13.1, build b2f74b2/1.13.1
  4. docker-compose:1.24.1, build 4667896
  5. jdk:1.8.0_191
  6. maven:3.6.0
version: '2'
services:
  nacos:
    image: bolingcavalry/nacosserver:0.0.1
    container_name: nacos
    restart: unless-stopped
    ports:
    - '8848:8848'
  config-demo:
    image: bolingcavalry/nacosconfigdemo:1.0-SNAPSHOT
    container_name: config-demo
    restart: unless-stopped
    depends_on:
    - nacos
    ports:
    - '8080:8080'

Docker环境操作步骤简介

  • 简单介绍一下整个实战的步骤:
  1. 准备初始化nacos数据库的sql脚本;
  2. docker-compose.yml中增加mysql,并设置容器创建时执行前面的sql脚本;
  3. 准备nacos配置文件给docker-compose.yml中nacos容器使用;
  4. 启动,验证功能正常;
  5. 检查数据库中是否有数据;
  6. 删除容器,再重建容器,确认数据可以完全恢复;
  • 接下来一起实战吧。

准备初始化nacos数据库的sql脚本

  1. 此sql用于创建nacos server运行所需的表和数据,去下载nacos server安装包,地址是:https://github.com/alibaba/nacos/releases/download/1.1.0/nacos-server-1.1.0.tar.gz
  2. 下载的安装包解压后,文件nacos/conf/nacos-mysql.sql就是我们所需的sql脚本;
  3. 打开此脚本,可见内容中没有创建数据库,这样的脚本在mysql的docker容器内无法自动执行,需要在sql文件的开始位置添加以下内容:
CREATE DATABASE nacos_config;
use nacos_config;
  1. 将文件nacos-mysql.sql放在docker-compose.yml所在目录下;

docker-compose.yml中增加mysql

  • 接下来在容器编排文件docker-compose.yml中增加mysql容器:
  • 在docker-compose.yml中增加mysql容器,新增的mysql编排信息放在最前面,内容如下:
mysql:
    image: mysql:5.7.27
    container_name: mysql
    restart: unless-stopped
    volumes:
      - ./nacos-mysql.sql:/docker-entrypoint-initdb.d/nacos-mysql.sql
      - ./mysqldata:/var/lib/mysql
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_ROOT_PASSWORD: 123456
  • 上述内容有几处需要注意:

a. 第一个volumes参数将宿主机的nacos-mysql.sql映射到容器的/docker-entrypoint-initdb.d/目录,mysql容器启动时会执行这个目录下的所有以sh和sql结尾的文件;
b. 第二个volumes参数将docker-compose.yml文件所在位置的mysqldata目录映射到容器的/var/lib/mysql目录,这样数据库所有数据都保存在宿主机上了,此mysqldata文件夹容器启动时自动创建;
c. command参数设置了mysql的鉴权方式是密码方式;
d. 环境变量MYSQL_ROOT_PASSWORD设置了mysql的root密码为123456;

准备nacos配置文件给docker-compose.yml中nacos容器使用

  • 接下来需要设置nacos server的参数,将mysql相关参数配置好,这样nacos server启动后就会使用mysql保存数据:
  • 进入刚才下载和解压的nacos server安装包,文件nacos/conf/application.properties就是我们所需的配置文件;
  • 将文件application.properties复制到docker-compose.yml所在目录;
  • 打开文件application.properties,在尾部新增以下内容,这些是mysql相关的配置:
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://mysql:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456
  • 打开docker-compose.yml文件,找到nacos的配置,修改后的内容如下:
nacos:
    image: bolingcavalry/nacosserver:0.0.1
    container_name: nacos
    restart: unless-stopped
    volumes:
      - ./application.properties:/root/nacos/conf/application.properties
    depends_on:
      - mysql
    ports:
      - '8848:8848'
  • 如上所示,nacos的配置有两处修改:

a. 增加volumes,将宿主机的application.properties文件映射到容器中,作为nacos的配置文件;
b. 增加依赖配置,在mysql容器启动成功后才会启动nacos;

  • 完整的docker-compose.yml内容如下:
version: '2'
services:
  mysql:
    image: mysql:5.7.27
    container_name: mysql
    restart: unless-stopped
    volumes:
      - ./nacos-mysql.sql:/docker-entrypoint-initdb.d/nacos-mysql.sql
      - ./mysqldata:/var/lib/mysql
    command: --default-authentication-plugin=mysql_native_password
    ports:
      - '3306:3306'
    environment:
      MYSQL_ROOT_PASSWORD: 123456
  nacos:
    image: bolingcavalry/nacosserver:0.0.1
    container_name: nacos
    restart: unless-stopped
    volumes:
      - ./application.properties:/root/nacos/conf/application.properties
    depends_on:
      - mysql
    ports:
      - '8848:8848'
  config-demo:
    image: bolingcavalry/nacosconfigdemo:1.0-SNAPSHOT
    container_name: config-demo
    restart: unless-stopped
    depends_on:
    - nacos
    ports:
    - '8080:8080'
  • 至此,准备完毕,可以验证了;

验证

docker-compose up -d
  • 我这里宿主机的IP是192.168.121.131,登录Nacos的web页面,创建应用所需的配置项,地址是:http://192.168.121.131:8848/nacos ,用户名和密码都是nacos;
  • 如下图,新增一个配置项:

在这里插入图片描述

  • 浏览器访问地址:http://192.168.121.131:8080/test ,如下图,可见应用已经从nacos取得了配置:

在这里插入图片描述

  • 再来看看mysql的数据;
  • 在宿主机执行命令docker exec -it mysql /bin/bash进入容器;
  • 进入容器后,执行命令mysql -h127.0.0.1 -uroot -p123456连接MySQL;
  • 参考以下的命令,检查MySQL的数据,可见刚才配置的数据都存入了MySQL:
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| nacos_config       |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> use nacos_config;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+------------------------+
| Tables_in_nacos_config |
+------------------------+
| config_info            |
| config_info_aggr       |
| config_info_beta       |
| config_info_tag        |
| config_tags_relation   |
| group_capacity         |
| his_config_info        |
| roles                  |
| tenant_capacity        |
| tenant_info            |
| users                  |
+------------------------+
11 rows in set (0.00 sec)
mysql> select * from config_info \G
*************************** 1. row ***************************
          id: 1
     data_id: my-nacos-config.yaml
    group_id: BOLING_CAVALRY
     content: bolingcavalry:
  desc: desc from nacos yaml config
         md5: f44c8fd76e8da757380e8f7ddabe6e70
  gmt_create: 2019-08-31 13:53:01
gmt_modified: 2019-08-31 13:53:01
    src_user: NULL
      src_ip: 192.168.121.1
    app_name: 
   tenant_id: 
      c_desc: nacos config demo
       c_use: NULL
      effect: NULL
        type: yaml
    c_schema: NULL
1 row in set (0.00 sec)
  • 至此,可以确定在Docker环境下,Nacos使用MySQL进行持久化存储操作成功,接下来我们验证即使容器被删除,数据也可以恢复

删除容器,再重建容器,确认数据可以完全恢复

  • 在docker-compose.yml所在的目录下执行以下命令,会停止所有容器并将其删除:
docker-compose down
  • 执行docker ps -a,确认宿主机上已经没有任何容器存在:
[root@maven test]# docker-compose down
Stopping config-demo ... done
Stopping nacos       ... done
Stopping mysql       ... done
Removing config-demo ... done
Removing nacos       ... done
Removing mysql       ... done
Removing network test_default
[root@maven test]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
  • 此时就相当于整个环境已经不存在了,但是MySQL的数据文件夹已经被映射到宿主机,就是mysqldata目录;
  • 接下来我们要做的是重新创建所有容器,但是要使用之前的数据,因此不需要再执行nacos-mysql.sql了,在docker-compose.yml中去掉mysql容器的nacos-mysql.sql这个volumens参数:
version: '2'
services:
  mysql:
    image: mysql:5.7.27
    container_name: mysql
    restart: unless-stopped
    volumes:
      - ./mysqldata:/var/lib/mysql
    command: --default-authentication-plugin=mysql_native_password
    ports:
      - '3306:3306'
    environment:
      MYSQL_ROOT_PASSWORD: 123456
  nacos:
    image: bolingcavalry/nacosserver:0.0.1
    container_name: nacos
    restart: unless-stopped
    volumes:
      - ./application.properties:/root/nacos/conf/application.properties
    depends_on:
      - mysql
    ports:
      - '8848:8848'
  config-demo:
    image: bolingcavalry/nacosconfigdemo:1.0-SNAPSHOT
    container_name: config-demo
    restart: unless-stopped
    depends_on:
    - nacos
    ports:
    - '8080:8080'
  • 再次执行docker-compose up -d,启动所有容器;
  • 打开nacos的配置页面,原来的数据还在:

在这里插入图片描述

  • 访问demo应用,依然可以成功从nacos取得配置内容:

在这里插入图片描述

  • 至此,Docker下Nacos持久化配置实战就完成了,希望能给您的容器化项目提供一些参考。

官方Docker服务

  • Naocs的官方也给出了Docker下的Nacos镜像以及对应的编排操作指南,地址是:https://github.com/nacos-group/nacos-docker ,您也可以根据官方指导来实践,官方编排提供了更多的设置和配置,功能更强大,但是由于内容过多(例如Mysql使用了主从的容器设置),不适合本次文章的主题,因此我这里依然沿用了之前自己动手做的镜像;

欢迎关注阿里云开发者社区博客:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
8天前
|
负载均衡 应用服务中间件 Nacos
Nacos配置中心
Nacos配置中心
31 1
Nacos配置中心
|
4天前
|
监控 Java 测试技术
Nacos 配置中心变更利器:自定义标签灰度
本文是对 MSE Nacos 应用自定义标签灰度的功能介绍,欢迎大家升级版本进行试用。
|
4天前
|
关系型数据库 数据管理 应用服务中间件
【赵渝强老师】Docker的数据持久化
在生产环境中使用Docker时,为了实现数据的持久化和共享,可以通过数据卷(Data Volumes)和数据卷容器(Data Volume Containers)两种方式来管理数据。数据卷是一个独立于容器的挂载目录,可以跨多个容器共享和重用。数据卷容器则是一种特殊容器,用于维护数据卷,便于数据迁移和共享。本文通过示例详细介绍了这两种方法的使用步骤。
|
7天前
|
网络安全 Nacos 开发者
Nacos作为流行的微服务注册与配置中心,“节点提示暂时不可用”是常见的问题之一
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,“节点提示暂时不可用”是常见的问题之一。本文将探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务的正常运行。通过检查服务实例状态、网络连接、Nacos配置、调整健康检查策略等步骤,可以有效解决这一问题。
17 4
|
7天前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,实际使用中常遇到“客户端不发送心跳检测”的问题。本文深入探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务正常运行。通过检查客户端配置、网络连接、日志、版本兼容性、心跳策略、注册状态、重启应用和环境变量等步骤,系统地排查和解决这一问题。
21 3
|
7天前
|
安全 Nacos 数据库
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改。本文详细探讨了这一问题的原因及解决方案,包括限制公网访问、使用HTTPS、强化数据库安全、启用访问控制、监控和审计等步骤,帮助开发者确保服务的安全运行。
18 3
|
21天前
|
弹性计算 数据库连接 Nacos
阿里云ECS服务器在docker中部署nacos
docker pull nacos 失败,docker部署nacos遇到的问题,nacos数据库连接,nacos端口映射
81 1
|
1月前
|
存储 Kubernetes Docker
|
28天前
|
存储 安全 数据管理
Docker中实现数据持久化
【10月更文挑战第8天】
20 1
|
28天前
|
Java jenkins 持续交付
Centos7下docker的jenkins下载并配置jdk与maven
通过上述步骤,您将成功在CentOS 7上的Docker容器中部署了Jenkins,并配置好了JDK与Maven,为持续集成和自动化构建打下了坚实基础。
88 1