1、NFS网络文件系统简介
1)NFS概念描述:
什么是nfs?nfs是Network File system的缩写,它的主要功能是通过网络让不同的主机系统之间可以彼此共享文件或目录。NFS客户端(一般为应用服务器,如web)可以通过挂载(mount)的方式将NFS服务器端共享的数据文件目录挂载到NFS客户端本地系统中(就是某一个挂载点)。从NFS客户端查看本地的挂载目录,就是访问NFS服务器端的共享目录。
NFS网络文件系统的使用很像Windows系统的网络共享、安全功能、网络驱动器映射,这也和Linux的Samba服务类似。
2)NFS在企业中的应用场景:
在企业集群架构的工作场景中,NFS网络文件系统一般被用来存储共享视频、图片、附件等静态资源文件(一般把网站用户上传的文件都放在NFS共享里),NFS是当前互联网系统架构中最常用的数据存储服务之一,特别是中小型网站公司应用频率很高。大公司或门户除了使用NFS外,还可能会使用MFS、GFS、FASTFS、TFS等分布式文件系统。
3)网络文件系统类型:
NFS:适用于中小企业;
MFS:用于存放图片文件,分布式文件系统;
GFS:一般用于云计算,做后端存储的大文件。
2、NFS服务器端环境
[root@localhost /]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 7.1 (Maipo) #RedHat7.1操作系统 [root@localhost /]# uname -r 3.10.0-229.el7.x86_64.debug [root@localhost /]# ifconfig|sed -n '2,2p'|awk '{print $2}' 192.168.26.11 #服务器IP地址
3、安装NFS服务
1)yum安装nfs服务软件包
① rpcbind:这个软件包是rpc的主程序,客户端和服务端都需要安装;
② nfs-utils:这个软件包是NFS服务的主程序,客户端和服务端都需要安装。
[root@localhost /]# rpm -qa nfs-utils rpcbind #检查软件包是否安装 [root@localhost /]# yum -y ×××tall nfs-utils rpcbind #安装软件包 [root@localhost /]# rpm -qa rpcbind nfs-utils #检查软件包是否安装 rpcbind-0.2.0-26.el7.x86_64 nfs-utils-1.3.0-0.8.el7.x86_64
2)安装软件包时报错以及解决方法
① 安装rpcbind报错信息
[root@nfs-client /]# yum -y ×××tall rpcbind
Failed to set locale, defaulting to C
Loaded plug×××: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.163.com
* extras: mirrors.163.com
* updates: mirrors.163.com
***********************省略部分内容***************
error: %pre(rpcbind-0.2.0-44.el7.x86_64) scriptlet failed, exit status 6
Error in PREIN scriptlet in rpm package rpcbind-0.2.0-44.el7.x86_64
Verifying : rpcbind-0.2.0-44.el7.x86_64 1/1
Failed:
rpcbind.x86_64 0:0.2.0-44.el7
Complete!
② 解决方法
错误提示安装软件的时候执行什么脚本出现了错误,经百度之后知道在安装rpm软件包的时候,会先执行rpm包中的预处理脚本,应该是执行这个脚本的时候出现了错误,所以我尝试查看这个脚本都执行了什么内容;
那么如何获取到这个脚本呢?
取对应的rpm包
yum ×××tall xxxxpackage --downloadonly --downloaddir=/root
取得rpm对应的安装预处理脚本
rpm --scripts -qp xxxxpackage > x-scripts.log
发现该脚本中有用到useradd/userdel命令来添加rpc的用户,由此想起之前使用chattr +i /etc/passwd对passwd文件做了加锁处理,所以会造成useradd/userdel命令不能正常执行,这应该就是造成预处理脚本不能正常执行的原因了吧,使用chattr -i /etc/passwd解锁之后软件可以正常安装。
4、启动NFS服务(服务器端)
1)启动rpcbind服务
[root@localhost /]# systemctl start rpcbind #启动rpcbind [root@localhost /]# systemctl enable rpcbind #查看rpc是否启动 [root@localhost /]# systemctl is-active rpcbind #设置rpcbind开机自启动 active [root@localhost /]# systemctl is-enabled rpcbind #查看rpcbind是否开机自启动 enabled
2)启动nfs服务
[root@localhost /]# systemctl start nfs #启动nfs [root@localhost /]# systemctl is-active nfs #查看nfs是否启动 active [root@localhost /]# systemctl enable nfs-server.service #设置nfs开机自启动 ln -s '/usr/lib/systemd/system/nfs-server.service' '/etc/systemd/system/multi-user.target.wants/nfs-server.service' [root@localhost /]# echo $? 0 [root@localhost /]# systemctl is-enabled nfs-server #查看nfs开机是否自启动 enabled
3)查看rpc进程
[root@localhost /]# ps -ef|grep -v grep|grep rpc rpc 22647 1 0 15:31 ? 00:00:00 /sbin/rpcbind -w root 22676 2 0 15:33 ? 00:00:00 [rpciod] rpcuser 22686 1 0 15:33 ? 00:00:00 /usr/sbin/rpc.statd --no-notify root 22691 1 0 15:33 ? 00:00:00 /usr/sbin/rpc.idmapd root 22692 1 0 15:33 ? 00:00:00 /usr/sbin/rpc.mountd
4)查看rpc状态
[root@localhost /]# systemctl status rpcbind ###########省略部分内容########### Active: active (running) since 五 2019-06-14 15:31:56 CST; 8min ago ###########省略部分内容###########
5)查看rpc有没有注册端口(111是rpc的默认端口)
[root@localhost /]# 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 100024 1 udp 44701 status 100024 1 tcp 55897 status 100005 1 udp 20048 mountd 100005 1 tcp 20048 mountd 100005 2 udp 20048 mountd 100005 2 tcp 20048 mountd 100005 3 udp 20048 mountd 100005 3 tcp 20048 mountd 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100227 3 tcp 2049 nfs_acl 100003 3 udp 2049 nfs 100003 4 udp 2049 nfs 100227 3 udp 2049 nfs_acl 100021 1 udp 48795 nlockmgr 100021 3 udp 48795 nlockmgr 100021 4 udp 48795 nlockmgr 100021 1 tcp 59460 nlockmgr 100021 3 tcp 59460 nlockmgr 100021 4 tcp 59460 nlockmgr
5、NFS客户端启动(只启动rpc服务即可)
1)nfs客户端环境
[root@vms002 /]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 7.1 (Maipo) #操作系统 [root@vms002 /]# uname -r 3.10.0-229.el7.x86_64 [root@vms002 /]# ifconfig|sed -n '2,2p'|awk '{print $2}' 192.168.26.102 #nfs客户端IP地址
2)安装rpcbind
[root@vms002 /]# yum -y ×××tall rpcbind
3)启动rpcbind服务
[root@vms002 /]# systemctl start rpcbind [root@vms002 /]# systemctl is-active rpcbind active
4)查看rpc有没有注册端口
[root@vms002 /]# 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 100005 1 udp 20048 mountd 100005 1 tcp 20048 mountd 100024 1 udp 57887 status 100024 1 tcp 36792 status 100005 2 udp 20048 mountd 100005 2 tcp 20048 mountd 100005 3 udp 20048 mountd 100005 3 tcp 20048 mountd 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100227 3 tcp 2049 nfs_acl 100003 3 udp 2049 nfs 100003 4 udp 2049 nfs 100227 3 udp 2049 nfs_acl 100021 1 udp 51830 nlockmgr 100021 3 udp 51830 nlockmgr 100021 4 udp 51830 nlockmgr 100021 1 tcp 46841 nlockmgr 100021 3 tcp 46841 nlockmgr 100021 4 tcp 46841 nlockmgr
6、配置及测试
1)服务端配置
① 创建一个你要共享的目录
[root@localhost /]# ifconfig|sed -n '2,2p'|awk '{print $2}' 192.168.26.11 [root@localhost /]# mkdir /data
② 配置NFS配置文件(默认配置文件是空的)
[root@localhost /]# vim /etc/exports ############### /data 192.168.26.0/24(rw,sync) #/data是共享目录;192.168.26.0/24是允许网络访问地址段;(rw,sync)是权限
③ 重新加载nfs服务(尽量不要重启服务)
[root@localhost /]# systemctl reload nfs
④ 检查nfs共享配置是否成功
[root@localhost /]# showmount -e localhost Export list for localhost: /data 192.168.26.0/24
⑤ 向第一步创建的共享目录里面存放或创建文件数据,等下与客户端对比是否一样
[root@localhost /]# cd /data/ [root@localhost data]# touch aa{1..3} [root@localhost data]# touch oldboy-{5..8} [root@localhost data]# ls aa1 aa2 aa3 oldboy-5 oldboy-6 oldboy-7 oldboy-8
⑥ 把共享目录的属主和属组设置为NFS用户
[root@localhost data]# chown -R nfsnobody:nfsnobody /data/ [root@localhost data]# ls -ld /data drwxr-xr-x. 2 nfsnobody nfsnobody 96 6月 14 16:24 /data
2)客户端配置及测试
① 检查服务端NFS是否OK
[root@vms002 /]# ifconfig|sed -n '2,2p'|awk '{print $2}' 192.168.26.102 [root@vms002 /]# showmount -e 192.168.26.11 Export list for 192.168.26.11: /data 192.168.26.0/24
② 客户端上创建一个挂载目录nfs-data,挂载nfs
[root@vms002 /]# mkdir /nfs-data #创建挂载目录 [root@vms002 /]# mount -t nfs 192.168.26.11:/data /nfs-data/ #挂载nfs共享目录 [root@vms002 /]# df -hT #查看已挂载的nfs共享目录 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/sda1 xfs 40G 3.2G 37G 8% / 192.168.26.11:/data nfs4 18G 4.1G 14G 24% /nfs-data #nfs共享目录
③ 查看nfs-data目录是否是NFS服务端共享的数据,并创建文件,看nfs的写权限是否成功。
[root@vms002 /]# cd /nfs-data/ [root@vms002 nfs-data]# ls aa1 aa2 aa3 oldboy-5 oldboy-6 oldboy-7 oldboy-8 [root@vms002 nfs-data]# touch www{1..5} [root@vms002 nfs-data]# ls aa1 aa3 oldboy-6 oldboy-8 www2 www4 aa2 oldboy-5 oldboy-7 www1 www3 www5
④ 设置开机自动挂载
[root@vms002 /]# vim /etc/fstab 192.168.26.11:/data /nfs-data nfs defaults 0 0 [root@vms002 /]# umount /nfs-data/ [root@vms002 /]# df -hT 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/sda1 xfs 40G 3.2G 37G 8% / devtmpfs devtmpfs 2.0G 0 2.0G 0% /dev tmpfs tmpfs 2.0G 148K 2.0G 1% /dev/shm tmpfs tmpfs 2.0G 17M 2.0G 1% /run tmpfs tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/sr0 iso9660 3.7G 3.7G 0 100% /run/media/jerry/RHEL-7.1 Server.x86_64 [root@vms002 /]# mount -a [root@vms002 /]# df -hT 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/sda1 xfs 40G 3.2G 37G 8% / devtmpfs devtmpfs 2.0G 0 2.0G 0% /dev tmpfs tmpfs 2.0G 148K 2.0G 1% /dev/shm tmpfs tmpfs 2.0G 17M 2.0G 1% /run tmpfs tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/sr0 iso9660 3.7G 3.7G 0 100% /run/media/jerry/RHEL-7.1 Server.x86_64 192.168.26.11:/data nfs4 18G 4.1G 14G 24% /nfs-data
3)客户端报错案例:
① 检测服务端的NFS服务失败,报错信息
[root@vms002 /]# showmount -e 192.168.26.11 clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
② 解决方法:
#根据上面的报错信息,nfs server服务器端可能被firewalld(防火墙)拦截了,关闭NFS服务端的防火墙或允许通过
[root@localhost data]# systemctl stop firewalld
#nfs client客户端再次检查是否可以连接到nfs服务端
[root@vms002 nfs-data]# showmount -e 192.168.26.11 Export list for 192.168.26.11: /data 192.168.26.0/24
7、总结
1)NFS服务端
① 检查并安装nfs服务
[root@localhost /]# rpm -qa rpcbind nfs-utils [root@localhost /]# yum -y ×××tall rpcbind nfs-utils
② 启动rpc和nfs服务以及设置开机自启动并检查
[root@localhost /]# systemctl start rpcbind [root@localhost /]# systemctl enable rpcbind [root@localhost /]# systemctl start nfs-server [root@localhost /]# systemctl enable nfs-server [root@localhost /]# systemctl is-active rpcbind active [root@localhost /]# systemctl is-enabled rpcbind enabled [root@localhost /]# systemctl is-active nfs-server active [root@localhost /]# systemctl is-enabled nfs-server enabled
③ 配置共享/data目录
[root@localhost /]# vim /etc/exports ###############注释################ /data 192.168.26.0/24(rw,sync)
④ 重新加载NFS服务(尽量不要重启)
[root@localhost /]# systemctl reload nfs
⑤ 检查nfs服务配置是否成功
[root@localhost /]# showmount -e localhost Export list for localhost: /data 192.168.26.0/24
⑥ 设置共享目录的权限(把共享目录的属主和属组设置为nfs用户)
[root@localhost data]# chown -R nfsnobody:nfsnobody /data/ [root@localhost data]# ls -ld /data drwxr-xr-x. 2 nfsnobody nfsnobody 96 6月 14 16:24 /data
2)客户端(客户端只启动rpc服务即可)
① 安装nfs和rpc软件
[root@localhost /]# rpm -qa rpcbind nfs-utils [root@localhost /]# yum -y ×××tall rpcbind nfs-utils
② 启动rpc服务以及设置开机自启动,并检查
[root@vms002 /]# systemctl start rpcbind [root@vms002 /]# systemctl enable rpcbind [root@vms002 /]# systemctl is-active rpcbind active [root@vms002 /]# systemctl is-enabled rpcbind enabled
③ 检查服务端NFS是否OK
[root@vms002 /]# showmount -e 192.168.26.11 Export list for 192.168.26.11: /data 192.168.26.0/24
④ 挂载并测试
[root@vms002 /]# mount -t nfs 192.168.26.11:/data /nfs-data/ [root@vms002 /]# cd /nfs-data/ [root@vms002 nfs-data]# ls aa1 aa2 aa3 oldboy-5 oldboy-6 oldboy-7 oldboy-8 [root@vms002 nfs-data]# touch www{1..5} [root@vms002 nfs-data]# ls aa1 aa3 oldboy-6 oldboy-8 www2 www4 aa2 oldboy-5 oldboy-7 www1 www3 www5
⑤ 设置开机自动挂载
[root@vms002 /]# vim /etc/fstab 192.168.26.11:/data /nfs-data nfs defaults 0 0
转载于:https://blog.51cto.com/13716812/2409230