本文共 9723 字,大约阅读时间需要 32 分钟。
NFS是Network File System的缩写,中文意思是网络文件系统,它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录 什么是文件系统:知识回顾:文件系统(装修的风格)--怎么来存放文件的,即存放文件的一种方式新磁盘要做raid---分区---格式化(文件系统)---挂载使用centos ext2,3,4centos 7 xfssuse reisersfs分布式文件系统:mfs gfs fastdfs(重点研究的分布式文件系统)
a 实现数据信息共享b 实现数据信息一致
1.4.1 NFS服务工作架构(挂载架构图)
a 部署好NFS服务b web服务器进行挂载nfs共享目录c 对客户端挂载点目录下的数据进行修改,等价于在服务端共享目录中,对数据的修改1.4.2 什么叫做rpc服务
rpc服务类似一个中介服务,由于nfs服务启动会产生多个进程和端口(端口号随机产生),不方便客户端与之建立网络连接利用rpc服务建立nfs文件共享流程a 启动rpc服务,创建111端口信息b 启动nfs服务,向rpc服务注册进程端口号信息c 客户端访问rpc服务,获取nfs服务信息d 客户端获取nfs共享目录信息后,进行mount挂载1.4.3 nfs工作原理图
nfs服务端:做了3件事nfs客户端:做了3件事扩展:实现yum下载数据本地保存vim /etc/yum.conf ---修改编写yum配置文件cachedir=/var/cache/yum/$basearch/$releasever --- 下载软件保存路径keepcache=1 --- 开启yum下载软件保存功能[root@nfs01 ~]# yum reinstall telnet -y[root@nfs01 ~]# cd /var/cache/yum/x86_64/6/[root@nfs01 6]# tree
1.5.2 nfs服务部署流程
1.5.3 nfs服务端部署
第一个里程碑:确认nfs相关软件是否安装rpm -qa rpcbind rpm -qa nfs-utils第二个里程碑:进行nfs相关软件yum安装yum install -y rpcbind nfs-utils第三个里程碑:编写nfs配置文件[root@nfs01 6]# cat /etc/exports /data 172.16.1.0/24(rw,sync)第四个里程碑:创建共享目录mkdir /datachown -R nfsnobody.nfsnobody /data第五个里程碑:启动nfs相关服务[root@nfs01 data]# /etc/init.d/rpcbind startStarting rpcbind: [ OK ] [root@nfs01 data]# /etc/init.d/nfs startStarting NFS services: [ OK ]Starting NFS quotas: [ OK ]Starting NFS mountd: [ OK ]Starting NFS daemon: [ OK ]Starting RPC idmapd: [ OK ]第六个里程碑:检查nfs相关服务是否正常启动[root@nfs01 data]# rpcinfo -p localhost --- 确认房源信息是否已经注册到rpc服务中[root@nfs01 data]# showmount -e 172.16.1.31 --- 确认是否有可以挂载的目录信息Export list for 172.16.1.31:
/data 172.16.1.0/24
1.5.4 本地测试挂载[root@nfs01 data]# mount -t nfs 172.16.1.31:/data /mnt --- nfs服务端本地测试挂载[root@nfs01 data]# df -hFilesystem Size Used Avail Use% Mounted on/dev/sda3 8.8G 1.7G 6.8G 20% /tmpfs 931M 0 931M 0% /dev/shm/dev/sda1 190M 40M 141M 22% /boot172.16.1.31:/data 8.8G 1.7G 6.8G 20% /mnt1.5.5 nfs客户端部署
第一个里程碑:安装相应nfs客户端软件yum install -y rpcbind nfs-utils第二个里程碑:rpcbind服务可以启动(也可以不启动)/etc/init.d/rpcbind start第三个里程碑:进行挂载前测试[root@nfs01 data]# rpcinfo -p localhost --- 确认房源信息是否已经注册到rpc服务中[root@nfs01 data]# showmount -e 172.16.1.31 --- 由于未安装nfs-utils软件,因此没有showmount第四个里程碑:进行共享目录挂载[root@backup ~]# mount -t nfs 172.16.1.31:/data /mnt[root@backup ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/sda3 8.8G 1.7G 6.8G 20% /tmpfs 931M 0 931M 0% /dev/shm/dev/sda1 190M 40M 141M 22% /boot172.16.1.31:/data 8.8G 1.7G 6.8G 20% /mnt
查看看以上进程,均可以执行 ”man 进程名“ 命令,例如 “man rpc.idmapd”,
可查看有关NFS服务进程的英文说明参考:NFS共享目录 NFS客户端地址1(参数1,参数2,...) 客户端地址2(参数1,参数2,...)
或NFS共享目录 NFS客户端地址(参数1,参数2,...)执行man exports命令,然后切换到文件结尾,可以快速查看如下样例格式:
EXAMPLE/ master(rw) trusty(rw,no_root_squash) /projects proj*.local.domain(rw) /usr *.local.domain(ro) @trusted(rw) /home/joe pc001(rw,all_squash,anonuid=150,anongid=100) /pub *(ro,insecure,all_squash) /srv/www -sync,rw server @trusted @external(ro) /foo 2001:db8:9:e54::/64(rw) 192.0.2.0/24(rw) /build buildhost[0-9].local.domain(rw)
no_root_squash --- root用户不进行映射压缩
root_squash --- root用户进行映射压缩all_squash --- 所有用户都进行压缩no_all_squash --- 所有用户都不进行压缩root_squash,no_all_squash参数实践
[root@nfs01 data]# cat /etc/exports /data 172.16.1.0/24(rw,sync,root_squash,no_all_squash)实践操作:将默认nfsnobody映射用户转为www
第一里程碑:在服务端和客户端创建出相同uid和gid的www用户[root@nfs01 ~]# useradd -u 666 www[root@nfs01 ~]# id wwwuid=666(www) gid=666(www) groups=666(www)[root@web01 ~]# useradd -u 666 www[root@web01 ~]# id wwwuid=666(www) gid=666(www) groups=666(www)第二里程碑:编写nfs服务端配置文件[root@nfs01 ~]# cat /etc/exports /data 172.16.1.0/24(rw,sync,anonuid=666,anongid=666)第三个里程:修改原有共享目录权限chown -R www.www /data第四个里程:客户端进行挂载测试[root@web01 ~]# mount -t nfs 172.16.1.31:/data /mnt[root@web01 mnt]# touch oldboy.txtroot@web01 mnt]# llotal 0rw-r--r-- 1 www www 0 Dec 1 09:35 oldboy.txt
[root@nfs01 data]# cat /var/lib/nfs/etab --- nfs默认配置信息记录文件/data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534,sec=sys,rw,root_squash,no_all_squash)[root@nfs01 data]# id nfsnobodyuid=65534(nfsnobody) gid=65534(nfsnobody) groups=65534(nfsnobody)
服务端上面要求:
nfs服务器172.16.1.31,共享下面两个目录:/data/w 要求的权限可读写,同步数据sync,所有用户都压缩为匿名用户all_suqash/data/r 要求的权限为只读,同步数据sync,所有用户都压缩为匿名用户all_squash客户端上面要求:
backup服务器 把NFS服务器的/data/r 挂载到/data/rweb01服务器 把NFS服务器的/data/w 挂载到/data/w第一个里程:编写nfs配置文件
vim /etc/exports/data 172.16.1.0/24(rw,sync,anonuid=666,anongid=666)/data/w 172.16.1.0/24(rw,sync,all_suqash)/data/r 172.16.1.0/24(ro,sync,all_suqash)第二个里程:创建新增共享目录
[root@nfs01 data]# mkdir /data/{w,r} -p[root@nfs01 data]# chown -R nfsnobody.nfsnobody /data/[root@nfs01 data]# ll /data/total 8-rw-r--r-- 1 nfsnobody nfsnobody 0 Dec 1 09:35 oldboy.txtdrwxr-xr-x 2 nfsnobody nfsnobody 4096 Dec 1 10:30 rdrwxr-xr-x 2 nfsnobody nfsnobody 4096 Dec 1 10:30 w第三个里程:平滑重启nfs服务
/etc/init.d/nfs reload配置nfs客户端:
backup服务器配置:创建挂载点目录:mkdir /data/r -p进行共享目录挂载:mount -t nfs 172.16.1.31:/data/r /data/r说明:如果挂载点已经挂载上了,需要卸载重新挂载web01服务器配置:
创建挂载点目录:mkdir /data/w -p进行共享目录挂载:mount -t nfs 172.16.1.31:/data/w /data/w说明:如果挂载点已经挂载上了,需要卸载重新挂载第四个里程:进行挂载目录权限测试
测试backup挂载目录权限(预期结果:挂载目录中创建信息会权限拒绝)[root@backup ~]# cd /data/r/[root@backup r]# touch oldboy_backup.txttouch: cannot touch `oldboy_backup.txt': Permission denied测试web01挂载目录权限(预期结果:挂载目录中创建信息会权限拒绝)
[root@web01 w]# touch oldboy_web01.txt[root@web01 w]# lltotal 0-rw-r--r-- 1 nfsnobody nfsnobody 0 Dec 1 10:48 oldboy_web01.txt注意:nfs配置文件中,配置的共享目录,不要有父目录与子目录的继承关系
NFS客户端权限与三个因素有关:
1) NFS服务器/etc/exports设置需要开放可写入的权限,即服务器端的共享权限。 2) NFS服务器实际要共享的NFS目录权限具有可写入w的权限,即服务器端本地目录的安全权限。 3)每台机器对应存在和NFS默认配置UID的相同UID 65534的nfsnobody用户(确保所有客户端的访问权限统一,否则每个机器需要同时建立相同UID的用户,并覆盖NFS的默认用户配置)、重要配置文件与命令总结
/etc/exports --- nfs服务端主配置文件/usr/sbin/exportfs --- exportfs为nfs服务管理命令,还可以进行命令行配置共享目录信息 /usr/sbin/showmount --- 显示可以挂载的共享目录列表信息/var/lib/nfs/etab --- 查看nfs服务端默认挂载参数配置信息/proc/mounts --- 查看nfs客户端默认挂载参数配置信息umount命令重要参数
-l Lazy unmount --- 懒惰卸载,不用跳出挂载的目录进行卸载-f Force unmount --- 强制卸载NFS客户端挂载命令第一个报错:
[root@nfs-client1 ~]# showmount -e 10.0.0.7 <- 这里遇到了故障clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)问题说明:nfs服务端防火墙没有关闭,防火墙策略阻止掉了第二个报错:
[root@nfs-client1 ~]# showmount -e 10.0.0.7clnt_create: RPC: Program not registered问题说明:nfs服务没有启动,只启动了rpcbind服务第三个报错:
[root@nfs01 data]# /etc/init.d/nfs startStarting NFS services: [ OK ]Starting NFS quotas: Cannot register service: RPC: Unable to receive; errno = Connection refusedrpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS, udp).[FAILED]Starting NFS mountd: [FAILED]Starting NFS daemon: rpc.nfsd: writing fd to kernel failed: errno 111 (Connection refused)rpc.nfsd: unable to set any sockets for nfsd[FAILED]问题说明:nfs与rpcbind服务启动顺序不正确,rpcbind服务没有启动,先启动了nfs服务第四个报错:
示例1:客户端挂载报错“No such file or directory”[root@nfs-client ~]# showmount -e 172.16.1.31Export list for 172.16.1.31:/data 172.16.1.0/24[root@nfs-client ~]# mount -t nfs 172.16.1.31:/data /mntmount.nfs: mounting 172.16.1.31:/data failed, reason given by server: No such file or directory解答:原因是NFS服务器端没有共享目录/data,创建即可。命令如下:[root@nfs-server ~]# mkdir /data第五个报错:
示例4:卸载挂载设备时显示device is busy。[root@nfs-client mnt]# umount /mntumount.nfs: /mnt: device is busyumount.nfs: /mnt: device is busy问题解决:umount -lf /mnt第六个报错:
示例5:CentOS 6.6客户端NFS挂载时遇到问题。[root@nfs-client ~]# mount -t nfs 172.16.1.31:/data /mntmount:wrong fs type,bad option,bad option,bad superblock on 10.0.0.7:/data,missing codepage or helper program,or other error(for several filesystems (e.g. nfs, cifs) you mightneed a /sbin/mount.<type> helper program )In some cases useful info is found in syslog - trymeg | tail or so问题说明:客户端没有安装nfs-utils软件包,无法识别nfs文件系统类型第七个报错:
共享目录挂载很卡mount -t nfs 172.16.1.31:/data /mntcd /mnttime touch test.txt原因分析: NFS服务端重启之后。立刻进行挂载会出现此问题,因为NFS自身重启的时候,拥有无敌的时间,默认是90秒;在无敌时间内,是不能对共享目录进行更改的操作; 在系统配置中/etc/sysconfig/nfs中指定了无敌时间的配置参数NFSD_V4_GRACE=90NFSD_V4_LEASE=90NLM_GRACE_PERI0D=90第八个报错:
Stale file handle客户端报错mount -t nfs 172.16.1.31:/data /mntmount.nfs: Stale file handle问题原因:挂载点目录已经在挂载中,一定要卸载后,才能进行重新挂载1.8.1 利用rc.local文件实现
将挂载命令追加到/etc/rc.local文件中echo 'mount -t nfs 172.16.1.31:/data /mnt' >>/etc/rc.local1.8.2 利用fstab文件实现
vim /etc/fstab挂载什么 挂载到哪 类型 挂载参数 是否备份 是否检查磁盘 172.16.1.31:/data /mnt nfs defaults 0(dump) 0(fsck)[root@backup ~]# /etc/init.d/netfs start说明:netfs服务设置开机自启动后,可以让系统网络服务启动后,再次识别fstab文件配置信息1.8.3 NFS客户端挂载参数说明
1.8.4 NFS客户端优化参数总结 1.8.4.1 有关系统安全挂载参数选项在企业工作场景,一般来说,NFS服务器共享的只是普通静态数据(图片、附件、视频),不需要执行suid、exec等权限,挂载的这个文件系统只能作为数据存取之用,无法执行程序,对于客户端来讲增加了安全性,例如:很多***篡改站点文件都是由上传入口上传的程序到存储目录。然后执行的。因此在挂载的时候,用下面的命令很有必要:mount -t nfs -o nosuid,noexec,nodev,rw 10.0.0.7:/data /mnt通过mount -o指定挂载参数和在/etc/fstab里指定挂载参数的效果是一样的。网络文件系统和gf 本地的文件系统效果也是一样的。1.8.4.2 mount挂载性能优化参数选项
下面介绍几个在企业生产环境下,NFS性能优化挂载的例子。1)禁止更新目录及文件时间戳挂载,命令如下:mount -t nfs -o noatime,nodiratime 10.0.0.7:/data /mnt转载于:https://blog.51cto.com/13547156/2060799