卷与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
打开浏览器去访问
原文地址:https://blog.csdn.net/weixin_70278423/article/details/140646134
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!