NFS

NFS是什么?
网络文件系统
NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样
在这里插入图片描述

NFS使用什么端口
基本上NFS这个服务器的端口开在2049,但由于文件系统非常复杂。因此NFS还有其他的程序去启动额外的端口,这些额外的用来传输数据的端口是随机选择的,是小于1024的端口;既然是随机的那么客户端又是如何知道NFS服务器端到底使用的是哪个端口呢?这时就需要通过远程过程调用(Remote Procedure Call,RPC)协议来实现了!!

RPC与NFS如何通讯
RPC端口 111
  因为NFS支持的功能相当多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此NFS的功能对应的端口并不固定,客户端要知道NFS服务器端的相关端口才能建立连接进行数据传输,而RPC就是用来统一管理NFS端口的服务,并且统一对外的端口是111,RPC会记录NFS端口的信息,如此我们就能够通过RPC实现服务端和客户端沟通端口信息。PRC最主要的功能就是指定每个NFS功能所对应的端口,并且通知客户端,记客户端可以连接到正常端口上去。

那么RPC又是如何知道每个NFS功能的端口呢?

首先当NFS启动后,就会随机的使用一些端口,然后NFS就会向RPC去注册这些端口,RPC就会记录下这些端口,并且RPC会开启111端口,等待客户端RPC的请求,如果客户端有请求,那么服务器端的RPC就会将之前记录的NFS端口信息告知客户端。如此客户端就会获取NFS服务器端的端口信息,就会以实际端口进行数据的传输了。

提示:在启动NFS SERVER之前,首先要启动RPC服务(即portmap服务,下同)否则NFS SERVER就无法向RPC服务区注册,另外,如果RPC服务重新启动,原来已经注册好的NFS端口数据就会全部丢失。因此此时RPC服务管理的NFS程序也要重新启动以重新向RPC注册。特别注意:一般修改NFS配置文档后,是不需要重启NFS的,直接在命令执行/etc/init.d/nfs reload或exportfs –rv即可使修改的/etc/exports生效。portmap服务(5.5)rpcbind(6之后)
在这里插入图片描述

NFS Server端操作
安装NFS
yum -y install nfs-utils rpcbind

启动(记得一定要先启动rpcbind)
/etc/init.d/rpcbind start
/etc/init.d/nfs start

启动rpc后检查
[root@web01 ~]# 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 35420 status
100024 1 tcp 54131 status
100011 1 udp 875 rquotad
100011 2 udp 875 rquotad
100011 1 tcp 875 rquotad
100011 2 tcp 875 rquotad
100005 1 udp 56084 mountd
100005 1 tcp 55590 mountd
100005 2 udp 50500 mountd
100005 2 tcp 35736 mountd
100005 3 udp 40909 mountd
100005 3 tcp 42062 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 44003 nlockmgr
100021 3 udp 44003 nlockmgr
100021 4 udp 44003 nlockmgr
100021 1 tcp 52685 nlockmgr
100021 3 tcp 52685 nlockmgr
100021 4 tcp 52685 nlockmgr

配置NFS
检查启动成功后编辑NFS配置文件,配置允许访问的客户端和共享目录
NFS默认配置文件(默认为空文件)
/etc/exports

vim /etc/exports
/nfs 192.168.56.6(rw,async,root_squash,no_all_squash)
/etc/init.d/nfs reload
格式:NFS共享目录 NFS客户端地址1(参数1,参数2,参数3…) 客户端地址2(参数1,参数2,参数3…)
注:root_squash,no_all_squash可以不写,默认就包含这了个参数,主要是为了安全,只有拥有目录属主数组权限的用户才能对目录中文件进行操作,远程挂载的root用户也要降权.所以创建NFS共享目录的时候要指定目录属主属组.如共享目录属主属组的用户为www,NFS服务端和客户端必须同时拥有www用户且用户ID必须相同,在各服务器创建用户的时候可以useradd nfsuser -u 1006 指定相同用户.

NFS客户端地址1写法: * 所有网络 192.168.56.0/24 指定网段 192.168.56.6 指定单一地址 172.24.81.237 172.24.81.238 多IP地址之间用空格隔开172.24.81.237(rw,sync,root_squash) 172.24.81.238(rw,sync,root_squash) 每个IP后面跟上自己的权限

通过命令配置共享目录
[root@test nfs]# exportfs -o rw,all_squash 10.125.192.11:/nfs
注:通过命令添加的共享目录 在/etc/exports文件中查看不到,可以通过命令查看所有共享信息,重启nfs服务失效
[root@test nfs]# showmount -e localhost
Export list for localhost:
/nfsfile 10.125.192.0/24
/nfs 10.125.192.11

权限说明
rw 读写
ro 只读
sync 同步写入
async 异步写入
no_root_squash 如果是root用户访问,它对该目录具有root权限,应避免使用
root_squash 如果是root用户访问,则它的权限被降为匿名用户,他的uid gid通常被降为nfsnobody
no_all_squash 不要将普通用户身份进行转换
all_squash 不管用户已什么身份访问,它的权限都会被降为匿名用户,在多用户访问下这个参数很有用
anonuid 自定义uid权限

