当前位置: 首页 > news >正文

Docker之Nacos的持久化和集群部署

目录

docker mysql:5.7的持久化存储及远程连接

1.下拉mysql镜像

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

3.创建mysql5.7容器

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

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

单节点nacos容器外网部署 

1.拉取镜像

 2.创建nacos容器

3.访问nacos 

4.测试

1.进入控制器,并添加测试数据

2.查看数据库是否更新

 3.在linux控制台输入如下命令获得配置

三、自定义网络mynet

0.停止并删除所有容器

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

2.创建nacos集群

3.测试,访问任何一节点均可

四、外网Nginx负载内网nacos节点集群

1.创建nginx容器

2.添加至自定义网络mynet并测试

3.修改nginx配置文件nginx.conf


docker mysql:5.7的持久化存储及远程连接

1.下拉mysql镜像

这里选择的版本是mysql5.7

 docker pull mysql/mysql-server:5.7

 

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容器

先查看启动的容器,如果有,先干掉,避免出现错误
然后查看3306端口有没有被占用

 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   

  

 

 ​​​​​​​

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

#进入mysql5.7容器

 docker exec -it mysql /bin/bash 

 

 #登录mysql服务器,之后输入mysql密码:123456

#给用户授权

 grant all privileges on *.* to root@'%' identified by '123456' with grant option;   

 

#更新权限 外部就可以使用native进行连接了

 flush privileges;                                                  

 

== 注1:数据库字符集查看==

show variables like'character%';

 

退出mysql exit

 

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

 

单节点nacos容器外网部署 

1.拉取镜像

  docker pull nacos/nacos-server:1.1.4

 

 

 2.创建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
 

 

3.访问nacos 

 ip:8848/nacos
 
  http://192.168.111.130:8848/nacos

 

 

4.测试

1.进入控制器,并添加测试数据

新建配置test.yml并添加数据
          username: zs

 

 

2.查看数据库是否更新

数据库配置没有问题的话可以在表config_info中看到刚才新增的配置信息

 

 

 

 3.在linux控制台输入如下命令获得配置

  curl -X GET "http://192.168.111.130:8848/nacos/v1/cs/configs?dataId=tets.yml&group=DEFAULT_GROUP"
          即可获得配置信息
          
          curl -X GET "http://192.168.195.139:8848/nacos/v1/cs/configs?dataId=tets.yml&group=DEFAULT_GROUP"

 

 

三、自定义网络mynet

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,开到第四个容器时,由于内存不够导致容器启动失败,重新设置4G内存后启动成功

 

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=tets.yml&group=DEFAULT_GROUP”

 

 

 

 

 

四、外网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
docker network --help
docker network inspect mynet

 

3.修改nginx配置文件nginx.conf

我们先将nginx原来的nginx.conf改好名字,然后将我们准备好的nginx.conf导入,导入之后我们需要将nginx先关闭容器,然后再重新开启,要不然nginx.conf不生效

 

 

 

最后测试: 

 

 

 

相关文章:

  • 前端——表单相关的属性(上)
  • 【C++初阶7-stringOJ】上手用一下
  • 【Java 实战】通过ElasticSearch实现全局搜索功能
  • webgis —— 为瓦片构建缓存
  • 最惨面试季:“这么简单的9道题,我刷掉了90%的测试员。”
  • c++11 function模板:模板特化与可变参数函数模板
  • CSDN竞赛14期题解
  • Qt创建线程的几种方式_创建一个新线程的方法
  • Android自定义ViewGroup布局进阶,完整的九宫格实现
  • 完全开源的代码生成器之code-generator
  • C++:实现量化将期限结构与一组债券相匹配 使用四种不同的拟合方法测试实例
  • 毫米波雷达的那些知识点——增益、阈值、功耗、窗口、RF 发射功率调整、VCO、LNA
  • 1568_AURIX_TC275_电源管理_唤醒配置与状态
  • MySQL表的增删查改(上)
  • 世界杯---人生就是一届又一届世界杯
  • SegmentFault for Android 3.0 发布
  • __proto__ 和 prototype的关系
  • Akka系列(七):Actor持久化之Akka persistence
  • Django 博客开发教程 16 - 统计文章阅读量
  • ES6语法详解(一)
  • exports和module.exports
  • Git的一些常用操作
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • Linux Process Manage
  • python学习笔记-类对象的信息
  • Vue.js 移动端适配之 vw 解决方案
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 前端面试总结(at, md)
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 找一份好的前端工作,起点很重要
  • #DBA杂记1
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (分布式缓存)Redis哨兵
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (篇九)MySQL常用内置函数
  • (四)鸿鹄云架构一服务注册中心
  • (一一四)第九章编程练习
  • (转)EXC_BREAKPOINT僵尸错误
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .NET 发展历程
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • /var/log/cvslog 太大
  • [20161214]如何确定dbid.txt
  • [Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作
  • [Arduino学习] ESP8266读取DHT11数字温湿度传感器数据
  • [cocos creator]EditBox,editing-return事件,清空输入框
  • [flask]http请求//获取请求头信息+客户端信息
  • [Grafana]ES数据源Alert告警发送
  • [IE9] IE9 Beta崩溃问题解决方案
  • [Java] 模拟Jdk 以及 CGLib 代理原理
  • [LeetCode] 2.两数相加
  • [Linux]进程间通信(进程间通信介绍 | 匿名管道 | 命名管道)