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

卷与nfs实现多台主机容器之间的数据共享

容器存放数据到宿主机里

数据持久化:永久保存  数据共享:容器和容器 容器和宿主机

就是宿主机里的文件夹

/var/lib/docker/volumes

docker 容器:容器运行起来是一个进程,进程的数据默认都在内存里,内存里的数据停电容易丢失,容器里运行的app的数据需要永久保存(持久化),存放磁盘里就可以永久保存

案例:

    1.在一台宿主机上实现容器和宿主机之间的数据共享

    2.在一台宿主机上实现多个容器之间数据共享

    3.使用nfs服务器实现多个宿主机上的容器之间的数据共享

[root@docker volumes]# docker  volume create  sc

[root@docker volumes]# docker  volume ls

[root@docker volumes]# cd /var/lib/docker/volumes/

[root@docker volumes]# ls

457b449740847795c328d91bcaf2e8dc7695d959ed521dc4d3be944f63cb0e00  backingFsBlockDev    metadata.db  sc

在volumes下会自动建立一个sc文件夹  为空

本地的虚拟机:

1.docker run -d -p 7070:80 --name sc_lilin --mount source=sc,target=/usr/share/nginx/html nginx

source=sc-vol    源  sc-vol是卷的名字

target=/usr/share/nginx/html  容器里的目标文件夹

         nginx默认的存放网站网页的地方---》网页根目录

[root@docker _data]# mkdir /data

2. docker run -d -p 7071:80 --name sc_lilin-2 -v /data:/c_data nginx

可以进入容器 数据是同步的

3.[root@docker data]# docker volume create xiefengbao

[root@docker data]# docker run -d -p 7073:80 --name xiefengbao-1 -v xiefengbao:/usr/share/nginx/html nginx 可读可写

[root@docker data]# cd /var/lib/docker/volumes/xiefengbao/_data/

[root@docker _data]# ls

50x.html  index.html

[root@docker _data]# docker volume create zhangjiahui

[root@docker _data]# docker run -d -p 7074:80 --name zhangjiahui-1 -v zhangjiahui:/usr/share/nginx/html:ro  nginx 只读(限制容器里的程序 宿主机还是可以改)

在云服务器里启动mysql的容器 创建一个卷mysql_data用来存放mysql数据库的数据

root@aliyun-sz:~# docker volume create mysql_data

root@aliyun-sz:~# docker run -d -p 33069:3306 --name duan-mysql-1  -e MYSQL_ROOT_PASSWORD='Sctl@123456789' -v mysql_data:/var/lib/mysql  mysql:5.7.41

1e2a2d37316ab97ee2165120f15861ddcd4ceaf56fd0627e21d197e4bdd6c855

root@aliyun-sz:~# cd /var/lib/docker/volumes/mysql_data/_data/

root@aliyun-sz:/var/lib/docker/volumes/mysql_data/_data# ls

auto.cnf    ca.pem           client-key.pem  ibdata1      ib_logfile1  mysql       performance_schema  public_key.pem   server-key.pem

ca-key.pem  client-cert.pem  ib_buffer_pool  ib_logfile0  ibtmp1       mysql.sock  private_key.pem     server-cert.pem  sys

如何访问到我们的云服务器里的mysql?

    使用工具SQLyog或者mysql客户机段、pycharm等

    需要在云服务器的安全组里开放33069端口

[root@docker _data]# mysql -h 120.24.223.108 -P 33069 -uroot -p'Sctl@123456789' 

Welcome to the MariaDB monitor.  Commands end with ; or \g.

卷里有内容的情况:容器使用卷的时候,本质就是容器挂载了宿主机的某个文件夹到容器里,所以最开始的时候以宿主机卷里的内容为主,挂载后,容器可以对卷里的数据进行修改。

卷里没有内容的情况: 只是一个空文件夹,容器启动的时候也会挂载卷的这个空文件夹,但是会把容器里的数据写到卷里。

挂载后数据同步的

多台宿主机里的多个容器之间的数据共享

NFS 服务器:  是一台可以共享文件的机器

network file system 网络文件系统: 在网络上共享文件的服务  --》多台服务器看到相同的内容--》数据一致性、数据共享

为什么选择使用nfs服务器来解决数据一致性问题?

    nfs的优点: 安装方便,成本低廉 

    nfs的缺点:传统的网络,有时延 --》使用万兆网络

               单点故障 --》定时备份   或高可用 数据同步sync  异步async

数据读写并发特别大和速度要求快的场景,建议SAN

存储区域网络 (Storage Area Network, SAN) 是企业最常用的存储网络架构,要求高吞吐量和低延迟的业务关键型业务往往采用这类架构运行。如今,采用全闪存存储的 SAN 部署数量增速迅猛。与旋转磁盘相比,全闪存存储可提供更出色的性能、稳定一致的低延迟以及更低的总成本。SAN 将数据存储在集中式共享存储中,使企业能够运用一致的方法和工具来实施安全防护、数据保护和灾难恢复。


