Nacos的持久化和集群部署

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: -p 3306:3306:宿主机端口:容器端口 --name mysql:容器名字 -v:挂载宿主机的一个目录, 持久化存储的关键所在,将主机目录挂载到容器对应目录,分别是:配置文件、日志文件、数据文件 -v /data/mysql/conf:/etc/mysql/conf.d -v /data/mysql/logs:/logs -v /data/mysql/data:/var/lib/mysq --privileged=true:使用该参数,container内的root拥有真正的root权限, 否则,container内的root只是外部的一

0.下载相关镜像
mysql/mysql-server:5.7
nacos/nacos-server:1.1.4

目前网络模式为:bridge

1.docker mysql:5.7的持久化存储及远程连接
1.下拉镜像

docker pull mysql/mysql-server:5.7
注:后面的mysql标签是版本号,可选择,有:5.5/5.6/5.7/8.0

2.在宿主机中相关目录,用于挂载容器的相关数据

mkdir -p /data/mysql/{conf,data}

注1:conf目录
     ###重要的事情说三遍
     ###重要的事情说三遍
     ###重要的事情说三遍
     必须提前上传my.cnf文件到/data/conf目录,并且它与window中的配置文件my.ini后缀名是不一样
     必须提前上传my.cnf文件到/data/conf目录,并且它与window中的配置文件my.ini后缀名是不一样
     必须提前上传my.cnf文件到/data/conf目录,并且它与window中的配置文件my.ini后缀名是不一样 
     详情见:资料/my.cnf

注2:data目录
     数据保存到宿主机中,下次需要的时候重启容器,原有数据都能被加载,不会丢失数据

3.创建mysql5.7容器

docker run -p 3306:3306 \
  --name mysql \
  -v /data/mysql/conf/my.cnf:/etc/my.cnf \
  -v /data/mysql/data:/var/lib/mysql \
  --privileged=true \
  --restart=always \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -d mysql/mysql-server:5.7   

参数说明:
-p 3306:3306:宿主机端口:容器端口
--name mysql:容器名字
-v:挂载宿主机的一个目录, 持久化存储的关键所在,将主机目录挂载到容器对应目录,分别是:配置文件、日志文件、数据文件
-v /data/mysql/conf:/etc/mysql/conf.d
-v /data/mysql/logs:/logs
-v /data/mysql/data:/var/lib/mysq
--privileged=true:使用该参数,container内的root拥有真正的root权限, 否则,container内的root只是外部的一个普通用户权限
--restart=always:容器自动启动参数,其值可以为[no,on-failure,always]
                  no为默认值,表示容器退出时,docker不自动重启容器
                  on-failure表示,若容器的退出状态非0,则docker自动重启容器,还可以指定重启次数,若超过指定次数未能启动容器则放弃
                  always表示,只要容器退出,则docker将自动重启容器
-e MYSQL_ROOT_PASSWORD=123456:设置root的密码
-d mysql/mysql-server:5.7:后台启动模式及使用的镜像  

4.修改mysql允许Navicat远程连接

docker exec -it mysql /bin/bash                                    #进入mysql5.7容器
mysql -u root -p;                                                  #登录mysql服务器,之后输入mysql密码:123456    
grant all privileges on *.* to root@'%' identified by '123456' with grant option;    #给用户授权
flush privileges;                                                  #更新权限后,外部就可以使用native进行连接了

 注1:数据库字符集查看
          show variables like'character%';

5.创建数据库nacos_config,并进行初始化

6.持久化测试

 删除容器,重启容器,测试之前添加的数据naocs及数据是否存在

7.小结:使用bridge网络创建mysql5.7容器,创建并初始化数据库nacos

