一、RPC与NFS:
Remote Procedure Call Protocol,远程过程调用协议。RPC可以实现客户端向远程主机请求服务(调用函数),而不需要了解底层协议(可以理解是一个框架)。RPC负责处理来自RPC客户端的请求,其监听在TCP/UDP的111端口上。
NFS是RPC协议的一种具体的实现,NFS全称为Network File System,网络文件系统。NFS可以实现类Unix主机之间文件系统的共享。NFS的底层依赖于RPC(可以将NFS理解为是一个RPC服务器),NFS的端口是不固定的,需要向RPC服务代注册。
当NFS客户端向NFS服务器端通信的时候,客户端将NFS报文用RPC协议封装并向RPC服务端发起请求(询问NFS服务器的端口),RPC服务接收用户的请求并告知其NFS所监听的端口。之后客户端通过RPC协议封装NFS的报文并发给NFS的端口(此端口是RPC监听的,所以仍然是连接的RPC),RPC将用户的请求转交给NFS程序,由NFS程序调用NFS模块对报文解析并执行操作。
NFS依赖于RPC通信,当启动NFS服务的时候,需要事先启动RPC服务。
NFS只能在类Unix系统之间提供文件系统的共享服务,原因在于NFS功能是由内核模块提供的,所以只能在内核提供了NFS功能的系统上使用。而大多数类Unix系统都具有该功能。
二、配置NFS服务:
1.配置NFS需要先启动rpc服务,rpc服务程序由rpcbind这个包提供。安装rpcbind
[root@localhost ~]# yum install -y rpcbind
[root@localhost ~]# rpm -ql rpcbind
/etc/rc.d/init.d/rpcbind #启动脚本
/sbin/rpcbind #rpcbind程序
......
2.启动rpcbind服务:
[root@localhost ~]# service rpcbind start
Starting rpcbind: [ OK ]
[root@localhost ~]# ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 :::111 :::*
LISTEN 0 128 *:111 *:*
3.安装NFS相关程序并启动,NFS程序由nfs-utils提供:
[root@localhost ~]# yum install -y nfs-utils
[root@localhost ~]# rpm -ql nfs-utils
/etc/nfsmount.conf #挂载NFS配置
/etc/rc.d/init.d/nfs #nfs服务脚本,负责处理请求
/etc/rc.d/init.d/nfslock #nfs锁服务
/etc/rc.d/init.d/rpcgssd #rpcgssd
/etc/rc.d/init.d/rpcidmapd #rpc的ID映射服务
/etc/rc.d/init.d/rpcsvcgssd #rpcsvcgssd
....
[root@localhost ~]# service nfs start
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
Starting RPC idmapd: [ OK ]
NFS的四个主要服务:
quotas:限额设置
mountd:挂载程序,等待用户使用挂载申请,并验证客户来源
daemon:NFS的主程序
idmapd:负责NFS服务的id映射
4./etc/exports导出文件:
NFS共享文件系统使用/etc/exports文件导出,其格式:
/Dire(FileSystem) 允许的范围(属性)
#####各分支格式####
范围格式:
host:单一主机地址,例如localhost、192.168.1.1
域匹配:例如*.magedu.com
网络地址:192.168.10.0/24、192.168.10.0/255.255.255.255
导出属性:
rw:读写权限
ro:读权限
async:异步写入
sync:同步写入;默认项
nohide:允许递归挂载,就是NFS的/shared目录中的a目录挂载了其他的NFS目录,当其他主机挂载/shared目录的时候,允许这个主机访问/shared/a目录
root_squash:压缩root用户,如果用户使用的root用户将NFS挂载在本地的,则把root映射为来宾用户;此选项为默认选项
no_root_squash:不压缩root用户。
all_squash:将所有用户映射为来宾用户
anonuid/anongid:设置来宾用户/组的ID,默认是nobody用户。由rpcidmapd映射。
5.配置/etc/exports文件:
[root@localhost ~]# vim /etc/exports
/shared 10.10.10.0/24(rw,no_root_squash,async)
共享/shared这个目录,安全起见,建议将分区挂载到/shared上,我这里是实验环境,就不做此操作了。
6.导出命令:
导出配置使用exportfs命令:
exportfs [arg]
-a:处理/etc/exports文件中定义的所有项
-r:重新导出,一般结合a参数
-u:取消导出,一般结合a参数
[root@localhost ~]# exportfs -ra #重新导出所有/etc/exports文件中定义的项
7.查看命令:
查看使用showmount命令:
showmount [options] [host]
-e [host]:查看指定NFS服务器共享的文件系统
-d:只显示客户端挂载的文件系统
-a:以 HostName :Directory 格式显示所有客户端挂载信息
[root@localhost ~]# showmount -e localhost #查看本机共享的文件系统
Export list for localhost:
/shared 10.10.10.0/24 #共享/shared这个目录,仅允许10.10.10.0/24这个网段挂载使用
[root@localhost ~]#
8.客户端测试挂载:
[root@client ~]# mount -t nfs 10.10.10.11:/shared /mnt/nfs
[root@client ~]# mount
/dev/mapper/VolGroup-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
/dev/mapper/VolGroup-lv_home on /home type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)
10.10.10.11:/shared on /mnt/nfs type nfs (rw,vers=4,addr=10.10.10.11,clientaddr=10.10.10.11)
可以看到已经挂载了,可以使用showmount在服务器上查看一下:
在客户端的/mnt/nfs中写入一个b文件,并查看服务器端的/shared目录:
客户端写入:
[root@client nfs]# cp /etc/fstab /mnt/nfs
[root@client nfs]# ls
/etc/fstab
[root@client nfs]
服务器端查看:
[root@localhost ~]# ls /shared/
fstab
[root@localhost ~]# cat /shared/fstab
#
# /etc/fstab
# Created by anaconda on Sat Dec 5 11:32:13 2015
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/VolGroup-lv_root / ext4 defaults 1 1
UUID=1a04e551-c2f2-4d1d-8d9a-948e2a2d4be6 /boot ext4 defaults 1 2
/dev/mapper/VolGroup-lv_home /home ext4 defaults 1 2
/dev/mapper/VolGroup-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
[root@localhost ~]#
9.NFS的启动配置
NFS启动时端口不固定,带来一些麻烦,可以使用启动脚本的配置文件(/etc/sysconfig/nfs)。
10.RPC服务管理查看:
可以使用rpcinfo -p命令,显示所有基于rpc的服务:
[root@localhost ~]# rpcinfo -p
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
100011 1 udp 875 rquotad
100011 2 udp 875 rquotad
100011 1 tcp 875 rquotad
100011 2 tcp 875 rquotad
100005 1 udp 50980 mountd
100005 1 tcp 59447 mountd
100005 2 udp 46689 mountd
100005 2 tcp 34305 mountd
100005 3 udp 56518 mountd
100005 3 tcp 47681 mountd
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 2 tcp 2049 nfs_acl
100227 3 tcp 2049 nfs_acl
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 2 udp 2049 nfs_acl
100227 3 udp 2049 nfs_acl
100021 1 udp 41169 nlockmgr
100021 3 udp 41169 nlockmgr
100021 4 udp 41169 nlockmgr
100021 1 tcp 34117 nlockmgr
100021 3 tcp 34117 nlockmgr
100021 4 tcp 34117 nlockmgr
11.修改/etc/sysconfig/nfs配置文件,将rquotad进程的端口改为876(默认为875):
[root@client ~]# rpcinfo -p|grep rquotad
100011 1 udp 875 rquotad
100011 2 udp 875 rquotad
100011 1 tcp 875 rquotad
100011 2 tcp 875 rquotad
[root@client ~]# vim /etc/sysconfig/nfs
RQUOTAD_PORT=876
重启服务已经变为876端口了:
[root@localhost ~]# service nfs restart
Shutting down NFS daemon: [ OK ]
Shutting down NFS mountd: [ OK ]
Shutting down NFS quotas: [ OK ]
Shutting down NFS services: [ OK ]
Shutting down RPC idmapd: [ OK ]
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
Starting RPC idmapd: [ OK ]
[root@localhost ~]# rpcinfo -p|grep rquotad
100011 1 udp 876 rquotad
100011 2 udp 876 rquotad
100011 1 tcp 876 rquotad
100011 2 tcp 876 rquotad
[root@localhost ~]#
https://blog.51cto.com/minux/1726766