查看NFS配置参数
cat /var/lib/nfs/etab
在这里插入图片描述
编辑好配置文件之后,创建一个共享目录
mkdir /nfs
注意:nfs客户端在服务器端导出的目录,也有一定权限要求,不然挂载后会报没有权限,即使已经给了rw,安装nfs后会自动创建nfsnobody
chown -R www.www /nfs/

设置开机自启动
chkconfig nfs on
chkconfig rpcbind on

NFS SERVER端的防火墙控制
iptables -A INPUT -p tcp -s 10.125.192.0/24 --dport 111 -j ACCEPT
iptables -A INPUT -p udp -s 10.125.192.0/24 --dport 111 -j ACCEPT

NFS客户端操作
yum install -y nfs-utils rpcbind
如果不安装nfs-utils 客户端挂载时会报错:错误的文件系统类型,所以客户端需要安装nfs-utils
启动rpcbind
/etc/init.d/rpcbind start

查看NFS Server共享信息
showmount -e 192.168.56.5
Export list for 192.168.56.5:
/nfs 192.168.56.6

创建挂载点并挂载
mkdir /testnfs
mount 192.168.56.5:/nfs /testnfs/
默认挂载使用的nfsv4版本
nfsstat -m
/testnfs from 192.168.56.5:/nfs/
Flags: rw,relatime,vers=4,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.56.6,minorversion=0,local_lock=none,addr=192.168.56.5

检查挂载
df -TH
192.168.56.5:/nfs nfs 19G 8.4G 9.2G 48% /testnfs

测试读写
touch /testnfs/test
在服务端对应目录下查看是否创建成功

设置开机启动
chkconfig rpcbind on

测试读写速度
在客户端操作哦 多测几次取平均值
写 :
time dd if=/dev/zero of=/testnfs/tets bs=1M count=1024 oflag=direct
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 22.4746 s, 47.8 MB/s

real 0m22.555s
user 0m0.005s
sys 0m0.174s
我的环境是 两台VM虚拟机 所以网络传输速度这里没有办法考虑在内

读:
time dd if=/testnfs/tets of=/dev/null bs=1M iflag=direct
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 12.6105 s, 85.1 MB/s

real 0m12.616s
user 0m0.007s
sys 0m0.074s

性能优化
挂载参数优化
bg 后台挂载
nosuid 禁止 suid 操作和设定 sgid 位
noexec 不允许执行此文件系统上的二进制文件
noatime 不更新文件系统上 inode 访问记录
nodiratime 不更新文件系统上的目录 inode 访问记录
hard 如果server端没有响应,那么客户端一直尝试挂载
intr 可以中断不成功的挂载

mount -t nfs -o bg,nosuid,noexec,noatime,nodiratime,hard 192.168.56.5:/nfs/ /testnfs
经过测试,默认参数已经很优秀了,其他参数自己根据需求制定

系统优化
修改内核优化磁盘读写速度
cat >>/etc/sysctl.conf <<EOF

net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
EOF
sysctl -p

NFS客户端启动自动挂载
对于NFS共享目录,一般不要写到/etc/fstab里。因为在客户端主机重启时如果由于网络等原因连不上nfs server时就会导致客户端主机无法启动,一般通过把mount 10.125.192.5:/nfs /mnt 命令放到/etc/rc.local中,也可以在fstab文件中格式选项中,defaults,_netdev (_netdev参数表示延迟挂载,等网络启动后在挂载) 或者开机自启netfs服务 chkconfig netfs on

Centos7实现自动挂载方法
确保remote-fs.target服务开机自启
systemctl enable remote-fs.target

NFS磁盘监控工具nfsiostat
Sysstat家族包括一个名叫nfsiostat的实用程序,它和iostat有诸多类似之处,它允许你监控NFS文件系统上的读写情况,其用法也和iostat类似

nfsiostat
在这里插入图片描述
xxx.xxx.xxx.xxx:/data/ mounted on /data:是NFS服务器名,紧跟着的是NFS客户端上的挂在点。
op/s:每秒操作次数
prc bklog: 等待队列长度
ops/s :每秒发向文件系统的读操作次数
kB/s: 每秒字节数
kB/op: 向文件系统的操作字节数
retrans: 中断百分比
avg RTT: 平均延时单位毫秒
avg exe :平均执行单位毫秒

或者 使用 iostat -n
在这里插入图片描述
Filesystem:NFS文件系统的名字,前面是NFS服务器名,紧跟着的是NFS客户端上的挂在点。
rBlk_nor/s (rkB_nor/s, rMB_nor):应用程序使用read(2)系统调用读取的块数量(KB,MB),记住,1块=512字节。
wBlk_nor/s (wkB_nor/s, wMB_nor/s):应用程序使用write(2)系统调用写入的块数量(KB,MB)。
rBlk_dir/s (rkB_dir/s, rMB_dir/s):从文件读出,用0_DIRECT标记的块数量。
wBlk_dir/s (wkB_dir/s, wMB_dir/s):写入文件,用0_DIRECT标记的块数量。
rBlk_svr/s (rkB_svr/s, rMB_svr/s):NFS客户端通过NFS READ请求从NFS服务器读取的块数量。
wBlk_svr/s (wkB_svr/s, wMB_svr/s):NFS客户端通过NFS WRITE请求写入NFS服务器的块数量。
ops/s:每秒发向文件系统的操作数量。
rops/s:每秒发向文件系统的读操作数量。
wops/s:每秒发向文件系统的写操作数量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值