NFS服务器的介绍与配置,史上大总结,含泪肝数夜

在这里插入图片描述


前言

提示:这里可以添加本文要记录的大概内容:


提示:以下是本篇文章正文内容,下面案例可供参考

一、nfs介绍:

1.什么是nfs?

网络文件系统,英文Network File System(NFS),是由SUN公司研制的UNIX表示层协议(presentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。

在网络上共享自己机器里的文件,其他的机器可以使用

2.为什么需要nfs服务器?

保障网站数据的一致性–》不管负载均衡器将请求分配到那台后端的服务器,客户机看到的内容是一样。

3.nfs服务器是否是最佳的解决方法?

答案: 不是的
nfs是比较廉价的解决方法,一般的公司不会采用,性能不是特别棒,建议使用专用的存储服务器。

    廉价的解决方法:nfs
    有钱的解决方法: san   

4.存储服务器的优缺点

优点:读写性能好,有灾备
san:区域存储网络
存储区域网络(Storage Area Network,简称SAN)采用网状通道(Fibre Channel ,简称FC,区别与Fiber Channel光纤通道)技术,通过FC交换机连接存储阵列和服务器主机,建立专用于数据存储的区域网络。

缺点:价格昂贵

5.nfs解决了什么问题?有什么优缺点?

数据同源: 到同一个地方去拿数据,保障数据的一致性

nfs的优点和缺点
优点: 随便一台linux服务器都可以搭建,成本非常低,构建非常容易
缺点: 读取速度有限,跟网络质量,磁盘IO,cpu,内存等因素有关,在传统的tcp/ip网络上传输的

二、具体实验操作:

1.环境准备:

准备一台服务器:
配置没有关系,可以简单点: 1核/1G
配置好ip地址:192.168.0.193

2.安装nfs的相关软件

[root@nfs-server ~]# yum install nfs-utils -y

3.启动nfs-server服务

[root@nfs-server ~]# service nfs-server stop
Redirecting to /bin/systemctl stop nfs-server.service
[root@nfs-server ~]# service nfs-server start
Redirecting to /bin/systemctl start nfs-server.service
[root@nfs-server ~]# service nfs-server restart
Redirecting to /bin/systemctl restart nfs-server.service

查看nfs进程:

[root@nfs-server ~]# ps aux|grep nfs
root         431  0.0  0.0      0     0 ?        I    8月01   0:01 [kworker/u128:4-nfsd4]
root         833  0.0  0.3  50304  2932 ?        Ss   8月01   0:00 /usr/sbin/nfsdcld
root        5311  0.0  0.0      0     0 ?        S    11:02   0:00 [nfsd]
root        5312  0.0  0.0      0     0 ?        S    11:02   0:00 [nfsd]
root        5313  0.0  0.0      0     0 ?        S    11:02   0:00 [nfsd]
root        5314  0.0  0.0      0     0 ?        S    11:02   0:00 [nfsd]
root        5315  0.0  0.0      0     0 ?        S    11:02   0:00 [nfsd]
root        5316  0.0  0.0      0     0 ?        S    11:02   0:00 [nfsd]
root        5317  0.0  0.0      0     0 ?        S    11:02   0:00 [nfsd]
root        5318  0.0  0.0      0     0 ?        S    11:02   0:00 [nfsd]
root        5326  0.0  0.1  12320   992 pts/0    S+   11:03   0:00 grep --color=auto nfs
[root@nfs-server ~]#

**

4.原理部分:

**
nfs服务和rpc到底是如何实现的呢?工作原理
端口号:
ssh–>22
nginx -->80
mysql -->3306

我们就得需要远程过程调用 (RPC) 的服务啦!RPC 最主要的功能就是在指定每个 NFS 功能所对应的 port number ,并且回报给客户端,让客户端可以连结到正确的端口上去。 那 RPC 又是如何知道每个 NFS 的端口呢?这是因为当服务器在启动 NFS 时会随机取用数个端口,并主动的向 RPC 注册,因此 RPC 可以知道每个端口对应的 NFS 功能。

nfs自己并没有去对外监听某个端口号,而是外包给了rpc服务,rpc帮助nfs去监听端口,然后告诉客户机和本机的那个进程对应的端口连续.
代码如下(示例):

[root@nfs-server ~]# netstat -anplut|grep nfs
[root@nfs-server ~]# netstat -anplut|grep rpc  查看rpc服务相关的端口
tcp        0      0 0.0.0.0:35503           0.0.0.0:*               LISTEN      960/rpc.statd       
tcp        0      0 0.0.0.0:20048           0.0.0.0:*               LISTEN      5304/rpc.mountd     
tcp6       0      0 :::20048                :::*                    LISTEN      5304/rpc.mountd     
tcp6       0      0 :::42099                :::*                    LISTEN      960/rpc.statd       
udp        0      0 0.0.0.0:20048           0.0.0.0:*                           5304/rpc.mountd     
udp        0      0 127.0.0.1:717           0.0.0.0:*                           960/rpc.statd       
udp        0      0 0.0.0.0:42974           0.0.0.0:*                           960/rpc.statd       
udp6       0      0 :::20048                :::*                                5304/rpc.mountd     
udp6       0      0 :::43399                :::*                                960/rpc.statd       
[root@nfs-server ~]# 

5.共享文件

编辑/etc/exports文件,写好具体的共享的目录和权限
/etc/exports
[root@nfs-server ~]# vim /etc/exports

/web 192.168.0.0/24(rw,all_squash,sync)
/web 是我们共享的文件夹的路径–》使用绝对路径 --》需要自己新建
192.168.0.0/24 允许过来访问的客户机的ip地址网段
(rw,all_squash,sync) 表示权限的限制

rw 表示可读可写 read and write
ro 表示只能读 read-only
all_squash :任何客户机上的用户过来访问的时候,都把它认为是普通的用户
root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器匿名用户
no_root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员
sync 同时将数据写入到内存与硬盘中,保证不丢失数据
async 优先将数据保存到内存,然后再写入硬盘,效率更高,但可能丢失数据

[root@nfs-server ~]# mkdir /web
[root@nfs-server ~]# cd /web
[root@nfs-server web]#vim   index.html  创建首页文件
index.html 

[root@nfs-server web]# cat index.html 
welcome to sanchuang!
[root@nfs-server web]# 

6.刷新输出文件的列表

[root@nfs-server web]# exportfs -rv
exporting 192.168.0.0/24:/web
[root@nfs-server web]# 

[root@nfs-server web]# cat /etc/exports
/web  192.168.0.0/24(rw,all_squash,sync)
[root@nfs-server web]# 
[root@nfs-server web]# mkdir /download   新建/download
[root@nfs-server web]# exportfs -rv
exporting 192.168.0.190:/download
exporting 192.168.0.192:/download
exporting 192.168.0.180:/download
exporting 192.168.0.0/24:/download
exporting 192.168.0.0/24:/web
[root@nfs-server web]# 
复制一点点数据到/download目录下
[root@nfs-server download]# cp /etc/hosts  .
[root@nfs-server download]# tar czf boot.tar.gz  /boot 
tar: 从成员名中删除开头的“/”

[root@nfs-server download]# 
[root@nfs-server download]# ls
boot.tar.gz  hosts
[root@nfs-server download]#

7.建议关闭防火墙和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]# 

