创作不易,来了的客官点点关注,收藏,订阅一键三连❤😜
前言
运维之基础——Linux。我是一个即将毕业的大学生,超超。如果你也在学习Linux,不妨跟着萌新超超一起学习Linux,拿下Linux,一起加油,共同努力,拿到理想offer!
系列文章
Linux进阶 | 超详细全方面的Docker Swarm Web集群介绍与部署!
Linux进阶 | docker compose的安装与使用详解,超详细!
Linux进阶 | Docker部署nginx的web服务,VOLUME的使用详解,实现数据持久化!
Linux进阶 | 2万字总结最详细的Docker的安装、底层隔离机制和简单使用!
概述
Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的Linux容器解决方案。本期内容为Docker第六期,通过本期内容将会掌握NFS服务的部署,以及如何使用Docker+NFS|+Volume实现数据的一致性。
目录
前言
系列文章
概述
超超Docker学习思维导图
NFS与存储服务器
NFS
NFS发的优缺点
存储服务器
存储服务器的优缺点
NFS和RPC
nfs服务和rpc到底是如何实现的呢?
RPC 是如何知道NFS的端口呢?
NFS服务器的使用
方法一:使用nfs-server
方法二:使用sshfs共享文件
超超Docker学习思维导图
NFS与存储服务器
NFS
NFS,网络文件系统(network files system)是一种基于TCP传输协议的文件共享系统。它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录(在网络上共享自己机器里的文件,其他的机器可以使用)。(保持数据的一致性)
NFS是比较廉价的解决方案,一般的公司不会采用,性能一般,建议使用专业的存储服务器。
NFS发的优缺点
优点: 随便一台linux服务器都可以搭建,成本非常低,构建非常容易。
缺点: 读取速度有限,跟网络质量,磁盘IO,cpu,内存等因素有关,在传统的TCP/IP网络上传输的。
存储服务器
存储区域网络(Storage Area Network,简称SAN)采用网状通道(Fibre Channel ,简称FC,区别与Fiber Channel光纤通道)技术,通过FC交换机连接存储阵列和服务器主机,建立专用于数据存储的区域网络。
存储服务器的优缺点
优点:读写性能好,有灾备
缺点: 费用昂贵,成本高,需要一笔费用
NFS和RPC
nfs服务和rpc到底是如何实现的呢?
NFS服务的启动,我们就得需要远程过程调用RPC的服务。RPC 最主要的功能就是指定每个 NFS 功能所对应的端口号,并且回报给客户端,让客户端可以连结到正确的端口上去。
RPC 是如何知道NFS的端口呢?
这是因为当服务器在启动 NFS服务时,会随机取用数个端口,并主动的向 RPC 注册,因此 RPC 可以知道每个端口对应的 NFS 功能。
NFS自己并没有去对外监听某个端口号,而是外包给了rpc服务,rpc帮助nfs去监听端口,然后告诉客户机和服务器进程对应的连续端口号。
[root@nfs-server ~]# netstat -anplut|grep nfs[root@nfs-server ~]# netstat -anplut|grep rpctcp 0 0 0.0.0.0:58511 0.0.0.0:* LISTEN 2337/rpc.statdtcp 0 0 0.0.0.0:8 0.0.0.0:* LISTEN 2347/rpc.mountdtcp6 0 0 :::8 :::* LISTEN 2347/rpc.mountdtcp6 0 0 :::35677 :::* LISTEN 2337/rpc.statdudp 0 0 0.0.0.0:8 0.0.0.0:* 2347/rpc.mountdudp 0 0 0.0.0.0:36531 0.0.0.0:* 2337/rpc.statdudp 0 0 127.0.0.1:817 0.0.0.0:* 2337/rpc.statdudp6 0 0 :::8 :::* 2347/rpc.mountdudp6 0 0 :::48874 :::* 2337/rpc.statd[root@nfs-server ~]#
NFS服务器的使用
方法一:使用nfs-server
1.准备一台服务器担任NFS Server
CentOS8(1核/2G)
配置好ip地址:192.168.232.135
修改好主机名:nfs-server
root@docker-4 ~]# hostnamectl set-hostname nfs-server[root@docker-4 ~]# su[root@nfs-server ~]#
IP:192.168.232.135 主机名:nfs-server 担任角色:nfs server
IP:192.168.232.132 主机名:docker-manager-1 担任角色:swarm manager
IP:192.168.232.133 主机名:docker-2 担任角色:swarm node1
IP:192.168.232.134 主机名:docker-3 担任角色:swarm node2
IP:192.168.232.131 主机(ubuntu)名:chaochao 担任角色:swarm node3
2.安装和启动nfs服务
[root@nfs-server ~]# yum install nfs-utils -y[root@nfs-server ~]# service nfs-server startRedirecting to /bin/systemctl start nfs-server.service[root@nfs-server ~]#
查看nfs服务的进程:ps aux|grep nfs
[root@nfs-server ~]# ps aux|grep nfsroot 2346 0.0 0.1 50108 2672 ? Ss 19:39 0:00 /usr/sbin/nfsdcldroot 2352 0.0 0.0 0 0 ? S 19:39 0:00 [nfsd]root 2353 0.0 0.0 0 0 ? S 19:39 0:00 [nfsd]root 2354 0.0 0.0 0 0 ? S 19:39 0:00 [nfsd]root 2355 0.0 0.0 0 0 ? S 19:39 0:00 [nfsd]root 2356 0.0 0.0 0 0 ? S 19:39 0:00 [nfsd]root 2357 0.0 0.0 0 0 ? S 19:39 0:00 [nfsd]root 2358 0.0 0.0 0 0 ? S 19:39 0:00 [nfsd]root 2359 0.0 0.0 0 0 ? S 19:39 0:00 [nfsd]root 2367 0.0 0.0 12324 1064 pts/0 S+ 19:40 0:00 grep --color=auto nfs[root@nfs-server ~]#
3.通过NFS共享文件
编辑/etc/exports,写好共享的具体目录、权限以及共享的网段、IP
[root@nfs-server /]# vim /etc/exports[root@nfs-server /]# cat /etc/exports/web 192.168.232.0/24(rw,all_squash,sync)/download 192.168.232.0/24(ro,all_squash,sync)[root@nfs-server /]#
刷新输出文件的列表
[root@nfs-server /]# exportfs -rvexporting 192.168.232.0/24:/downloadexporting 192.168.232.0/24:/web[root@nfs-server /]#[root@nfs-server /]# cd /download/[root@nfs-server download]# ls[root@nfs-server download]# vim chao.txt[root@nfs-server download]# lschao.txt[root@nfs-server download]# exportfs -rvexporting 192.168.232.0/24:/downloadexporting 192.168.232.0/24:/web[root@nfs-server download]#
4.关闭防火墙和selinux
[root@nfs-server download]# service firewalld stopRedirecting to /bin/systemctl stop firewalld.service[root@nfs-server download]# systemctl disable firewalld[root@nfs-server download]# getenforceDisabled[root@nfs-server download]#
5.在客户机上挂载宿主机上的NFS服务器共享的目录
在客户机上安装NFS服务:yum install nfs-utils -y
[root@docker-2 lianxi]# yum install nfs-utils -y
查看宿主机共享的目录
[root@docker-2 lianxi]# showmount -e 192.168.232.135Export list for 192.168.232.135:/download 192.168.232.0/24/web 192.168.232.0/24[root@docker-2 lianxi]#
6.挂载nfs-server上的共享目录到客户机
[root@docker-2 lianxi]# mount 192.168.232.135:/web /web[root@docker-2 lianxi]# cd /web[root@docker-2 web]# ls1.jpg index.html rep.html[root@docker-2 web]#[root@docker-2 web]# df -Th文件系统 类型 容量 已用 可用 已用% 挂载点devtmpfs devtmpfs 876M 0 876M 0% /devtmpfs tmpfs 896M 0 896M 0% /dev/shmtmpfs tmpfs 896M 18M 878M 2% /runtmpfs tmpfs 896M 0 896M 0% /sys/fs/cgroup/dev/mapper/cl-root xfs 17G 8.2G 8.9G 48% //dev/sda1 xfs 1014M 193M 822M 19% /boottmpfs tmpfs 180M 0 180M 0% /run/user/0overlay overlay 17G 8.2G 8.9G 48% /var/lib/docker/overlay2/c2434295873b6ce0f136d4851cb9a9bf10b1ebf77e80f611841484967b857c94/mergedoverlay overlay 17G 8.2G 8.9G 48% /var/lib/docker/overlay2/8b549cd05a4a8ea039ba9357f7d59ddfec2fd3f185702a5a0d97883564f2/mergedoverlay overlay 17G 8.2G 8.9G 48% /var/lib/docker/overlay2/d9f99510abb4c5d5496e54d11ff763be47610ee7851207aec9fdbb1022f14016/mergedoverlay overlay 17G 8.2G 8.9G 48% /var/lib/docker/overlay2/5a87e34567ece3a64a835bcd4cfe59d2ebdf0d36bf74fbd07dff8c82a94f37a2/mergedoverlay overlay 17G 8.2G 8.9G 48% /var/lib/docker/overlay2/b70caa1ed0c781711a41cd82a0a91d465a6e02418633bfa00ce398c92405baff/merged192.168.232.135:/web nfs4 17G 7.8G 9.2G 46% /web[root@docker-2 web]#
[root@docker-manager-1 web]# ls[root@docker-manager-1 web]# mount 192.168.232.135:/web /web[root@docker-manager-1 web]# ls[root@docker-manager-1 web]# cd /web[root@docker-manager-1 web]# ls1.jpg index.html rep.html[root@docker-manager-1 web]# df -Th……overlay overlay 17G 8.3G 8.8G 49% /var/lib/docker/overlay2/06cbd339366e8aeb492b21561573d953073e203122262e5089461da0d0d316a0/mergedoverlay overlay 17G 8.3G 8.8G 49% /var/lib/docker/overlay2/a132f32c9cff25a1a143e325f2aecd0186630df66748c95984bb3cf2ce9fe8b2/mergedoverlay overlay 17G 8.3G 8.8G 49% /var/lib/docker/overlay2/e1efba32267a46940402f682034d07ed51b8ee200186d5acc0c48144cd9fe31e/merged192.168.232.135:/web nfs4 17G 7.8G 9.2G 46% /web[root@docker-manager-1 web]#
[root@docker-3 web]# showmount 192.168.232.135 -eExport list for 192.168.232.135:/download 192.168.232.0/24/web 192.168.232.0/24[root@docker-3 web]# mount 192.168.232.135:/web /web[root@docker-3 web]# cd /web[root@docker-3 web]# ls1.jpg index.html rep.html[root@docker-3 web]# df -TH文件系统 类型 容量 已用 可用 已用% 挂载点devtmpfs devtmpfs 919M 0 919M 0% /devtmpfs tmpfs 939M 0 939M 0% /dev/shmtmpfs tmpfs 939M 18M 921M 2% /runtmpfs tmpfs 939M 0 939M 0% /sys/fs/cgroup/dev/mapper/cl-root xfs 19G 8.8G 9.6G 48% //dev/sda1 xfs 1.1G 202M 862M 19% /boottmpfs tmpfs 188M 0 188M 0% /run/user/0overlay overlay 19G 8.8G 9.6G 48% /var/lib/docker/overlay2/8b549cd05a4a8ea039ba9357f7d59ddfec2fd3f185702a5a0d97883564f2/mergedoverlay overlay 19G 8.8G 9.6G 48% /var/lib/docker/overlay2/c2434295873b6ce0f136d4851cb9a9bf10b1ebf77e80f611841484967b857c94/mergedoverlay overlay 19G 8.8G 9.6G 48% /var/lib/docker/overlay2/6b933ab92577f653a29dcac782a2c5e79bcdbbf219a7ccebb38b585ef117e0b4/mergedoverlay overlay 19G 8.8G 9.6G 48% /var/lib/docker/overlay2/40cc77a0f1c7281915947c1fefeb595837eb75fffec0d808a9994ac1fbde5f90/merged192.168.232.135:/web nfs4 19G 8.4G 9.9G 46% /web[root@docker-3 web]#
root@chaochao:~# mkdir /webroot@chaochao:~# mount 192.168.232.135:/web /webroot@chaochao:~# cd /webroot@chaochao:/web# ls1.jpg index.html rep.htmlroot@chaochao:/web# df -ThFilesystem Type Size Used Avail Use% Mounted onudev devtmpfs 433M 0 433M 0% /devtmpfs tmpfs 96M 1.6M 94M 2% /run/dev/mapper/ubuntu--vg-ubuntu--lv ext4 19G 6.9G 11G 39% /tmpfs tmpfs 477M 0 477M 0% /dev/shmtmpfs tmpfs 5.0M 0 5.0M 0% /run/locktmpfs tmpfs 477M 0 477M 0% /sys/fs/cgroup/dev/sda2 ext4 976M 202M 707M 23% /boot/dev/loop1 squashfs 70M 70M 0 100% /snap/lxd/19188/dev/loop3 squashfs 71M 71M 0 100% /snap/lxd/21029/dev/loop2 squashfs 56M 56M 0 100% /snap/core18/2074/dev/loop4 squashfs 33M 33M 0 100% /snap/snapd/12704/dev/loop5 squashfs 32M 32M 0 100% /snap/snapd/10707/dev/loop6 squashfs 56M 56M 0 100% /snap/core18/2128tmpfs tmpfs 96M 0 96M 0% /run/user/1000overlay overlay 19G 6.9G 11G 39% /var/lib/docker/overlay2/a2d7dea3b856302cf61d9584be91aa69614a8b25db3a7b6c91317d71a6d68a3c/mergedoverlay overlay 19G 6.9G 11G 39% /var/lib/docker/overlay2/c6188638a4df298b840dce222da041733de01e636362c34c4c0e34cec9a34e08/mergedoverlay overlay 19G 6.9G 11G 39% /var/lib/docker/overlay2/e94850d48ea1962457edacef2d09cfaa838fad8b9899d4455c9b31caa11c07e1/merged192.168.232.135:/web nfs4 17G 7.8G 9.2G 46% /webroot@chaochao:/web#
7.使用通过nfs服务共享的文件
命令:docker service create --name nfs-service-1 --mount 'type=volume,source=nfs-volume,target=/usr/share/nginx/html,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:/web,"volume-opt=o=addr=192.168.232.135,rw,nfsvers=4,async"' --replicas 10 -p 8026:80 nginx:latest
source=nfs-volume --> docker宿主机上的卷的名字
/usr/share/nginx/html -->容器里存放网页的目录
volume-driver=local --> 访问本地的某个目录的
volume-opt=type=nfs --> volume对nfs的支持选项
volume-opt=device=:/web --> 是nfs服务器共享目录
volume-opt=o=addr=192.168.232.135,rw,nfsvers=4,async 挂载具体的nfs服务器的ip地址和选项
--replicas 10 副本的数量
nfsvers=4 --> nfs版本
async --> 异步
[root@docker-manager-1 web]# docker service create --name nfs-service-1 --mount 'type=volume,source=nfs-volume,target=/usr/share/nginx/html,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:/web,"volume-opt=o=addr=192.168.232.135,rw,nfsvers=4,async"' --replicas 10 -p 8026:80 nginx:latest3ws4b26bo2tgi48czckm6jin7overall progress: 10 out of 10 tasks1/10: running [==================================================>]2/10: running [==================================================>]3/10: running [==================================================>]4/10: running [==================================================>]5/10: running [==================================================>]6/10: running [==================================================>]7/10: running [==================================================>]8/10: running [==================================================>]9/10: running [==================================================>]10/10: running [==================================================>]verify: Service converged[root@docker-manager-1 web]#[root@docker-manager-1 ~]# cd /var/lib/docker/volumes/nfs-volume/_data[root@docker-manager-1 _data]# ls1.jpg index.html rep.html[root@docker-manager-1 _data]#[root@docker-2 ~]# cd /var/lib/docker/volumes/nfs-volume/_data[root@docker-2 _data]# ls1.jpg index.html rep.html[root@docker-2 _data]#
方法二:使用sshfs共享文件
1-4步与方法一一致。
5.客户机安装sshfs(以Ubuntu系统为例)
lizhichao@chaochao:~$ sudo apt install sshfs -y
6.挂载nfs-server共享的文件
root@chaochao:~# sshfs root@192.168.232.135:/download /downloadfuse: bad mount point `/download': No such file or directoryroot@chaochao:~# mkdir /downloadroot@chaochao:~# sshfs root@192.168.232.135:/download /downloadThe authenticity of host '192.168.232.135 (192.168.232.135)' can't be established.ECDSA key fingerprint is SHA256:H9UmgdDuOZykWs7ysydLjxzCS2tyNNrbylAGIa6pBgc.Are you sure you want to continue connecting (yes/no/[fingerprint])? yesroot@192.168.232.135's password:root@chaochao:~# cd /download/root@chaochao:/download# lschao.txtroot@chaochao:/download#
如果觉得《Linux进阶 | ❤Docker+NFS+Volume实现数据一致性❤》对你有帮助,请点赞、收藏,并留下你的观点哦!