NFS介绍
nfs主要功能是通过网络让不同机器操作系统之间可以共享文件和目录,nfs服务器允许nfs客户端将远端nfs服务器的共享目录挂载到本地的nfs客户端中。
在本地的nfs客户端的机器看来,nfs服务端共享的目录就好像自己的磁盘分区和目录一样,一般客户端挂在到本地目录的名字可以随便起,但为了方便管理一般要和nfs服务端一样比较好。
nfs一般用来存储视频、图片等静态资源。
提示: 1.配置NFS服务端后,不用重启NFS服务,只要使用exportfs -rv
2.rpc主程序Centos5.8下为portmap 、Centos6.4和Centos7下为rpcbind
3.NFS共享目录不要授权于777权限,可以改所属主和组为nfsnobody,因为nfsnobody权限不是很大,也不能登陆
一、nfs服务端配置
1.安装rpcbind和nfs-utils
[root@centos7 ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
[root@centos7 ~]# rpm -qa nfs-utils
[root@centos7 ~]# rpm -qa nfs-utils
[root@centos7 ~]# rpm -qa rpcbind
[root@centos7 ~]# yum install rpcbind
[root@centos7 ~]# yum install nfs-utils
2.启动rpcbind:
[root@centos7 ~]# systemctl status rpcbind
[root@centos7 ~]# systemctl start rpcbind
3.查看rpc:
4.查看nfs服务向rpc注册的端口信息:
5.把rpcbind加入开启自启动:
6.启动nfs-utils:
7.把nfs服务加入开机自启动:
8.授权nfsnobody于/nfsdata让客户端挂载后可写可读
#mkdir /nfsdata
# chown nfsnobody:nfsnobody /nfsdata/
9.配置nfs服务
编辑nfs的配置文件:
/etc/exports默认是空的,这个是nfs的配置文件。
echo "/nfsdata/bbs/ 192.168.1.1/24(rw,sync,all_squash,anonuid=65534,anongid=65534)" >> /etc/exports
###生产环境中常用的一种配置,适合多客户端共享一个NFS目录。All_squash 也就是说不管客户端是以什么样的身份来进行访问的,都会被压缩成为all_squash后面所接的用户和群组身份。这边用anonuid、anongid编号来标示。
10.编辑nfs配置文件不需要重新启动nfs服务:
[root@centos7 etc]# exportfs -rv
exporting 192.168.1.1/24:/nfsdata/bbs
备注:
exportfs:NFS服务端发布共享控制命令。
-r:表示重新刷新共享。
-a:表示将配置文件/etc/exports中的所有定义共享发布出去。
-v:显示确认共享设置。
-u:表示不发布共享
11.查看nfs服务端挂载情况:
[root@centos7 etc]# showmount -e localhost
Export list for localhost:
/nfsdata/bbs 192.168.1.1/24
说明:
1、另外可以通过man exports查阅exports参数说明。
2、当我们nfs配置好之后,我们可以通过cat /var/lib/nfs/etab来查看,nfs配置的参数。并且这个目录很重要。/var/lib/nfs/rmtab从这个文件中我们可以看到,有哪些客户端挂载了nfs共享目录。这个两个文件是比较重要的。
etab这个文件能看到服务器上共享了哪些目录,执行哪些人可以使用,并且设定的参数为何。
rmtab这个文件就是能够查看到共享目录被挂载的情况。
二、客户端配置
客户端不需要使用启动nfs服务,需要安装rpc服务并启动,安装nfs服务是为了使用showmount -e 命令
1.client安装rpcbind服务:
[root@localhost ~]# rpm -qa | grep rpcbind
[root@localhost ~]# rpm -qa | grep nfs
[root@localhost ~]# yum install rpcbind -y
已加载插件:fastestmirror
Determining fastest mirrors
2.把rpcbind加入开机自启动
3.启动rpcbind:
4.客户端创建挂载目录:(目录最好和服务端的一样)
[root@localhost ~]# mkdir -pv /nfsdata/
mkdir: 已创建目录 "/nfsdata"
mkdir: 已创建目录 "/nfsdata/"
5.扫描NFS服务器的文件共享列表
[root@localhost ~]# showmount -e 192.168.1.214
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
上面这个原因是服务器的firewalld对111端口做了限制!!
测试:
服务器关闭防火墙后:
[root@centos7 etc]# systemctl stop firewalld
三、把服务器的目录挂载到客户端 的目录下
一般来说当nfs服务器提供的只是普通数据(图片html,css,jss,视频等)应该不需要执行suid,exec等权限,由于是共享目录不存在设备所以也不存在挂载设备dev,因此在客户端挂载的时候,可以加上给你这几个命令挂载
[root@localhost /]# mount -t nfs -o nosuid,noexec,nodev,rw 192.168.1.214:/nfsdata/bbs /nfsdata/bbs
优化mount:
mount -t nfs -o nosuid,noexec,nodev,rw,hard,intr,rsize=32768,wsize=32768 192.168.1.214:/nfsdata/bbs /nfsdata/bbs
四、数据测试
新建文件夹、写数据
五、配置客户端开机自动挂载nfs共享目录
[root@localhost bbs]# chmod +x /etc/rc.d/rc.local #centos7要给rc.local赋予可执行的权限后才能生效。
[root@localhost bbs]# ll /etc/rc.local
lrwxrwxrwx. 1 root root 13 7月 27 16:17 /etc/rc.local -> rc.d/rc.local
追加加一行mount命令:
[root@localhost ~]# echo "mount -t nfs -o nosuid,noexec,nodev,rw 192.168.1.214:/nfsdata/bbs /nfsdata/bbs" >> /etc/rc.local
六、卸载挂载点
<1>正常卸载
#umount /local/dir 正常的卸载命令来卸载。
<2>umoutn提示busy错误
如何卸载nfs挂载点通过umount /local/dir来进行卸载。如果本地中有用户还在这个挂载点中,那么会提示这个挂载点繁忙busy。我们需要先让本地退出这个挂载点,然后再重新进行卸载。而如果有其他用户在使用,同样也是需要用户退出之后这个挂载目录才能进行卸载。
或者进行强制卸载:umount –lf /local/dir 来进行强制卸载。
七、客户端mount挂载优化
八、zabbix监控nfs
服务端:
nfs主进程是否存在?
rpcbind主进程是否存在?
客户端:
rpcbind主进程是否存在?
挂载的服务端目录是否存在?
【安全问题】因为使用的是其他运营商的云服务器,如果配置了IP端,其他人使用这个运营商的服务器刚好是这个IP段,别人也可以mount 这个目录,不安全。
思路:
将IP段换成主机名或一个固定域名,服务端使用绑定host、dns域名解析我们自己租用的服务器IP即可。
1.rpc监听端口固定是111,监听的IP段需要限制
2.指定域名的主机: 主机名
nfs配置文件:/nfsdata/bbs/ 主机名(rw,sync,all_squash,anonuid=65534,anongid=65534)
在/etc/hosts中绑定该域名的IP:
clientIp1 主机名
clientIp2 主机名
clientIp3 主机名
一个域名绑定多个IP,host.conf中需要multi on
=====》〉》
服务端:
vim /etc/exports