NFS原理及配置
- NFS原理及配置
- NFC定义
- NFC工作原理
- 在Linux中NFS配置
- NFS服务端搭建
- NFS客户端配置
NFS原理及配置
NFC定义
NFS是基于UDP/IP协议的应用,其实现主要是采用远程过程调用RPC机制,RPC提供了一组与机器、操作系统以及低层传送协议无关的存取远程文件的操作。RPC采用了XDR的支持。XDR是一种与机器无关的数据描述编码的协议,他以独立与任意机器体系结构的格式对网上传送的数据进行编码和解码,支持在异构系统之间数据的传送。
NFC工作原理
NFS(Network File System,网络文件系统)是当前主流异构平台共享文件系统之一。主要应用在UNIX环境下。最早是由Sun Microsystems开发,现在能够支持在不同类型的系统之间通过网络进行文件共享,广泛应用在FreeBSD、SCO、Solaris等异构操作系统平台,允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,使得每个计算机的节点能够像使用本地资源一样方便地使用网上资源。换言之,NFS可用于不同类型计算机、操作系统、网络架构和传输协议运行环境中的网络文件远程访问和共享。
NFS的工作原理是使用客户端/服务器架构,由一个客户端程序和服务器程序组成。服务器程序向其他计算机提供对文件系统的访问,其过程称为输出。NFS客户端程序对共享文件系统进行访问时,把它们从NFS服务器中“输送”出来。文件通常以块为单位进行传输。其大小是8KB(虽然它可能会将操作分成更小尺寸的分片)。NFS传输协议用于服务器和客户机之间文件访问和共享的通信,从而使客户机远程地访问保存在存储设备上的数据。
在Linux中NFS配置
NFS 服务所需的安装包
安装 NFS 和 RPC 「服务端、客户端都安装」
[root@backup ~]# rpm -qa nfs-utils rpcbind
[root@backup ~]# yum install nfs-utils rpcbind -y #nfs需要的安装包
[root@backup ~]# rpm -qa nfs-utils rpcbind
nfs-utils-1.2.3-64.el6.x86_64
rpcbind-0.2.0-11.el6_7.x86_64
NFS 版本查看
nfsstat -s #服务端版本查看
nfsstat -c #客户端版本查看
NFS服务端搭建
配置exports
[root@nfs01 ~]# mkdir /data
[root@nfs01 ~]# ll -d /data/
drwxr-xr-x. 3 root root 4096 Apr 11 09:49 /data/
[root@nfs01 ~]# chown -R nfsnobody.nfsnobody /data/
[root@nfs01 ~]# ll -d /data/
drwxr-xr-x. 3 nfsnobody nfsnobody 4096 Apr 11 09:49 /data/
[root@nfs01 ~]# cat /etc/exports
# share /data for web created by zhangliang at 2016-05-21
/data 172.16.1.0/24(rw,sync)
#172.16.1.0/24(rw,sync) 没有空格
#/data 172.16.1.0/24(rw,sync,root_squash,all_squash,anonuid=XXXX,anongid=XXXX) # 推荐配置
启动rpcbind服务
[root@nginx_cdn ~]# systemctl start rpcbind.service
[root@nginx_cdn ~]# netstat -anp | grep 'rpc'
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1930/rpcbind
tcp6 0 0 :::111 :::* LISTEN 1930/rpcbind
udp 0 0 0.0.0.0:832 0.0.0.0:* 1930/rpcbind
udp 0 0 0.0.0.0:111 0.0.0.0:* 1930/rpcbind
udp6 0 0 :::832 :::* 1930/rpcbind
udp6 0 0 :::111 :::* 1930/rpcbind
unix 2 [ ACC ] STREAM LISTENING 17999 1/systemd /var/run/rpcbind.sock
[root@nginx_cdn ~]# 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
[root@nginx_cdn ~]# systemctl start nfs.service
[root@nginx_cdn ~]# 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 44741 status
100024 1 tcp 23203 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 48638 nlockmgr
100021 3 udp 48638 nlockmgr
100021 4 udp 48638 nlockmgr
100021 1 tcp 16146 nlockmgr
100021 3 tcp 16146 nlockmgr
100021 4 tcp 16146 nlockmgr
加入开始自启动
[root@nginx_cdn ~]# systemctl enable rpcbind.service
[root@nginx_cdn ~]# systemctl enable nfs.service
查看具体状态情况
[root@nginx_cdn ~]# systemctl status rpcbind.service
● rpcbind.service - RPC bind service
Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
………………
[root@nginx_cdn ~]# systemctl status nfs.service
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
………………
查看有哪些参数生效
[root@nfs01 ~]# cat /var/lib/nfs/etab
/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 ~]# showmount -e 172.16.1.31 # 其中 172.16.1.31 为 NFS 服务端IP
Export list for 172.16.1.31:
/data 172.16.1.0/24
NFS客户端配置
启动rpcbind服务
[root@nginx_proxy01 ~]# systemctl start rpcbind.service
检查共享信息
[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
NFS挂载
在2台机器都挂载 NFS,好用于后面的测试。
[root@web01 ~]# mount -t nfs 172.16.1.31:/data /mnt
查看挂载信息
[root@web01 ~]# df -h #有时可能会被卡主
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 1.5G 6.9G 18% /
tmpfs 495M 0 495M 0% /dev/shm
/dev/sda1 190M 40M 141M 23% /boot
172.16.1.31:/data 8.8G 1.5G 6.9G 18% /mnt
测试
在客户端和服务端之间测试「2个客户端,1个服务端」
1、任意客户端创建文件夹或创建文件并且输入数据,在服务端是否可以查看;
2、服务端创建文件夹或创建文件并且输入数据,在任意客户端是否可以查看;
3、在客户端A 删除客户端B 创建的文件
4、在客户端B 删除客户端A 创建的文件
加入开机自启动
如果是 CentOS 7 环境,那么必须保证 /etc/rc.d/rc.local 文件具有可执行权限,否则该脚本不会执行也不会生效。
[root@web01 mnt]$ ll /etc/rc.local
lrwxrwxrwx. 1 root root 13 Nov 14 2018 /etc/rc.local -> rc.d/rc.local
[root@web01 mnt]# tail -3 /etc/rc.local
# mount nfs
mount -t nfs 172.16.1.31:/data /mnt