创作不易,来了的客官点点关注,收藏,订阅一键三连❤
运维之基础——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共享文件
NFS,网络文件系统(network files system)是一种基于TCP传输协议的文件共享系统。它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录(在网络上共享自己机器里的文件,其他的机器可以使用)。(保持数据的一致性)
NFS是比较廉价的解决方案,一般的公司不会采用,性能一般,建议使用专业的存储服务器。
优点: 随便一台linux服务器都可以搭建,成本非常低,构建非常容易。
缺点: 读取速度有限,跟网络质量,磁盘IO,cpu,内存等因素有关,在传统的TCP/IP网络上传输的。
存储区域网络(Storage Area Network,简称SAN)采用网状通道(Fibre Channel ,简称FC,区别与Fiber Channel光纤通道)技术,通过FC交换机连接存储阵列和服务器主机,建立专用于数据存储的区域网络。
优点:读写性能好,有灾备
缺点: 费用昂贵,成本高,需要一笔费用
NFS服务的启动,我们就得需要远程过程调用RPC的服务。RPC 最主要的功能就是指定每个 NFS 功能所对应的端口号,并且回报给客户端,让客户端可以连结到正确的端口上去。
这是因为当服务器在启动 NFS服务时,会随机取用数个端口,并主动的向 RPC 注册,因此 RPC 可以知道每个端口对应的 NFS 功能。
NFS自己并没有去对外监听某个端口号,而是外包给了rpc服务,rpc帮助nfs去监听端口,然后告诉客户机和服务器进程对应的连续端口号。
[root@nfs-server ~]# netstat -anplut|grep nfs
[root@nfs-server ~]# netstat -anplut|grep rpc
tcp 0 0 0.0.0.0:58511 0.0.0.0:* LISTEN 2337/rpc.statd
tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 2347/rpc.mountd
tcp6 0 0 :::20048 :::* LISTEN 2347/rpc.mountd
tcp6 0 0 :::35677 :::* LISTEN 2337/rpc.statd
udp 0 0 0.0.0.0:20048 0.0.0.0:* 2347/rpc.mountd
udp 0 0 0.0.0.0:36531 0.0.0.0:* 2337/rpc.statd
udp 0 0 127.0.0.1:817 0.0.0.0:* 2337/rpc.statd
udp6 0 0 :::20048 :::* 2347/rpc.mountd
udp6 0 0 :::48874 :::* 2337/rpc.statd
[root@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 start
Redirecting to /bin/systemctl start nfs-server.service
[root@nfs-server ~]#
查看nfs服务的进程: ps aux|grep nfs
[root@nfs-server ~]# ps aux|grep nfs
root 2346 0.0 0.1 50108 2672 ? Ss 19:39 0:00 /usr/sbin/nfsdcld
root 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 -rv
exporting 192.168.232.0/24:/download
exporting 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]# ls
chao.txt
[root@nfs-server download]# exportfs -rv
exporting 192.168.232.0/24:/download
exporting 192.168.232.0/24:/web
[root@nfs-server download]#
4.关闭防火墙和selinux
[root@nfs-server download]# service firewalld stop
Redirecting to /bin/systemctl stop firewalld.service
[root@nfs-server download]# systemctl disable firewalld
[root@nfs-server download]# getenforce
Disabled
[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.135
Export 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]# ls
1.jpg index.html rep.html
[root@docker-2 web]#
[root@docker-2 web]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 876M 0 876M 0% /dev
tmpfs tmpfs 896M 0 896M 0% /dev/shm
tmpfs tmpfs 896M 18M 878M 2% /run
tmpfs 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% /boot
tmpfs tmpfs 180M 0 180M 0% /run/user/0
overlay overlay 17G 8.2G 8.9G 48% /var/lib/docker/overlay2/c2434295873b6ce0f136d4851cb9a9bf10b1ebf77e80f611841484967b857c94/merged
overlay overlay 17G 8.2G 8.9G 48% /var/lib/docker/overlay2/8b5420179cd05a4a8ea039ba9357f7d59ddfec2fd3f185702a5a0d97883564f2/merged
overlay overlay 17G 8.2G 8.9G 48% /var/lib/docker/overlay2/d9f99510abb4c5d5496e54d11ff763be47610ee7851207aec9fdbb1022f14016/merged
overlay overlay 17G 8.2G 8.9G 48% /var/lib/docker/overlay2/5a87e34567ece3a64a835bcd4cfe59d2ebdf0d36bf74fbd07dff8c82a94f37a2/merged
overlay overlay 17G 8.2G 8.9G 48% /var/lib/docker/overlay2/b70caa1ed0c781711a41cd82a0a91d465a6e02418633bfa00ce398c92405baff/merged
192.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]# ls
1.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/merged
overlay overlay 17G 8.3G 8.8G 49% /var/lib/docker/overlay2/a132f32c9cff25a1a143e325f2aecd0186630df66748c95984bb3cf2ce9fe8b2/merged
overlay overlay 17G 8.3G 8.8G 49% /var/lib/docker/overlay2/e1efba32267a46940402f682034d07ed51b8ee200186d5acc0c48144cd9fe31e/merged
192.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 -e
Export 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]# ls
1.jpg index.html rep.html
[root@docker-3 web]# df -TH
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 919M 0 919M 0% /dev
tmpfs tmpfs 939M 0 939M 0% /dev/shm
tmpfs tmpfs 939M 18M 921M 2% /run
tmpfs 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% /boot
tmpfs tmpfs 188M 0 188M 0% /run/user/0
overlay overlay 19G 8.8G 9.6G 48% /var/lib/docker/overlay2/8b5420179cd05a4a8ea039ba9357f7d59ddfec2fd3f185702a5a0d97883564f2/merged
overlay overlay 19G 8.8G 9.6G 48% /var/lib/docker/overlay2/c2434295873b6ce0f136d4851cb9a9bf10b1ebf77e80f611841484967b857c94/merged
overlay overlay 19G 8.8G 9.6G 48% /var/lib/docker/overlay2/6b933ab92577f653a29dcac782a2c5e79bcdbbf219a7ccebb38b585ef117e0b4/merged
overlay overlay 19G 8.8G 9.6G 48% /var/lib/docker/overlay2/40cc77a0f1c7281915947c1fefeb595837eb75fffec0d808a9994ac1fbde5f90/merged
192.168.232.135:/web nfs4 19G 8.4G 9.9G 46% /web
[root@docker-3 web]#
root@chaochao:~# mkdir /web
root@chaochao:~# mount 192.168.232.135:/web /web
root@chaochao:~# cd /web
root@chaochao:/web# ls
1.jpg index.html rep.html
root@chaochao:/web# df -Th
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 433M 0 433M 0% /dev
tmpfs 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/shm
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 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/2128
tmpfs tmpfs 96M 0 96M 0% /run/user/1000
overlay overlay 19G 6.9G 11G 39% /var/lib/docker/overlay2/a2d7dea3b856302cf61d9584be91aa69614a8b25db3a7b6c91317d71a6d68a3c/merged
overlay overlay 19G 6.9G 11G 39% /var/lib/docker/overlay2/c6188638a4df298b840dce222da041733de01e636362c34c4c0e34cec9a34e08/merged
overlay overlay 19G 6.9G 11G 39% /var/lib/docker/overlay2/e94850d48ea1962457edacef2d09cfaa838fad8b9899d4455c9b31caa11c07e1/merged
192.168.232.135:/web nfs4 17G 7.8G 9.2G 46% /web
root@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:latest
3ws4b26bo2tgi48czckm6jin7
overall progress: 10 out of 10 tasks
1/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]# ls
1.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]# ls
1.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 [email protected]:/download /download
fuse: bad mount point `/download': No such file or directory
root@chaochao:~# mkdir /download
root@chaochao:~# sshfs [email protected]:/download /download
The 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])? yes
[email protected]'s password:
root@chaochao:~# cd /download/
root@chaochao:/download# ls
chao.txt
root@chaochao:/download#