一.介绍
1.1NFS概念描述
什么是NFS?NFS是network file system 的缩写,它的主要功能是通过
网络让不同的主机系统之间可以彼此共享文件或目录,NFS客户端(一般为应用服务器)
可以通过挂载(mount)的方式将NFS服务器端的数据文件目录挂载到NFS客户端本地
系统中(某一个挂载点),从NFS客户端的机器本地上看,NFS服务器端共享的
目录就好像是客户端自己的磁盘分区或者目录一样,而实际上是远端的服务器目录。
|
1.2什么是RPC(remote procedure call)
因为NFS支持的功能相当多,而不同的功能都会使用不同的程序来启动,每启动
一个功能就会启动一些端口来传输数据,因此,NFS的功能所对应的端口无法固定
而是随机取用一些未被使用的端口来座位传输之用。
因为端口不固定,这样一来就会造成NFS客户端与NFS服务端的通讯障碍,因为
NFS客户端必须要知道NFS服务端的数据传输端口才能进行通信交互数据。
要解决上面问题,就需要远程过程调用RPC服务来帮忙,NFS的RPC服务最主要的
的功能就是记录每个NFS功能所对应的端口号,并且在NFS客户端请求时将该
端口和功能对应的信息传递给请求数据的NFS客户端,从而可以确保客户端可以
连接到正确的NFS端口上去,达到实现数据传输交互数据目的,RPC就相当于NFS服务端
和客户端的一个中介。
|
1.3NFS挂载原理

如上图,当我们在nfs服务器设置好一个共享目录/liang后,其他的有权访问NFS服务器的NFS客户端就可以将这个目录挂载到本地。并且能够看到服务端/data的所有数据。因为挂载在本地的/data1目录,其实就是服务器端的/liang目录。如果服务器端配置的客户端只读,那么客户端就只能够只读。如果配置读写,客户端就能够进行读写。挂载后,NFS客户端查看磁盘信息命令:#df –h
|
1.4NFS工作流程(图片来源于网络)

1)首先服务器端启动RPC服务,并开启111端口
2)启动NFS服务,并向RPC注册端口信息
3)客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口
4)服务端的RPC(portmap)服务反馈NFS端口信息给客户端。
5)客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。
|
二.NFS服务部署
1.两台虚拟机
服务端
主机名:nfs-server
ip:10.0.0.129
系统版本:CentOS release 6.5 (Final) 客户端
主机名:nfs-client
ip: 10.0.0.130
系统版本:CentOS release 6.5 (Final)
|
2.服务端操作
2.1安装所需要软件包
[root@nfs-server ~]# yum install nfs-utils rpcbind -y 2.2启动rpc
[root@nfs-server ~]# /etc/init.d/rpcbind start
Starting rpcbind: [ OK ] 2.3查看本地的rpcinfo(现在没有NFS注册的信息)
[root@nfs-server ~]# 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 2.4启动nfs服务
[root@nfs-server ~]# /etc/init.d/nfs start
Starting NFS services: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
Starting RPC idmapd: [ OK ]
[root@nfs-server ~]# 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
100005 1 udp 33728 mountd
100005 1 tcp 54901 mountd
100005 2 udp 41686 mountd
100005 2 tcp 39535 mountd
100005 3 udp 33584 mountd
100005 3 tcp 33208 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 56135 nlockmgr
100021 3 udp 56135 nlockmgr
100021 4 udp 56135 nlockmgr
100021 1 tcp 50291 nlockmgr
100021 3 tcp 50291 nlockmgr
100021 4 tcp 50291 nlockmgr 2.5设置开启自动启动
[root@nfs-server ~]# chkconfig nfs on
[root@nfs-server ~]# chkconfig rpcbind on 2.6创建共享目录
[root@nfs-server ~]# mkdir /liang
[root@nfs-server ~]# chown nfsnobody:nfsnobody /liang (或者chmod o=rwx /liang) 2.7编辑配置文件/etc/exports
[root@nfs-server ~]# cat /etc/exports
#shared liang
/liang 10.0.0.0/24(rw,sync)
=============================== /liang 共享的目录
10.0.0.0/24 允许访问的网段(可以是一个ip)
rw 允许读写,ro只读
sync 写入到磁盘。 2.8平滑重启nfs服务
[root@nfs-server ~]# /etc/init.d/nfs reload 2.9关闭防火墙,验证
[root@nfs-server ~]# /etc/init.d/iptables stop
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
[root@nfs-server ~]# showmount -e localhost
Export list for 10.0.0.129:
/liang 10.0.0.0/24
|
3.客户端操作
1.安装所需软件包
[root@nfs-client ~]# yum install nfs-utils rpcbind -y 2.启动rpcbind(nfs不需要启动)
[root@nfs-client ~]# /etc/init.d/rpcbind start
Starting rpcbind: [ OK ]
[root@nfs-client ~]# chkconfig rpcbind on 3.验证
[root@nfs-client ~]# showmount -e 10.0.0.129
Export list for 10.0.0.129:
/liang 10.0.0.0/24 4.创建目录,挂载
[root@nfs-client ~]# mkdir /data
[root@nfs-client ~]# mount -t nfs 10.0.0.129:/liang /data
[root@nfs-client ~]# df -h|tail -1
10.0.0.129:/liang 8.4G 727M 7.3G 9% /
[root@nfs-client ~]# cd /data
[root@nfs-client data]# touch {a..d}
[root@nfs-client data]# ll
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Jul 22 09:12 a
-rw-r--r-- 1 nfsnobody nfsnobody 0 Jul 22 09:12 b
-rw-r--r-- 1 nfsnobody nfsnobody 0 Jul 22 09:12 c
-rw-r--r-- 1 nfsnobody nfsnobody 0 Jul 22 09:12 d
[root@nfs-server ~]# ll /liang/
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Jul 22 09:12 a
-rw-r--r-- 1 nfsnobody nfsnobody 0 Jul 22 09:12 b
-rw-r--r-- 1 nfsnobody nfsnobody 0 Jul 22 09:12 c
-rw-r--r-- 1 nfsnobody nfsnobody 0 Jul 22 09:12 d
|
4.优化
4.1安全优化
nosuid 不允许使用suid操作
noexec 不允许执行二进制程序 4.2性能优化
rsize=131072 读取文件的每秒的大小
wsize=131072 写入文件的每秒的大小
noatime 不更新文件的时间戳
nodiratime 不更新目录的时间戳 4.3内核优化
net.core.wmem_default = 8388608#(发送套接字缓冲区大小的缺省值)
net.core.wmem_max = 166777216#(发送套接字缓冲区大小的最大值)
net.core.rmem_default = 8388608#(接受套接字缓冲区大小的缺省值)
net.core.rmem_max = 166777216#(发送套接字缓冲区大小的最大值) |