一.介绍
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挂载原理
![](https://i-blog.csdnimg.cn/blog_migrate/b16d8a6f5cacb4d654951016cacc323a.png) 如上图,当我们在nfs服务器设置好一个共享目录/liang后,其他的有权访问NFS服务器的NFS客户端就可以将这个目录挂载到本地。并且能够看到服务端/data的所有数据。因为挂载在本地的/data1目录,其实就是服务器端的/liang目录。如果服务器端配置的客户端只读,那么客户端就只能够只读。如果配置读写,客户端就能够进行读写。挂载后,NFS客户端查看磁盘信息命令:#df –h |
1.4NFS工作流程(图片来源于网络)
![](https://i-blog.csdnimg.cn/blog_migrate/a9584d0617c5c9cdcaeadb7e13524ffd.png) 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#(发送套接字缓冲区大小的最大值) |