8.在客户机上挂载nfs服务器上共享的/web和/download目录

[root@web-server2 ~]# yum install nfs-utils -y  安装nfs-utils软件,方便客户机上进行挂载,具有了相关命令了,例如:showmount
[root@web-server2 ~]# showmount -e 192.168.0.21 查看nfs服务器上共享输出了哪些文件夹
[root@manager17 _data]# showmount -e 192.168.0.21
Export list for 192.168.0.21:
/download 192.168.0.17/24
/web      192.168.0.0/24
[root@manager17 _data]#

9.挂载nfs服务器上的目录到本机上

[root@web-server2 ~]# mkdir   /web  在客户机的本地新建一个目录/web
[root@web-server2 ~]# mount 192.168.0.139:/web   /web  将nfs服务器上的/web目录挂载到本地的/web目录,今后访问本地的/web目录,就是访问到nfs服务器上的/web目录
mount 是挂载的命令,可以理解为一种映射

10.显示效果:

[root@manager17 web]# pwd
/web
[root@manager17 web]# mount 192.168.0.21:/web  /web
[root@manager17 web]# df -Th
文件系统            类型      容量  已用  可用 已用% 挂载点
devtmpfs            devtmpfs  1.8G     0  1.8G    0% /dev
tmpfs               tmpfs     1.9G     0  1.9G    0% /dev/shm
tmpfs               tmpfs     1.9G   34M  1.8G    2% /run
tmpfs               tmpfs     1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/mapper/cl-root xfs        64G  9.1G   55G   15% /
/dev/sda1           xfs      1014M  194M  821M   20% /boot
/dev/mapper/cl-home xfs        32G  255M   31G    1% /home
tmpfs               tmpfs     371M     0  371M    0% /run/user/0
overlay             overlay    64G  9.1G   55G   15% /var/lib/docker/overlay2/6c8bbfd010acdcf3176137e20aa6bbfde70c294fca36eb4f0a00a0375a37ba10/merged
overlay             overlay    64G  9.1G   55G   15% /var/lib/docker/overlay2/f92f29ded8924003e4440c092b5161fcd943cda9f989946efedc323d774a9a3a/merged
192.168.0.21:/web   nfs4       17G  3.9G   14G   23% /web
[root@manager17 web]# mkdir /download
[root@manager17 web]# mount 192.168.0.21:/download  /download/
[root@manager17 web]# df -Th
文件系统               类型      容量  已用  可用 已用% 挂载点
devtmpfs               devtmpfs  1.8G     0  1.8G    0% /dev
tmpfs                  tmpfs     1.9G     0  1.9G    0% /dev/shm
tmpfs                  tmpfs     1.9G   34M  1.8G    2% /run
tmpfs                  tmpfs     1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/mapper/cl-root    xfs        64G  9.1G   55G   15% /
/dev/sda1              xfs      1014M  194M  821M   20% /boot
/dev/mapper/cl-home    xfs        32G  255M   31G    1% /home
tmpfs                  tmpfs     371M     0  371M    0% /run/user/0
overlay                overlay    64G  9.1G   55G   15% /var/lib/docker/overlay2/6c8bbfd010acdcf3176137e20aa6bbfde70c294fca36eb4f0a00a0375a37ba10/merged
overlay                overlay    64G  9.1G   55G   15% /var/lib/docker/overlay2/f92f29ded8924003e4440c092b5161fcd943cda9f989946efedc323d774a9a3a/merged
192.168.0.21:/web      nfs4       17G  3.9G   14G   23% /web
192.168.0.21:/download nfs4       17G  3.9G   14G   23% /download

