NFS是Network File System的缩写,即网络文件系统。客户端通过挂载的方式将NFS服务器端共享的数据目录挂载到本地目录下。
一、NFS的工作流程
1、由程序在NFS客户端发起存取文件的请求,客户端本地的RPC(rpcbind)服务会通过网络向NFS服务端的RPC的111端口发出文件存取功能的请求。 2、NFS服务端的RPC找到对应已注册的NFS端口,通知客户端RPC服务。 3、客户端获取正确的端口,并与NFS daemon联机存取数据。 4、存取数据成功后,返回前端访问程序,完成一次存取操作。
所以无论客户端 和服务端都需要用NFS,必须安装RPC服务。
NFS的RPC服务,在Centos5下名为portmap,Centos6下名称为rpcbind.
二、Centos7搭建NFS服务器实例
服务器系统 |
角色 |
IP |
CentOS7-150--server |
NFS服务器端 |
192.168.10.150 |
CentOS7-151 -client |
NFS客户端 |
192.168.10.151 |
共享CentOS7-150--server中/data/bbs目录,使192.168.10.1 IP段所有主机都可以访问
1、因是测试环境,先关闭selinux和firewalld
1)关闭selinux
[[email protected] ~]# sed -i s#SELINUX=enforcing#SELINUX=disabled#g /etc/selinux/config
2)关闭firewalld防火墙
查看firewalld防火墙开机自动状态
[[email protected] ~]# systemctl list-unit-files|grep enable|grep firewalld firewalld.service enabled
关闭firewalld防火墙开机自动启
[[email protected] ~]# systemctl disable firewalld.service Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
停止防火墙
[[email protected] ~]# systemctl stop firewalld.service
查看防火墙状态
[[email protected] ~]# systemctl status firewalld.service ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: man:firewalld(1)Mar 14 18:52:24 localhost.localdomain systemd[1]: Starting firewalld - dynamic .... Mar 14 18:52:24 localhost.localdomain systemd[1]: Started firewalld - dynamic f.... Mar 14 18:52:25 localhost.localdomain firewalld[573]: WARNING: ICMP type 'beyond... Mar 14 18:52:25 localhost.localdomain firewalld[573]: WARNING: beyond-scope: INV... Mar 14 18:52:25 localhost.localdomain firewalld[573]: WARNING: ICMP type 'failed... Mar 14 18:52:25 localhost.localdomain firewalld[573]: WARNING: failed-policy: IN... Mar 14 18:52:25 localhost.localdomain firewalld[573]: WARNING: ICMP type 'reject.. Mar 14 18:52:25 localhost.localdomain firewalld[573]: WARNING: reject-route: INV... Mar 14 11:21:43 service systemd[1]: Stopping firewalld - dynamic firewall daemon... Mar 14 11:21:43 service systemd[1]: Stopped firewalld - dynamic firewall daemon.Hint: Some lines were ellipsized, use -l to show in full.
2、服务端部署
1)检查系统版本及NFS服务nfs-utils 和rpcbind有没有安装
[[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [[email protected] ~]# rpm -qa nfs-utils rpcbind
2)安装NFS服务nfs-untils和rpcbind
[[email protected] ~]# yum install nfs-utils rpcbind -y
3)启动rpcbind服务(一定要先启动rpcbind服务再启动nfs服务)
查看rpcbind服务状态
[[email protected] ~]# systemctl status rpcbind.service
启动rpcbind服务
[[email protected] ~]# systemctl start rpcbind.service
查看rpc
[[email protected] ~]# lsof -i :111 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1 root 33u IPv6 25136 0t0 TCP *:sunrpc (LISTEN) systemd 1 root 38u IPv4 25137 0t0 TCP *:sunrpc (LISTEN) rpcbind 9227 rpc 4u IPv6 25136 0t0 TCP *:sunrpc (LISTEN) rpcbind 9227 rpc 5u IPv4 25137 0t0 TCP *:sunrpc (LISTEN) rpcbind 9227 rpc 8u IPv4 33497 0t0 UDP *:sunrpc rpcbind 9227 rpc 10u IPv6 33499 0t0 UDP *:sunrpc [[email protected] ~]# netstat -lntup|grep rpcbindudp 0 0 0.0.0.0:922 0.0.0.0:* 9227/rpcbind udp 0 0 0.0.0.0:111 0.0.0.0:* 9227/rpcbind udp6 0 0 :::922 :::* 9227/rpcbind udp6 0 0 :::111 :::* 9227/rpcbind
查看nfs服务向rpc注册的端 口信息
[[email protected] ~]# 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
把rpcbind另入开机自启动
[[email protected] ~]# systemctl enable rpcbind.service [[email protected] ~]# systemctl list-unit-files|grep enabled|grep rpcbind rpcbind.socket enabled
4)启动NFS服务并查看其状态
[[email protected] ~]# systemctl start nfs.service [[email protected] ~]# systemctl status nfs.service
把NFS服务加入开机自启动并查看其状态
[[email protected] ~]# systemctl enable nfs.service [[email protected] ~]# systemctl list-unit-files|grep nfs
5)授权nfsnobody于/data/bbs让客户端挂载后可写可读
[[email protected] /]# chown nfsnobody:nfsnobody /data/bbs
6)创建测试目录及文件
[[email protected] ~]# mkdir /data/bbs -p [[email protected] ~]# mkdir /data/bbs/test.txt
7)配置NFS服务的export文件
[[email protected] ~]# echo "/data/bbs/ 192.168.10.1/24(rw,sync,root_squash)">>/etc/exports
重新加载nfs配置文件
[[email protected] ~]# exportfs -rv exporting 192.168.10.1/24:/data/bbs
查看nfs服务器挂载情况
[[email protected] ~]# showmount -e localhost Export list for localhost: /data/bbs 192.168.10.1/24
ro:目录只读
rw:目录读写
sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性
async:将数据先保存在内存缓冲区中,必要时才写入磁盘
all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody)
no_all_squash:与all_squash取反(默认设置)
root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置)
no_root_squash:与rootsquash取反
anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx)
anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户
3、客户端配置
[[email protected] ~]# yum install nfs-utils rpcbind
把rpcbind加入开机自启动
[[email protected] bbs]# systemctl enable rpcbind.service
创建测试目录文件
[[email protected] ~]# mkdir /data/bbs/ -p
扫描NFS服务器的文件共享列表
[[email protected] bbs]# showmount -e 192.168.10.150 Export list for 192.168.10.150: /data/bbs 192.168.10.1/24
把服务器的目录挂载到客户端 的目录下
[[email protected] ~]# mount -t nfs 192.168.10.150:/data/bbs /data/bbs [[email protected] ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 18G 1004M 17G 6% / devtmpfs 479M 0 479M 0% /dev tmpfs 489M 0 489M 0% /dev/shm tmpfs 489M 6.8M 482M 2% /run tmpfs 489M 0 489M 0% /sys/fs/cgroup /dev/sda1 497M 112M 385M 23% /boot tmpfs 98M 0 98M 0% /run/user/0 192.168.10.150:/data/bbs 18G 1006M 17G 6% /data/bbs
三、数据测试
服务端
[[email protected] /]# cd /data/bbs [[email protected] bbs]# touch a.txt
客户端
[[email protected] ~]# ls /data/bbsa.txt
提示: 1.配置NFS服务端后,不用重启NFS服务,只要使用exportfs -rv
2.rpc主程序Centos5.8下为portmap 、Centos6.4和Centos7下为rpcbind
3.NFS共享目录不要授权于777权限,可以改所属主和组为nfsnobody,因为nfsnobody权限不是很大,也不能登陆
原文地址:http://blog.51cto.com/mrxiong2017/2087001