1.搭建好nfs服务器

[root@master 55]# yum install nfs-utils -y

建议docker集群内的所有的节点都安装nfs-utils软件,因为节点服务器里创建卷需要支持nfs网络文件系统

[root@master 55]# service nfs restart

[root@docker _data]# systemctl enable nfs

Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.


2.新建共享目录和index.html网页

[root@master 55]# mkdir  -p /sc/web

[root@master 55]# cd /sc/web/

[root@master web]# echo "welcome to sanchuang" >index.html


3.设置共享目录

[root@master 55]# vim /etc/exports

/sc/web   192.168.223.0/24(rw,no_root_squash,sync)

[root@master 55]# chmod 777 /sc/web   在linux系统里给其他机器上的用户写的权限


4.刷新nfs或者重新输出共享目录

[root@nfs-server web]# exportfs -rv 输出所有的共享目录

exporting 192.168.2.0/24:/sc/web

[root@master web]# service nfs restart  重启nfs服务

Redirecting to /bin/systemctl restart nfs.service

设置nfs开机启动

[root@nfs-server ~]# systemctl enable nfs

Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.


在docker集群里的任意一个节点服务器上测试能否挂载nfs服务器共享的目录 这里使用的ubuntu虚拟机

[root@scdocker ~]# mkdir  /test  新建挂载点目录/test

centos的系统,安装nfs-utils  安装软件包的目的是能够支持nfs协议

ubuntu的系统  安装apt-get install nfs-kernel-server -y

root@sc:~# mount 192.168.205.137:/sc/web  /test

在ubuntu 宿主机上创建支持nfs功能的卷 nfs-web-1

--opt  o=addr=192.168.159.142  指定nfs服务器的地址

--opt  device=:/sc/web 指定nfs服务器上共享的文件夹的路径

[root@scdocker test]# docker volume create --driver local --opt type=nfs --opt  o=addr=192.168.159.142,nolock,soft,rw,sync  --opt  device=:/sc/web   nfs-web-1

在docker宿主机上都可以启动容器,使用刚刚创建的nfs-web-1卷

[root@scdocker test]# docker run -d --name wang-1  -p 5588:80  -v nfs-web-1:/usr/share/nginx/html  nginx

00a1bfbcbc47c11e8d768dc0378df8ec27e9ae1bde3c78f63e96201ea9a84111

打开浏览器去访问

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 十、Docker版Redis集群搭建
  • DP学习——状态模式
  • idea将普通项目转换为maven项目
  • 使用JAVA代码实现生成二维码
  • windows网络应急排查
  • 以线程完成并发的UDP服务端
  • 使用kali对操作系统和网络服务类型进行探测
  • 列举excel中调整行高列宽的五种方法
  • Telegram曝零日漏洞,可伪装成视频攻击安卓用户
  • linux系统安装pytorch_中文地址命名实体识别案例
  • 使用Kafka Streams进行事件流处理
  • 实时视频流中的目标检测与跟踪:动态视觉的挑战与实现
  • 基于单片机控制的变压器油压油温故障检测
  • AI学习记录 - 激活函数的作用
  • 用51单片机或者stm32能否开发机器人呢?
  • #Java异常处理
  • 2017 年终总结 —— 在路上
  • Android交互
  • Golang-长连接-状态推送
  • jdbc就是这么简单
  • Joomla 2.x, 3.x useful code cheatsheet
  • Linux快速复制或删除大量小文件
  • Next.js之基础概念(二)
  • python学习笔记-类对象的信息
  • Sass 快速入门教程
  • SwizzleMethod 黑魔法
  • WebSocket使用
  • 从PHP迁移至Golang - 基础篇
  • 两列自适应布局方案整理
  • 前嗅ForeSpider中数据浏览界面介绍
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 数据仓库的几种建模方法
  • 我这样减少了26.5M Java内存!
  • 写代码的正确姿势
  • 一起参Ember.js讨论、问答社区。
  • UI设计初学者应该如何入门?
  • 国内开源镜像站点
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #{} 和 ${}区别
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #pragam once 和 #ifndef 预编译头
  • (10)STL算法之搜索(二) 二分查找
  • (2020)Java后端开发----(面试题和笔试题)
  • (3)(3.5) 遥测无线电区域条例
  • (Git) gitignore基础使用
  • (二)原生js案例之数码时钟计时
  • (回溯) LeetCode 46. 全排列
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (剑指Offer)面试题34:丑数
  • (力扣)1314.矩阵区域和
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)EOS中账户、钱包和密钥的关系
  • (转)Sql Server 保留几位小数的两种做法
  • (转)可以带来幸福的一本书