NFS服务器工作原理
一、NFS简介
NFS是Network File System的缩写,中文称为网络文件系统,它的主要功能是通过网络(一个局域网)让不同的主机系统之间可以共享文件或目录,NFS的客户端(一般为应用服务器,例如web)可以通过挂载(mount)的方式将NFS服务器共享的数据目录挂载到NFS客户端本地系统中(就是某一个关在点下),从客户端本地看,NFS服务器端共享目录就好像是客户端自己的磁盘分区或者目录一样,而实际上却是远端的NFS服务器的目录。
NFS企业在企业中的应用场景,在企业集群架构的工作场景中,NFS网络文件系统一般被用来存储共享视频、图片、附件等静态资源文件,通常网站用户上传的文件都会放到NFS共享中,例如BBS产品的图片、附件、头像(网站BBS的程序不要放在NFS共享中),然后前端所有节点在访问这些静态资源时都会读取NFS存储上的资源。
NFS是当前互联网系统架构中最常用的数据存储服务之一,特别是中小型网站应用频率更高。
二、NFS服务器工作原理
因为NFS支持的功能相当多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此NFS的功能对应的端口并不固定,客户端要知道NFS服务器端的相关端口才能建立连接进行数据传输,而RPC就是用来统一管理NFS端口的服务,并且统一对外的端口是111,RPC会记录NFS端口的信息,如此我们就能够通过RPC实现服务端和客户端沟通端口信息。PRC最主要的功能就是指定每个NFS功能所对应的port number,并且通知客户端,记客户端可以连接到正常端口上去。
在启动NFS SERVER之前,首先要启动RPC服务(即portmap或rpcbind服务,下同)否则NFS SERVER就无法向RPC服务区注册,另外,如果RPC服务重新启动,原来已经注册好的NFS端口数据就会全部丢失。因此此时RPC服务管理的NFS程序也要重新启动以重新向RPC注册。一般修改NFS配置文档后,是不需要重启NFS的,直接在命令执行/etc/init.d/nfs reload或exportfs –rv即可使修改的/etc/exports生效。
三、实操部分
1.检查操作系统的环境
[linguang@backup ~]$ cat /etc/redhat-release
CentOS release 6.10 (Final)
[linguang@backup ~]$ uname -r
2.6.32-754.el6.x86_64 显示操作系统发行版本
[linguang@backup ~]$ uname -m
x86_64 显示机器(硬件)类型
2、NFS服务端需要安装的软件包
nfs-utils:nfs服务的主程序,包括rpc.nfsd、rpc.mountd两个daemons和相关的文档说明及执行命令文件等
rpcbind:centos6下面的rpc主程序(centos5下的是portmap)
安装相应的软件包及检查
安装:
[root@nfs01 ~]# yum install nfs-utils rpcbind -y
检查:
[root@nfs01 ~]# rpm -qa nfs-utils rpcbind
rpcbind-0.2.0-13.el6_9.1.x86_64
nfs-utils-1.2.3-75.el6_9.x86_64
注意:在安装完该软件包后会自动创建nfsnobody用户
[root@nfs01 ~]# id nfsnobody
uid=65534(nfsnobody) gid=65534(nfsnobody) groups=65534(nfsnobody)
3、 启动NFS相关的服务
启动rpcbind服务并进行检查
启动rpcbind:
[root@nfs01 ~]# /etc/init.d/rpcbind start
Starting rpcbind: [ OK ]
检查:
[root@nfs01 ~]# /etc/init.d/rpcbind status
rpcbind (pid 2309) is running...
查看rpc的端口:
[root@nfs01 ~]# netstat -lntup |grep rpc
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 2193/rpcbind
tcp 0 0 :::111 :::* LISTEN 2193/rpcbind
udp 0 0 0.0.0.0:111 0.0.0.0:* 2193/rpcbind
udp 0 0 0.0.0.0:672 0.0.0.0:* 2193/rpcbind
udp 0 0 :::111 :::* 2193/rpcbind
udp 0 0 :::672 :::* 2193/rpcbind
查看端口映射情况:
[root@nfs01 ~]# rpcinfo -p localhost
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
注意:在未启动nfs服务时,不能看到nfs端口的映射情况
启动nfs服务并进行检查
启动nfs:
[root@nfs01 ~]# /etc/init.d/nfs start
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
Starting RPC idmapd: [ OK ]
检查:
[root@nfs01 ~]# /etc/init.d/nfs status
rpc.svcgssd 已停
rpc.mountd (pid 2329) is running...
nfsd (pid 2345 2344 2343 2342 2341 2340 2339 2338) is running...
rpc.rquotad (pid 2324) is running...
查看端口映射情况:
[root@nfs01 ~]# rpcinfo -p localhost
注意:此时有了端口映射
【特别注意】必须先启动rpcbind服务之后,才能启动nfs服务
原因:nfs可以视为一个rpc程序,在启动任何一个rpc程序之前,需要做好端口和功能的映射工作,这个映射工作就是由rpcbind服务来完成的,因此在提供nfs服务之前,必须要先启动rpcbind服务
检查nfs和rpc进程
[root@nfs01 ~]# ps -ef |egrep "rpc|nfs"
rpc 2193 1 0 22:52 ? 00:00:00 rpcbind
root 2315 2 0 23:04 ? 00:00:00 [rpciod/0]
root 2324 1 0 23:04 ? 00:00:00 rpc.rquotad
root 2329 1 0 23:04 ? 00:00:00 rpc.mountd
root 2336 2 0 23:04 ? 00:00:00 [nfsd4]
root 2337 2 0 23:04 ? 00:00:00 [nfsd4_callbacks]
root 2338 2 0 23:04 ? 00:00:00 [nfsd]
root 2339 2 0 23:04 ? 00:00:00 [nfsd]
root 2340 2 0 23:04 ? 00:00:00 [nfsd]
root 2341 2 0 23:04 ? 00:00:00 [nfsd]
root 2342 2 0 23:04 ? 00:00:00 [nfsd]
root 2343 2 0 23:04 ? 00:00:00 [nfsd]
root 2344 2 0 23:04 ? 00:00:00 [nfsd]
root 2345 2 0 23:04 ? 00:00:00 [nfsd]
root 2376 1 0 23:04 ? 00:00:00 rpc.idmapd
root 2459 2197 0 23:08 pts/0 00:00:00 egrep rpc|nfs
4、将相关的服务添加到开机自启动中
【方法1】
将nfs服务加入并检查:
[root@nfs01 ~]# chkconfig nfs on
[root@nfs01 ~]# chkconfig --list nfs
nfs 0:off 1:off 2:on 3:on 4:on 5:on 6:off
将rpcbind服务加入并检查:
[root@nfs01 ~]# chkconfig rpcbind on
[root@nfs01 ~]# chkconfig --list rpcbind
rpcbind 0:off 1:off 2:on 3:on 4:on 5:on 6:off
【方法2】推荐
加入:
[root@nfs01 ~]# echo "/etc/init.d/rpcbind start" >>/etc/rc.local
[root@nfs01 ~]# echo "/etc/init.d/nfs start" >>/etc/rc.local
查看:
[root@nfs01 ~]# tail -2 /etc/rc.local
/etc/init.d/rpcbind start
/etc/init.d/nfs start
【注意】
在实际的生产环境中用方法2而不用方法1,因为可以方便运维人员的管理
5、配置nfs服务的配置文件/etc/exports
默认情况下该配置文件是空的:
[root@nfs01 ~]# ll -h /etc/exports
-rw-r--r--. 1 root root 0 Jan 12 2010 /etc/exports
编辑该配置文件:
[root@nfs01 ~]# vim /etc/exports
查看:
[root@nfs01 ~]# cat /etc/exports
#share /data by oldboy for bingbing at 2018-3-12
/data 172.16.1.0/24(rw,sync)
【注意】
该配置文件默认是存在,只不过是空文件而已,在172.16.1.0/24(rw,sync)中24和(之间不能有空格
查看NFS服务器配置的参数(包含默认的参数)的文件/var/lib/nfs/etab
nfs配置文件的格式
NFS共享的目录 NFS客户端地址(参1,参2,……) NFS客户端地址2(参1,参2,……)或者
NFS共享的目录 NFS客户端地址(参1,参2,……)
上述各列参数的含义:
NFS共享的目录:为NFS服务端要共享的实际目录,要用绝对路径如(/data)。注意共享目录的本地权限,如果需要读写共享,一定要让本地目录可以被NFS客户端的用户(nfsnobody)读写。/etc/exports配置文件格式书写详细如下表
常用格式说明 实例
配置案例1 /data 172.16.1.0/24(rw,sync) 允许客户端读写,并且数据同步写到服务器的磁盘里
配置案例2 /data 172.16.1.0/24(rw,sync,all_squash,anonuid=888,anongid=888) 允许客户端读写,并且数据同步写到服务器的磁盘里,并且指定客户端的uid和gid,早期生产环境中的一种配置,适合多客户端共享一个NFS单目录,如果所有服务器的nfsnodoby账户的UID相同,则本案例就没什么意义了
配置案例3 /data 172.16.1.0/24(ro) 只读共享,用途:例如在生产环境中开发人员有查看服务器日志的需求,但是又不希望给开发服务器的权限,那么就可以给开发提供从某个测试服务器NFS客户端上查看某个生产服务器日志目录(NFS共享目录)的权限,但是,这不是唯一的方法喲
NFS 客户端地址:为NFS服务端授权的可访问共享目录的NFS客户端地址,可以为单独的IP地址或主机名、域名等,也可以为整个网段的地址,还可以用”*”来匹配所有的客户端服务器,这里所谓的客户端一般为前端的业务服务器,例如web服务。详细说明如下表
客户端地址 具体地址 说明
授权单一客户端访问NFS 172.16.1.41 一般情况下,生产环境中此配置不多
授权整个网段访问NFS 172.16.1.0/24 指定网段为生产环境中最常见的配置,配置简单、维护方便
授权整个网段可访问NFS 172.0.0.* 指定网段的另外写法(不推荐使用)
授权某个域名客户端访问 nfs.lzhnb.com 生产环境中一般不使用
授权整个域名客户端访问 *.lzhnb.com 生产环境中一般不使用
NFS配置参数权限,具体如下表
参数名称 参数用途
rw(熟记) 表示可读写权限
sync(熟记) 请求或写入数据时,数据同步写入到NFS Server的硬盘后才返回,优点:数据安全不会丢,缺点:性能比不启用该参数要差
async(熟记) 写入数据时会先写到内存缓冲区,直到硬盘有空档才会在写入磁盘,这样可以提升写入效率。风险是若服务器宕机或不正常关机,会损失缓冲区中未写入硬盘的数据(解决办法:服务器主板电池或UPS不间断电源)
all_squash(熟记) 不管访问NFS Server共享目录的用户身份如何,它的权限都将被压缩为匿名用户,同时它的UID和GID都会变成nfsnobody账号身份,在早期多个NFS客户端同时读写NFS Server数据时,这个参数很有用,在生产环境中配置NFS的重要技巧:1)确保所有客户端服务器对NFS共享目录具备相同的用户访问权限,all_squash把所有客户端都压缩成匿名用户(UID相同),就是anonuid,anongid指定的UID和GID相同,2)所有的客户端和服务器端都需要有一个相同的UID和GID的用户,nfsnodoby(UID必须相同)
anonuid(熟记) 参数以anon*开头即值anonymous匿名用户,这个用户的UID设置值通常为nfsnobody的UID值,当然我们也可以自行设置这个UID值。但是,UID必须存在于/etc/passwd中。在多个NFS Clients时,如多台web server共享一个NFS目录时,通过这个参数可以使得不同的NFS Clients写入的数据对所有NFS Clients保持同样的用户权限,即为配置的匿名UID对应用户权限,这个参数很有用。一般默认就好
anongid(熟记) 同anonuid,区别是把uid(用户id)换成gid(组id)
ro 表示只读权限
6、创建共享目录
[root@nfs01 ~]# mkdir /data -p
[root@nfs01 ~]# ll -d /data/
drwxr-xr-x. 2 root root 4096 Nov 19 10:45 /data/
7、更改共享目录的权限
[root@nfs01 ~]# chown -R nfsnobody.nfsnobody /data
[root@nfs01 ~]# ll -d /data
drwxr-xr-x 2 nfsnobody nfsnobody 4096 Mar 12 19:27 /data
8、重新加载NFS服务
[root@nfs01 ~]# /etc/init.d/nfs reload
【注意】
/etc/init.d/nfs reload<==>fexportfs -rv
修改完/etc/exports配置后,需要重新加载NFS服务
用yum/rpm包安装的软件,用service和/etc/init.d/服务名启动是一样的
9、 检查有权限挂载的服务器是否能够挂载
【方法1】利用showmount来进行检查
[root@nfs01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
或者
[root@nfs01 ~]# showmount -e localhost
Export list for localhost:
/data 172.16.1.0/24
【注意】
出现上面信息是,说明服务器可以挂载
测试的IP地址为NFS服务器的IP地址
【方法2】可以在把NFS服务器当做客户端来进行挂载测试
[root@nfs01 ~]# mount -t nfs 172.16.1.31:/data /mnt 挂载
[root@nfs01 ~]# df -h 查看
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 1.5G 6.9G 18% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 35M 146M 19% /boot
172.16.1.31:/data 8.8G 1.5G 6.9G 18% /mnt
[root@nfs01 ~]# umount /mnt 测试完后取消挂载
[root@nfs01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 1.5G 6.9G 18% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 35M 146M 19% /boot
10、NFS客户端的配置
检查操作系统的环境
[root@ client1 ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
[root@ client1 ~]# uname -r
2.6.32-696.el6.x86_64
[root@ client1 ~]# uname -m
x86_64
11、安装客户端软件rpcbind和nfs-utils
安装:
[root@client1 ~]# yum install nfs-utils rpcbind -y
检查:
[root@ client1 ~]# rpm -qa nfs-utils rpcbind
rpcbind-0.2.0-13.el6_9.1.x86_64
nfs-utils-1.2.3-75.el6_9.x86_64
【注意】
安装nfs-utils软件的目的是为了使用showmount等功能,所以客户端最好也装上,但是不启动NFS服务
12、 启动RPC服务并进行查看
启动:
[root@client1 ~]# /etc/init.d/rpcbind start
Starting rpcbind: [ OK ]
检查:
[root@ client1 ~]# /etc/init.d/rpcbind status
rpcbind (pid 2370) is running...
13、检查能否访问服务端
【方法1】
[root@ client1 ~]# showmount -e 172.16.1.31 此ip地址为服务器端的ip地址
Export list for 172.16.1.31:
/data 172.16.1.0/24
出现上面的情况说明可以访问服务端
【方法2】
[root@ client1 ~]# telnet 172.16.1.31 111 #111为rpc服务的端口
Trying 172.16.1.31...
Connected to 172.16.1.31.
Escape character is '^]'.
出现上面的情况说明可以访问服务端
14、 挂载NFS共享目录
挂载:
[root@ client1 ~]# mount -t nfs 172.16.1.31:/data /mnt
查看:
[root@ client1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 1.5G 6.9G 18% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 35M 146M 19% /boot
172.16.1.31:/data 8.8G 1.5G 6.9G 18% /mnt
查看:
[root@ client1 ~]# mount
/dev/sda3 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
172.16.1.31:/data on /mnt type nfs (rw,vers=4,addr=172.16.1.31,clientaddr=172.16.1.8)
15、测试读写数据
在/mnt目录下创建测试文件
[root@ client1 ~]# cd /mnt/
[root@ client1 mnt]# touch test.txt
[root@ client1 mnt]# ls
test.txt
16、在NFS服务端/data目录下进行查看
[root@nfs01 ~]# cd /data
[root@nfs01 data]# ls
test.txt
至此NFS客户端挂载成功
17、将挂载命令加入开机自启动
[root@client1 ~]# echo "mount -t nfs 172.16.1.31:/data /mnt" >>/etc/rc.local
[root@client1 ~]# tail -1 /etc/rc.local
mount -t nfs 172.16.1.31:/data /mnt
NFS服务器工作原理的更多相关文章
- NFS笔记(一)NFS服务器工作原理及详细配置
一.NFS工作原理 1.什么是NFS服务器 NFS就是Network File System的缩写,它最大的功能就是可以通过网络,让不同的机器.不同的操作系统可以共享彼此的文件. NFS服务器可以让P ...
- web服务器工作原理
Web服务器工作原理概述 转载自http://www.importnew.com/15020.html 很多时候我们都想知道,web容器或web服务器(比如Tomcat或者jboss)是怎样工作的?它 ...
- DHCP及DHCP多作用域服务器工作原理
一.DHCP服务是什么 DHCP称为动态主机配置协议.DHCP服务允许工作站连接到网络并且自动获取一个IP地址.配置DHCP服务的服务器可以为每一个网络客户提供一个IP地址.子网掩码.缺省网关.一个W ...
- 【转】web服务器工作原理
一.静态网页的工作原理如下:A.用户在浏览器的地址栏输入要访问的地址并回车,触发这个浏览请求. B.浏览器将请求发送到Web服务器.C.Web服务器接受这个请求,并根据请求文件的后缀名判定是否为HTM ...
- Region服务器工作原理
- nfs服务器的搭建和使用
目录 更新记录 1.nfs介绍 1.1 nfs概念 1.2 nfs工作原理 1.3 nfs通讯过程 2.搭建和测试 NFS 服务器 2.1 搭建NFS服务器 2.2 测试NFS服务器 3.在线调试:N ...
- NFS工作原理
很多同学都知道NFS的使用场景,也知道如何配置和使用,但对NFS的工作原理了解的很少. NFS是C/S模式,首先要有一台服务端跑NFS服务,然后各个客户端直接挂载共享目录使用.NFS服务本身不会监听端 ...
- Web服务器的工作原理
Web服务器的工作原理 Web服务器工作原理概述 很多时候我们都想知道,web容器或web服务器(比如Tomcat或者jboss)是怎样工作的?它们是怎样处理来自全世界的http请求的?它们在幕后做了 ...
- 简介web服务器的工作原理
一 什么是web服务器,应用服务器和web容器? 对于web服务器与应用服务器:“在过去它们是有区别的,但是这两个不同的分类慢慢地合并了,而如今在大多在情况下和使用中可以把它们看成一个整体.” 但是当 ...
随机推荐
- java-IO流-其他流
###22.01_IO流(序列流)(了解) * 1.什么是序列流 * 序列流可以把多个字节输入流整合成一个, 从序列流中读取数据时, 将从被整合的第一个流开始读, 读完一个之后继续读第二个, ...
- Python基础:十、用户交互
使用input()函数,可以让我们和计算机互动起来 a. 等待输入 b. 将输入的内容赋值给前面的变量 c. input()接受到的内容永远是字符串 变量 = input("提示信息&quo ...
- Scaffold(Material库中提供的页面脚手架)知识点
Scaffold 包含:appBar.body.floatingActionButton
- Ubuntu下重新安装软件 配置文件不重新生成得问题解决
apt-get remove nfs dpkg -P nfs apt-get install nfs 按照先remove然后dpkg -P再重新install的顺序.
- Mysql 一个表中的数据插入另一个表中
两张表的字段一致,并且插入全部数据 INSERT INTO 目标表 SELECT * FROM 来源表 ; 例如,要将 articles 表插入到 newArticles 表中,则可以通过如下 ...
- 分词工具Hanlp基于感知机的中文分词框架
结构化感知机标注框架是一套利用感知机做序列标注任务,并且应用到中文分词.词性标注与命名实体识别这三个问题的完整在线学习框架,该框架利用1个算法解决3个问题,时自治同意的系统,同时三个任务顺序渐进,构 ...
- Centos 7 安装图形化环境
安装系统时,使用了最小化安装,当需要用到图形界面的时候需要安装图形界面支持 环境是centos7.5最小化安装 1,先更新系统 yum -y upgrade 这里说明一下upgrade和update的 ...
- SqlServer高版本数据备份还原到低版本(转)
原文地址:https://www.jb51.net/article/96454.htm 想要将Sqlserver2014高版本备份的数据还原到低版本SqlServer2008R2上去,但是这在SqlS ...
- 【如皋OJ】1127:正整数N转换成一个二进制数
1127: 正整数N转换成一个二进制数 时间限制: 1 Sec 内存限制: 128 MB提交: 85 解决: 59[提交] [状态] [讨论版] [命题人:zhuzhigang] 题目描述 输入一 ...
- 【mysql】字段类型和长度的解释
int(11)最大长度是多少,MySQL中varchar最大长度是多少? int(11)最大长度是多少? 在SQL语句中int代表你要创建字段的类型,int代表整型,11代表字段的长度. 这个11代表 ...