10.NFS

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了10.NFS相关的知识,希望对你有一定的参考价值。

1.1NFS共享存储服务介绍
1.共享存储服务是什么
NFS是Network File System的缩写,中文意思是网络文件系统,
它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录。

2.NFS共享存储服务的应用
将数据存储到一台服务器上,实现数据统一一致,共享访问
NFS存储服务器中主要存储哪些信息:用户上传的图片 音频 视频 附件等信息
NFS服务是分为服务端和客户端
存储服务器:NFS服务端   网站web服务器:NFS客户端

3.实现共享存储好处
01. 实现数据统一一致
02. 节省网站磁盘资源
03. 节省网站访问带宽

4.NFS共享存储服务的原理
①. nfs服务端创建共享存储目录
②. nfs客户端创建远程挂载点目录
③. nfs客户端进行远程挂载
④. 实现客户端数据信息统一一致

5.共享文件系统的工作原理(服务端3步 客户端3步)
服务端做了三件事:
1. 启动rpcbind服务,创建中介
2. 启动nfs服务,创建房源信息
3. 将房源信息向中介进行注册,在nfs服务稳定运行过程中,房源信息只注册一次

客户端做了三件事:
1. 启动rpcbind服务(可选)
2. 确保客户端和服务端网络连接建立成功
3. 执行mount命令进行网络存储挂载

技术图片
技术图片
技术图片

1.2NFS服务端部署流程

第一个里程:检查服务软件是否安装
rpm -qa|egrep “nfs-utils|rpcbind”

第二个里程:进行软件服务安装
补充说明:nfs-utils 和 rpcbind两个软件大礼包
rpm -ql nfs-utils
/etc/rc.d/init.d/nfs     <-- nfs服务启动脚本文件
/usr/sbin/showmount      <-- 检查nfs服务共享目录信息

rpm -ql rpcbind
/etc/rc.d/init.d/rpcbind   <-- rpcbind服务启动脚本文件
/usr/sbin/rpcbind          <-- 检查nfs服务向rpc服务注册信息

第三个里程:编写nfs服务配置文件
[root@nfs01 ~]# ll /etc/exports 
-rw-r--r-- 1 root root 30 2018-02-25 13:30 /etc/exports   <-- nfs服务配置文件,默认已经存在
[root@nfs01 ~]# vim /etc/exports 
/data  172.16.1.0/24(rw,sync)
说明:配置文件信息 指定共享目录   指定共享目录访问控制网段或主机信息(共享目录参数信息)

第四个里程:创建nfs服务共享目录,并且进行授权
mkdir /data
chown -R nfsnobody.nfsnobody /data

第五个里程:启动nfs和rpc服务
注意启动顺序:要先启动rpcbind,然后启动nfs,因为nfs启动后要向rpc进行注册
/etc/init.d/rpcbind start       <- 首先启动rpcbind服务
[root@nfs01 ~]# rpcinfo -p 172.16.1.31
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
/etc/init.d/nfs start           <- 其次启动nfs服务
[root@nfs01 ~]# rpcinfo -p 172.16.1.31
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100011    1   udp    875  rquotad
    100011    2   udp    875  rquotad
    100011    1   tcp    875  rquotad
    100011    2   tcp    875  rquotad
    100005    1   udp  35752  mountd
    100005    1   tcp  53560  mountd
    100005    2   udp  32259  mountd
    100005    2   tcp  18385  mountd
    100005    3   udp  29427  mountd
    100005    3   tcp  56932  mountd
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    2   tcp   2049  nfs_acl
    100227    3   tcp   2049  nfs_acl
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    2   udp   2049  nfs_acl
    100227    3   udp   2049  nfs_acl
    100021    1   udp  52618  nlockmgr
    100021    3   udp  52618  nlockmgr
    100021    4   udp  52618  nlockmgr
    100021    1   tcp  29696  nlockmgr
    100021    3   tcp  29696  nlockmgr
    100021    4   tcp  29696  nlockmgr