[root@manager17 ~]# cd /web/
[root@manager17 web]# ls
feng.jpg  index.html  sc.html  su.tar.gz  xiong.jpg
[root@manager17 web]#

[root@manager17 web]# cd /web/
[root@manager17 web]# mkdir feng
mkdir: 无法创建目录 “feng”: 只读文件系统
[root@manager17 web]# cd /download/
[root@manager17 download]# mkdir feng
[root@manager17 download]# ls
feng
[root@manager17 download]#

三.拓展

1.客户机上能否有写的权限要看2种权限:

(1) 共享权限 --》/etc/exports文件里的权限,例如ro,rw
(2) 文件系统里的权限 --》/web 在linux里的权限

  [root@nfs-server web]# ll -d /web
drwxrwxrwx. 3 root root 56 8月   2 11:55 /web
[root@nfs-server web]# ll -d /download
drwxr-xr-x 2 root root 38 8月   2 11:44 /download        ---》nfs客户机挂载后,没有写的权限,因为其他人没有w权限
[root@nfs-server web]# 

[root@nfs-server web]# ll -d /web
drwxr-xr-x. 2 root root 24 8月  23 16:21 /web
[root@nfs-server web]# ll -d /download/
drwxr-xr-x. 2 root root 6 8月  23 16:25 /download/
[root@nfs-server web]# chmod o+w /download/
[root@nfs-server web]#

2.授权和验证

