卷与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

打开浏览器去访问

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值