第六个里程:进行服务配置检查
先检查房源信息是否注册
rpcinfo -p 172.16.1.31
检查是否存在可用的共享目录
[root@nfs01 ~]# showmount -e 10.0.0.31
Export list for 10.0.0.31:
/data 172.16.1.0/24

1.3NFS客户端部署流程

第一个里程:检查服务软件是否安装
rpm -qa|egrep “nfs-utils|rpcbind”

第二个里程:进行软件服务安装
yum install -y nfs-utils rpcbind

第三个里程:进行共享目录挂载
[root@web02 ~]# mount -t nfs 172.16.1.31:/data /mnt
[root@web02 ~]# df -h
Filesystem         Size  Used Avail Use% Mounted on
172.16.1.31:/data  8.6G  1.9G  6.4G  23% /mnt

第四个里程:进行共享存储测试
[root@web01 mnt]# touch test.txt
[root@web01 mnt]# ls
test.txt

[root@nfs01 ~]# cd /data/
[root@nfs01 data]# ls
test.txt

[root@web02 ~]# ls /mnt
test.txt
说明:在web01的mnt目录中创建的数据,在nfs和web02服务器上都可以看到,即已经实现数据共享存储

1.4NFS服务部署进程信息详述

[root@oldboy ~]# ps -ef|egrep "rpc|nfs"
rpc        1564      1  0 09:32 ?        00:00:00 rpcbind
rpc        1065      1  0 09:32 ?        00:00:00 rpc statd     <- 检查数据存储一致性
root       4736      2  0 21:31 ?        00:00:00 [rpciod/0]
root       5363      1  0 21:47 ?        00:00:00 rpc.rquotad   <- 磁盘配额进程(remote quote server)
root       5368      1  0 21:47 ?        00:00:00 rpc.mountd    <- 权限管理验证等(NFS mount daemon)
root       5375      2  0 21:47 ?        00:00:00 [nfsd4]
root       5376      2  0 21:47 ?        00:00:00 [nfsd4_callbacks]
root       5377      2  0 21:47 ?        00:00:00 [nfsd]        <- NFS主进程
root       5378      2  0 21:47 ?        00:00:00 [nfsd]        <- NFS主进程
root       5379      2  0 21:47 ?        00:00:00 [nfsd]        <- NFS主进程,管理登入,ID身份判别等。
root       5380      2  0 21:47 ?        00:00:00 [nfsd]
root       5381      2  0 21:47 ?        00:00:00 [nfsd]
root       5382      2  0 21:47 ?        00:00:00 [nfsd]
root       5383      2  0 21:47 ?        00:00:00 [nfsd]
root       5384      2  0 21:47 ?        00:00:00 [nfsd]        <- NFS主进程
root       5415      1  0 21:47 ?        00:00:00 rpc.idmapd    <- name mapping daemon
                                                                用户压缩/用户映射(记录)
root       5512   4670  0 22:02 pts/0    00:00:00 egrep rpc|nfs

技术图片
技术图片

1.5NFS共享文件系统配置文件格式

技术图片
技术图片

1.NFS共享目录
为NFS服务器端要共享的实际目录,要用绝对路径,如(/data)。
注意共享目录的本地权限,如果需要读写共享,一定要让本地目录可以被NFS客户端的用户(nfsnobody)读写。
[root@nfs01 ~]# ll -d /data
drwxr-xr-x. 2 nfsnobody nfsnobody 4096 Mar  8 10:15 /data

2.NFS客户端地址
为NFS服务器端授权的可访问共享目录的NFS客户端地址,可以为单独的IP地址或主机名、域名等,也可以为整个网段地址。
还可以用“*”来匹配所有客户端服务器,这里所谓的客户端一般来说是前端的业务的业务服务器,例如:web服务。具体说明见表10-3