在nfs服务器上授权
[root@nfs-server web]# chmod a+w /download/
[root@nfs-server web]# ll -d /download
drwxrwxrwx 2 root root 38 8月   2 11:44 /download
[root@nfs-server web]# 

在客户机上验证
[root@web-server2 web]# cd /download/
[root@web-server2 download]# mkdir fengdeyong
[root@web-server2 download]# ls
boot.tar.gz  fengdeyong  hosts
[root@web-server2 download]# 

3.挂载问题

剩下的其他的nginx服务器都要挂载
考虑开机自动挂载的问题
====
挂载: 其实就是相当于我们把u盘或者移动硬盘插到我们的电脑上,我们的系统给分配一个盘符,例如:H,G ,这个过程就叫挂载 mount
挂车:
挂载 --》挂上加载
umount --》卸载  --》相当于弹出u盘
====

volume driver 卷的驱动程序(库):
  1.ssh
  2.nfs

[root@web-server1 ~]# showmount -e 192.168.0.139
Export list for 192.168.0.139:
/web      192.168.0.0/24
/download 192.168.0.0/24

四.volume机制

1.什么是volme?

nfs–》volume–》container
sshfs–》volume–》container
Docker 提供了 Volume 机制以便将数据持久化存储。
Kubernetes 提供了更强大的 Volume 机制和丰富的插件,解决了容器数据持久化和容器间共享数据的问题。

nfs共享/web目录—》docker宿主机挂载–》manager上启动service–》启动容器–》使用volume挂载到容器里

[root@manager161 ~]#     docker service create -d     --name nfs-service-2     --mount 'type=volume,source=nfsvolume,target=/usr/share/nginx/html,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:/web,"volume-opt=o=addr=192.168.80.13,rw,nfsvers=4,async"'     --replicas 6      -p 80:80     nginx:latest


[root@manager161 ~]#     docker service create -d     --name sc-nfs-web     --mount 'type=volume,source=nfsvolume,target=/usr/share/nginx/html,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:/web,"volume-opt=o=addr=192.168.0.21,rw,nfsvers=4,async"'     --replicas 10     -p 8089:80     nginx:latest

2.指令操作

source=nfsvolume --》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.0.21,rw,nfsvers=4,async 挂载具体的nfs服务器的ip地址和选项
–replicas 10 副本的数量

-p 8089:80 端口映射
nginx:latest 具体的镜像版本

需要等待10分钟

[root@manager17 download]# docker service create      --name sc-nfs-web     --mount 'type=volume,source=nfsvolume2,target=/usr/share/nginx/html,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:/web,"volume-opt=o=addr=192.168.0.21,rw,nfsvers=4,async"'     --replicas 10     -p 8089:80     nginx:latest
rkjry4donhb1b9xqry1f3o1g7
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@manager17 download]#


[root@manager17 download]# docker volume inspect nfsvolume2
[
    {
        "CreatedAt": "2021-08-23T16:32:32+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/nfsvolume2/_data",
        "Name": "nfsvolume2",
        "Options": {
            "device": ":/web",
            "o": "addr=192.168.0.21,rw,nfsvers=4,async",
            "type": "nfs"
        },
        "Scope": "local"
    }
]
[root@manager17 download]#


[root@manager17 download]# cd /var/lib/docker/volumes/nfsvolume2/_data/
[root@manager17 _data]# ls
feng.jpg  index.html  sc.html  su.tar.gz  xiong.jpg
[root@manager17 _data]#

五.课后练习

启动一个service使用nfs服务器共享的目录,使用nginx镜像,让所有的容器都使用相同的网页数据
1.sshfs
2.nfs

该处使用的url网络请求的数据。


总结

1.在docker 的学习中,nfs是其中重点的章节,对于原理的部分以及服务器的搭建和配置很重要,需要好好地消化一下.

2.对于volume机制,我们可以对比docker 和 Kubernetes 中的区别来学习,这样更容易理解

3.如果你看到这里了,麻烦👍 + 关注哈,感谢支持,码字不易,谢谢理解.

在这里插入图片描述

  • 13
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未末0902

你的鼓励与支持是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值