目前网络模式为:bridge

  1. nacos-docker镜像安装nacos并配置数据库(nacos单机版)
    1.拉取镜像
    docker pull nacos/nacos-server:1.1.4
    2.配置数据库(之前已完成)
    3.创建nacos容器
    docker run -d \
    -e PREFER_HOST_MODE=ip \
    -e MODE=standalone \
    -e SPRING_DATASOURCE_PLATFORM=mysql \
    -e MYSQL_MASTER_SERVICE_HOST=172.17.0.2 \
    -e MYSQL_MASTER_SERVICE_PORT=3306 \
    -e MYSQL_MASTER_SERVICE_USER=root \
    -e MYSQL_MASTER_SERVICE_PASSWORD=123456 \
    -e MYSQL_MASTER_SERVICE_DB_NAME=nacos_config \
    -e MYSQL_SLAVE_SERVICE_HOST=172.17.0.2 \
    -p 8848:8848 \
    --name nacos \
    --restart=always \
    nacos/nacos-server:1.1.4
   参数说明:
   docker run -d \                                                                              #后台支行模式
   -e PREFER_HOST_MODE=hostname \                                         #是否支持hostname,可选项:hostname/ip,默认值ip
   -e MODE=standalone \                                                                #cluster模式/standalone模式,可选项:cluster/standalone,默认值cluster
   -e SPRING_DATASOURCE_PLATFORM=mysql \                         #standalone支持 mysql,可选项:mysql/empty,默认值empty
   -e MYSQL_MASTER_SERVICE_HOST=172.17.0.2 \                      #mysql主节点数据库IP,这有个坑:因为网络模式为bridge重启系统后IP会变导致nacos的再次启动失败
   -e MYSQL_MASTER_SERVICE_PORT=3306 \                               #mysql主节点端口
   -e MYSQL_MASTER_SERVICE_USER=root \                                 #数据库用户名
   -e MYSQL_MASTER_SERVICE_PASSWORD=123456 \                 #数据库密码
   -e MYSQL_MASTER_SERVICE_DB_NAME=nacos_config \           #mysql主节点数据库名
   -e MYSQL_SLAVE_SERVICE_HOST=172.17.0.2 \                          #mysql从节点数据库IP
   -p 8848:8848 \                                                                              #主机端口映射
   --name nacos \                                                                             #容器名
   --restart=always \                                                                         #容器自动启动
   nacos/nacos-server:1.1.4                                                              #镜像名

   注1:由于没有配置mysql的主、从集群、本以为MYSQL_SLAVE_SERVICE_HOST可以不用配置,但通过查看nacos容器内的config/application.properties文件,
           会发现这此值未设置默认值,所以会导致启动报错,容器启动不起来,这里可以与主数据库一致。还有一个解决方案就是
           ##删除从库的配置,将配置数据库数量改为1也行,后面例子就是这样做的 
           //-e MYSQL_SLAVE_SERVICE_HOST=172.17.0.2 \
           -e MYSQL_DATABASE_NUM=1 \

   注2:相关命令
            #停止并删除所有容器
            docker stop nacos && docker rm nacos
            #docker logs-查看docker容器日志
            docker logs -f -t --tail=100 nacos

4.访问nacos
   ip:8848/nacos
   http://192.168.217.133:8848/nacos

5.测试
   1.进入控制器,并添加测试数据
      新建配置test.yml并添加数据
      username: zs
   2.查看数据库是否更新
      数据库配置没有问题的话可以在表config_info中看到刚才新增的配置信息
   3.在linux控制台输入如下命令获得配置
      curl -X GET "http://ip:8848/nacos/v1/cs/configs?dataId=test.yml&group=DEFAULT_GROUP"
      即可获得配置信息
      
      curl -X GET "http://192.168.217.133:8848/nacos/v1/cs/configs?dataId=test.yml&group=DEFAULT_GROUP"