3.权限参数集
对授权的NFS客户端的访问权限设置。参数具体说明见后文。
nfs权限(共享目录【借给你手机】) nfs配置的/etc/exports /data 172.16.1.0/24(rw)
本地文件系统权限(【手机密码不告诉你】) 挂载目录的权限rwxr-xr-x nfsnobody nfsnobody /data
[root@nfs01 ~]# ll -d /data
drwxr-xr-x. 2 nfsnobody nfsnobody 4096 Mar  8 10:15 /data

1.6配置文件参数介绍

技术图片
技术图片

注解:
这里squash的含义是nfs客户端通过用户映射后,在服务端转变为的匿名用户,默认转变为nfsnobody用户
anouid anogid实际是指定客户端用户所转变为的用户,设置了此选项后,服务端的挂载目录的所有者和所属组都要是这个uid的用户

1.7用户映射原理

技术图片

[root@nfs01 data]# ll
total 0
-rwxr-xr-x 1 nfsnobody nfsnobody 0 Mar  8 14:04 eeee
-rwxr-xr-x 1 nfsnobody nfsnobody 0 Mar  8 14:05 eeee2
-rwxr-xr-x 1 oldboy    oldboy    0 Mar  8 15:29 oldboy--普通用户在客户端新建文件,默认是no_squash,服务端和客户端有相同的uid,gid的用户的情况。此时,服务端的/data权限要是777
-rwxr-xr-x 1      1023      1023 0 Mar  8 15:30 oldgirl--普通用户在客户端创建文件,默认是no_squash,服务端和客户端没有相同的uid,gid的用户。此时,服务端的/data权限777,否则Permission denied
-rw-r--r-- 1 root      root      0 Mar  8 21:52 root_no_root_squash---配置了no_root_squash,则在客户端使用root的时候,在服务端新建的文件所属用户和组为root root,/data目录权限为755即可。
-rw-r--r-- 1 nfsnobody nfsnobody 0 Mar  8 21:53 root_squash
-rwxr-xr-x 1 nfsnobody nfsnobody 0 Mar  8 14:18 test34
-rwxr-xr-x 1 nfsnobody nfsnobody 0 Mar  8 14:19 test35
-rwxr-xr-x 1 nfsnobody nfsnobody 0 Mar  8 10:15 test.txtx
[root@nfs01 data]# ls -ld /data
drwxr-xr-x. 2 nfsnobody nfsnobody 4096 Mar  8 21:53 /data

技术图片

1.8配置文件案例

配置例一    /data 10.0.0.0/24(rw,sync)
说明:允许客户端读写,并且数据同步写入到服务器端的磁盘里
注意:24和“(”之间不能有空格

配置例二    /data 10.0.0.0/24(rw,sync,all_squash,anonuid=2000,anongid=2000)
说明:允许客户端读写,并且数据同步写到服务器端的磁盘里,并且指定客户端的用户UID和GID。
      早期生产环境的一种配置,适合多客户端共享一个NFS服务单目录,
      如果所有服务器的nfsnobody账户UID都是65534,则本例没什么必要了。
      [root@web01 ~]# id nfsnobody
       uid=65534(nfsnobody) gid=65534(nfsnobody) groups=65534(nfsnobody)
          早期centos5.5的系统默认情况下nfsnobody的UID不一定是65534,此时如果这些服务器共享一个NFS目录, 就会出现访问权限问题。

配置例三    /home/oldboy 10.0.0.0/24(ro) <-- 是为开发人员想查看线数据准备配置方式
说明:只读共享
用途:例如在生产环境中,开发人员有查看生产服务器日志的需求,但又不希望给开发生产服务器的权限,
      那么就可以给开发提供从某个测试服务器NFS客户端上查看某个生产服务器的日志目录(NFS共享)的权限,
      当然这不是唯一的方法,
      例如可以把程序记录的日志发送到测试服务器供开发查看或者通过收集日志等其它方式展现

以上是关于10.NFS的主要内容,如果未能解决你的问题,请参考以下文章

10.NFS V4.2

[RH134] 10-NFS和Samba客户端

day10 nfs服务,nginx负载均衡,定时任务

Debian 10 NFS

NFS协议MOUNT过程