Linux进阶 | ❤Docker+NFS+Volume实现数据一致性❤

   创作不易,来了的客官点点关注,收藏,订阅一键三连❤  


前言

运维之基础——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学习思维导图

Linux进阶 | ❤Docker+NFS+Volume实现数据一致性❤_第1张图片

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 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 ~]#

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 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]#

 

Linux进阶 | ❤Docker+NFS+Volume实现数据一致性❤_第2张图片

Linux进阶 | ❤Docker+NFS+Volume实现数据一致性❤_第3张图片

方法二:使用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#

你可能感兴趣的:(Linux,docker,nfs,volume,运维,运维开发)