目前网络模式为:自定义网络mynet

  1. nacos-docker镜像安装nacos并配置数据库(集群版)
    0.停止并删除所有容器

      docker stop nacos && docker rm nacos
    

    1.使用自定义网络mynet启动mysql容器

      docker run \
        --name mysql \
        --net mynet \
        --ip 192.168.0.11 \
        -v /data/mysql/conf/my.cnf:/etc/my.cnf \
        -v /data/mysql/data:/var/lib/mysql \
        --privileged=true \
        --restart=always \
        -e MYSQL_ROOT_PASSWORD=123456 \
        -d mysql/mysql-server:5.7   
    
        注1:容器启动成功后,修改mysql允许root远程访问(同上)
        
    
     2.创建nacos集群    
        集群节点IP设置如下         
        nacos01节点IP:192.168.0.21
        nacos02节点IP:192.168.0.22
        nacos03节点IP:192.168.0.23
    
        创建集群节点1
        docker run -d \
          --net mynet \
          --ip 192.168.0.21 \
          -e PREFER_HOST_MODE=ip \
          -e MODE=cluster \
          -e NACOS_SERVERS="192.168.0.22:8848 192.168.0.23:8848" \
          -e SPRING_DATASOURCE_PLATFORM=mysql \
          -e MYSQL_MASTER_SERVICE_HOST=192.168.0.11 \
          -e MYSQL_MASTER_SERVICE_PORT=3306 \
          -e MYSQL_MASTER_SERVICE_USER=root \
          -e MYSQL_MASTER_SERVICE_PASSWORD=123456 \
          -e MYSQL_MASTER_SERVICE_DB_NAME=nacos_config \
          -e MYSQL_DATABASE_NUM=1 \
          -e NACOS_SERVER_PORT=8848 \
          --name nacos01 \
          --restart=always \
          nacos/nacos-server:1.1.4    
    
        创建集群节点2
        docker run -d \
          --net mynet \
          --ip 192.168.0.22 \
          -e PREFER_HOST_MODE=ip \
          -e MODE=cluster \
          -e NACOS_SERVERS="192.168.0.21:8848 192.168.0.23:8848" \
          -e SPRING_DATASOURCE_PLATFORM=mysql \
          -e MYSQL_MASTER_SERVICE_HOST=192.168.0.11 \
          -e MYSQL_MASTER_SERVICE_PORT=3306 \
          -e MYSQL_MASTER_SERVICE_USER=root \
          -e MYSQL_MASTER_SERVICE_PASSWORD=123456 \
          -e MYSQL_MASTER_SERVICE_DB_NAME=nacos_config \
          -e MYSQL_DATABASE_NUM=1 \
          -e NACOS_SERVER_PORT=8848 \
          --name nacos02 \
          --restart=always \
          nacos/nacos-server:1.1.4    
    
        创建集群节点3
        docker run -d \
          --net mynet \
          --ip 192.168.0.23 \
          -e PREFER_HOST_MODE=ip \
          -e MODE=cluster \
          -e NACOS_SERVERS="192.168.0.21:8848 192.168.0.22:8848" \
          -e SPRING_DATASOURCE_PLATFORM=mysql \
          -e MYSQL_MASTER_SERVICE_HOST=192.168.0.11 \
          -e MYSQL_MASTER_SERVICE_PORT=3306 \
          -e MYSQL_MASTER_SERVICE_USER=root \
          -e MYSQL_MASTER_SERVICE_PASSWORD=123456 \
          -e MYSQL_MASTER_SERVICE_DB_NAME=nacos_config \
          -e MYSQL_DATABASE_NUM=1 \
          -e NACOS_SERVER_PORT=8848 \
          --name nacos03 \
          --restart=always \
          nacos/nacos-server:1.1.4 
    
        注1:小插曲
                 由于虚拟机分配的内存为1G,开到第四个容器时,由于内存不够导致容器启动失败,重新设置2G内存后启动成功
    
     3.测试,访问任何一节点均可
        curl http://192.168.0.21:8848/nacos/index.html
        curl http://192.168.0.22:8848/nacos/index.html   
        curl http://192.168.0.23:8848/nacos/index.html    
    
        curl -X GET "http://192.168.0.23:8848/nacos/v1/cs/configs?dataId=test.yml&group=DEFAULT_GROUP"
    
    
  2. nginx动态代理nacos集群
    1.创建nginx容器

     docker run \
      --name mynginx \
      -d -p 80:80 \
      -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
      -v /data/nginx/log:/var/log/nginx \
      -v /data/nginx/html:/usr/share/nginx/html \
      nginx:latest
    
     2.添加至自定义网络mynet并测试
        docker network connect mynet mynginx
    
     3.修改nginx配置文件nginx.conf
        详情见:资料/nginx.conf
    
     4.重启nginx
    
    

附录一:linux中使用命令导入导出数据
1.导出数据库
1.导出数据和表结构:

mysqldump -u 用户名 -p 密码 数据库名 > 数据库名.sql
mysqldump -u root -p dbname > dbname .sql
敲回车后会提示输入密码 

2.只导出表结构

mysqldump -u 用户名 -p 密码 -d 数据库名 > 数据库名.sql
mysqldump -u root -p -d dbname > dbname .sql
敲回车后会提示输入密码

2.导入数据库
1.首先建空数据库

mysql>create database dbname ;

2.导入数据库

方法一:
1.选择数据库
  mysql>use dbname ;
2.设置数据库编码
  mysql>set names utf8;
3.导入数据(注意sql文件的路径)
  mysql>source /home/xxxx/dbname .sql;
方法二:
mysql -u 用户名 -p密码 数据库名 < 数据库名.sql

附录二:修改mysql允许远程连接

通过这个命令进入容器内

docker exec -it mysql5.7 bash

连接mysql

mysql -u root -p

修改mysql允许远程连接

GRANT ALL PRIVILEGES ON . TO 'root'@'%' WITH GRANT OPTION
FLUSH PRIVILEGES

附录X:docker中运行MySQL如何查找使用中的配置文件my.cnf

使用如下命令即可

mysql --help | grep my.cnf

附录X:docker版nacos各种启动命令
1.单实例 nacos 连接 mysql
docker run -d --name nacos-mysql-standalone --net=host -v /home/nacos/logs:/home/nacos/logs -e MODE=standalone -e MYSQL_DATABASE_NUM=1 -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_MASTER_SERVICE_HOST=your_host -e MYSQL_MASTER_SERVICE_PORT=3306 -e MYSQL_MASTER_SERVICE_USER=root -e MYSQL_MASTER_SERVICE_PASSWORD=123456 -e MYSQL_MASTER_SERVICE_DB_NAME=nacos -p 8848:8848 nacos/nacos-server
2.单实例 nacos 连接 mysql(主从)
docker run -d --name nacos-mysql-standalone --net=host -v /home/nacos/logs:/home/nacos/logs -e MODE=standalone -e MYSQL_DATABASE_NUM=2 -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_MASTER_SERVICE_HOST=your_host -e MYSQL_MASTER_SERVICE_PORT=3306 -e MYSQL_MASTER_SERVICE_USER=root -e MYSQL_MASTER_SERVICE_PASSWORD=123456 -e MYSQL_MASTER_SERVICE_DB_NAME=nacos -e MYSQL_SLAVE_SERVICE_HOST=your_host -e MYSQL_SLAVE_SERVICE_PORT=3306 -p 8848:8848 nacos/nacos-server
3.集群 nacos 连接 mysql
docker run -d --name nacos-cluster --net=host -v /home/nacos-cluster/logs:/home/nacos/logs --env MODE=cluster --env NACOS_SERVERS="host1:8848 host2:8848" --env MYSQL_DATABASE_NUM=1 --env MYSQL_MASTER_SERVICE_HOST=your_host --env MYSQL_MASTER_SERVICE_PORT=3306 --env MYSQL_MASTER_SERVICE_DB_NAME=nacos --env MYSQL_MASTER_SERVICE_USER=root --env MYSQL_MASTER_SERVICE_PASSWORD=123456 --env NACOS_SERVER_PORT=8848 -d -p 8848:8848 nacos/nacos-server
4.集群 nacos 连接 mysql(主从)
docker run -d --name nacos-cluster --net=host -v /home/nacos-cluster/logs:/home/nacos/logs --env MODE=cluster --env NACOS_SERVERS="host1:8848 host2:8848" --env MYSQL_DATABASE_NUM=2 --env MYSQL_MASTER_SERVICE_HOST=your_host --env MYSQL_MASTER_SERVICE_PORT=3306 --env MYSQL_MASTER_SERVICE_DB_NAME=nacos --env MYSQL_MASTER_SERVICE_USER=root --env MYSQL_MASTER_SERVICE_PASSWORD=123456 --env MYSQL_SLAVE_SERVICE_HOST=your_host --env MYSQL_SLAVE_SERVICE_PORT=3306 --env NACOS_SERVER_PORT=8848 -d -p 8848:8848 nacos/nacos-server

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
存储 运维 监控
NACOS 配置中心和注册中心是分两个集群部署还是放在一个集群中
【2月更文挑战第33天】NACOS 配置中心和注册中心是分两个集群部署还是放在一个集群中
257 3
|
SpringCloudAlibaba 应用服务中间件 Nacos
SpringCloud Alibaba系列(二) Nacos高可用和持久化
  测试环境可以使用单机版,但是上了生产环境,为了保证系统的高可用,必须要做好相应的数据持久化和高可用,nacos默认采用了apache的内置数据库derby,但是不方便观察数据存储的情况,所以需要配置数据库,目前支持mysql,为了保证Nacos单节点故障,我们为采用集群部署,通过nginx分发到nacos,保证了nacos高可用。
149 1
|
4月前
|
缓存 负载均衡 Java
Nacos 集群部署时性能优化配置
Nacos 集群部署时性能优化配置
187 2
|
4月前
|
监控 数据库连接 Nacos
Nacos 集群部署过程中,常见的问题
Nacos 集群部署过程中,常见的问题
|
5月前
|
存储 关系型数据库 MySQL
Nacos的单机以及集群部署模式
Nacos定义为一个IDC内部应用组件,并非面向公网环境的产品,建议在内部隔离网络环境中部署,强烈不建议部署在公共网络环境。
118 0
|
6月前
|
Java 测试技术 Nacos
|
6月前
|
存储 关系型数据库 MySQL
【深入了解Nacos集群和持久化配置】 ——每天一点小知识
【深入了解Nacos集群和持久化配置】 ——每天一点小知识
369 0
|
负载均衡 Java 关系型数据库
|
存储 Java 关系型数据库
四.SpringCloudAlibaba极简入门-Nacos持久化与集群
在《Spring Cloud极简入门》应用架构演变一文中我们有提到,我们可以通过集群手段来实现来提高应用的作业能力,防止单节点故障。在之前的Nacos案例中我们玩的都是单机版的, 本片文章我们来探讨一下Nacos的集群部署。 在Nacos中数据默认是基于内存存储的,当Nacos重启数据(服务列表,配置列表)将会丢失,在Nacos中支持将数据持久到数据库。那么当我们对Nacos做了集群部署之后,多个Nacos节点之间是需要数据同步(数据共享)的,而正好Nacos节点之间的数据同步也是基于数据库来实现。所以我们要多Nacos做集群操作得向对Nacos做数据持久化。 这里我演示的是在centos
|
存储 关系型数据库 MySQL
Nacos配置数据持久化
Nacos配置数据持久化
140 0
下一篇
无影云桌面