一、概念介绍
NFS 是Network File System的缩写,即网络文件系统。一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布。功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法。

NFS 的基本原则是“容许不同的客户端及服务端通过一组RPC分享相同的文件系统”,它是独立于操作系统,容许不同硬件及操作系统的系统共同进行文件的分享。

NFS在文件传送或信息传送过程中依赖于RPC协议。RPC,远程过程调用 (Remote Procedure Call) 是能使客户端执行其他系统中程序的一种机制。NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,这是因为NFS使用了一些其它的传输协议。而这些传输协议用到这个RPC功能的。可以说NFS本身就是使用RPC的一个程序。或者说NFS也是一个RPC SERVER。所以只要用到NFS的地方都要启动RPC服务,不论是NFS SERVER或者NFS CLIENT。这样SERVER和CLIENT才能通过RPC来实现PROGRAM PORT的对应。可以这么理解RPC和NFS的关系:NFS是一个文件系统,而RPC是负责负责信息的传输。

NFS服务端、RPC协议、客户端三者可以理解为房源、中介、租客之间的关系:

二、部署说明
1)软件安装
NFS只需要安装下面两个软件,在通常情况下是作为系统默认软件安装的
rpcbind:centos 下面RPC主程序 (centos5系统之前该软件叫portmap)
nfs-utils:NFS服务主程序,包括NFS的基本命令和监控程序

[root@dev-huanqiu ~]# yum install rpcbind nfs-utils

2)环境部署说明
将本机(192.168.1.6)的/usr/local/nginx/html/ssapp.test/weiloushu/video目录共享给192.168.1.19的/data/video
将本机(192.168.1.6)的/usr/local/nginx/html/ssapp.beta/weiloushu/video目录共享给192.168.1.16的/data/video

服务端的操作:

首先关闭nfs服务端的防火墙,这个很关键,否则客户机挂载nfs时会失败!(或者不关闭防火墙,需要在iptables中开放nfs相关端口)
[root@dev-huanqiu ~]# /etc/init.d/iptables stop

接着进行nfs共享设置
[root@dev-huanqiu ~]# vim /etc/exports
/usr/local/nginx/html/ssapp.test/weiloushu/video 192.168.1.19(rw,sync,no_root_squash)
/usr/local/nginx/html/ssapp.beta/weiloushu/video 192.168.1.16(rw,sync,no_root_squash)

配置说明:
rw:可读写的权限;
ro: 只读的权限;
no_root_squash:客户机用root访问nfs共享文件夹时,保持root权限,root_squash 是把root映射成nobody,no_all_squash 不让所有用户保持在挂载目录中的权限。
sync: 资料同步写入存储器中。
async:资料会先暂时存放在内存中,不会直接写入硬盘。

其中:
客户端常用的指定方式
   指定ip地址的主机:192.168.1.19,如果是一个目录共享给多台客户机,那么就配置多行
   指定子网中的所有主机:192.168.0.0/24
   指定域名的主机:a.liusuping.com
   指定域中的所有主机:*.liusuping.com
   所有主机:*

访问权限选项
   设置输出目录只读:ro
   设置输出目录读写:rw

用户映射选项
   all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组,通常也就是nobody(nfsnobody);
   no_all_squash:与all_squash取反(默认设置);
   root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置);
   no_root_squash:与rootsquash取反;
   anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);比如(rw,sync,all_squash,anonuid=65534,anongid=65534)
   anongid=xxx:将远程访问的所有用户组都映射为匿名用 户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);

其它选项
   secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
   insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
   sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
   async:将数据先保存在内存缓冲区中,必要时才写入磁盘;
   wdelay:检查是否有相关的写操作,如果有则将这些写操作 一起执行,这样可以提高效率(默认设置);
   no_wdelay:若有写操作则立即执行,应与sync配合使用;
   subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
   no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;

可以使用showmount命令查看远程客户机上的共享目录情况,这个命令需要root权限。
它有三个选项,记住这三个选项代表的含义:
showmount –a IP  :显示指定NFS服务器的客户端以及服务器端在客户端的挂载点
showmount –d IP  :显示指定NFS服务器在客户端的挂载点
showmount –e IP  :显示指定NFS服务器上的共享目录列表(或者叫输出列表)

[root@dev-huanqiu ~]# showmount -e
Export list for ctl:
/usr/local/nginx/html/ssapp.beta/weiloushu/video 192.168.1.16
/usr/local/nginx/html/ssapp.test/weiloushu/video 192.168.1.19

查看系统加载的配置
[root@dev-huanqiu ~]# cat /var/lib/nfs/etab
/usr/local/nginx/html/ssapp.beta/weiloushu/video 192.168.1.16(rw,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534,sec=sys,rw,no_root_squash,no_all_squash)
/usr/local/nginx/html/ssapp.test/weiloushu/video 192.168.1.19(rw,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534,sec=sys,rw,no_root_squash,no_all_squash)

开启nfs的RCP服务和查看rpcbind服务端口
[root@dev-huanqiu ~]# /etc/init.d/rpcbind start
Starting rpcbind: [ OK ]
[root@dev-huanqiu ~]# netstat -antlp|grep rpcbind
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 25416/rpcbind
tcp 0 0 :::111 :::* LISTEN 25416/rpcbind

开启nfs服务
[root@dev-huanqiu ~]# /etc/init.d/nfs start
Starting NFS services: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
Starting RPC idmapd: [ OK ]

设置两个服务开机自启动
[root@dev-huanqiu ~]# chkconfig rpcbind on
[root@dev-huanqiu ~]# chkconfig nfs on

客户端的操作(这里列举其中一台客户机操作,另外一台客户端操作类似):
客户端只需要安装rpcbind程序,并确认服务正常
[root@dev-new-test ~]# /etc/init.d/rpcbind start
正在启动 rpcbind: [确定]
[root@dev-new-test ~]# /etc/init.d/rpcbind status
rpcbind (pid 28904) 正在运行...

挂载nfs服务端的共享目录
[root@dev-new-test ~]# mount -t nfs 192.168.1.6:/usr/local/nginx/html/ssapp.test/weiloushu/video /data/video/

查看,发现已经共享成功了
[root@dev-new-test ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 50G 12G 36G 26% /
tmpfs 32G 72K 32G 1% /dev/shm
/dev/sda1 485M 39M 421M 9% /boot
/dev/mapper/VolGroup-lv_home 844G 69G 733G 9% /home
192.168.1.6:/usr/local/nginx/html/ssapp.test/weiloushu/video 97G 64G 28G 70% /data/video

[root@dev-new-test ~]# showmount -a 192.168.1.6
All mount points on 192.168.1.6:

卸载(注意不能切换到挂载目录里状态下卸载,否则会报错:umount.nfs:...: device is busy)
[root@dev-new-test ~]# umount /data/video
[root@dev-new-test ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 50G 12G 36G 26% /
tmpfs 32G 72K 32G 1% /dev/shm
/dev/sda1 485M 39M 421M 9% /boot
/dev/mapper/VolGroup-lv_home 844G 69G 733G 9% /home

如果nfs在umount卸载时报错如下:
[root@dev-new-test ~]# umount /data/video
/data/video was not found in /proc/mounts

解决:umount卸载时使用-l参数
[root@dev-new-test ~]# umount -l /data/video
umount.nfs: /data/video: not mounted
[root@dev-new-test ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 50G 12G 36G 26% /
tmpfs 32G 72K 32G 1% /dev/shm
/dev/sda1 485M 39M 421M 9% /boot
/dev/mapper/VolGroup-lv_home 844G 69G 733G 9% /home

------------------------------------------------------------------------------------------------------------------------------
补充一点:nfs服务端的防火墙问题

上面记录中,已经提前在nfs的服务端将iptables防火墙关闭了。
如果不关闭服务端的iptables防火墙,那么要想让客户端成功挂载上nfs,就需要在服务端的iptables里开通nfs相关端口.

操作记录:(centos6x系统下nfs服务照此配置均可,已经过实验)
portmapp在nfs服务启动的时候给每一个NFS服务分配了一个动态的端口,如这些服务MOUNTD_PORT、 STATD_PORT、 LOCKD_TCPPORT、 LOCKD_UDPPORT。
由于这些端口是动态随机分配的,所以导致在iptables防火墙无法设置。
那么如何才能让nfs client在使用iptables时可以正常使用NFS服务呢?
办法就是指定将上述服务的运行端口,然后在iptables中发布。

相关的配置文件为 /etc/sysconfig/nfs 。
要使用iptables来控制nfs,需静态指定端口号让portmap调用。
nfs服务启用时会检查/etc/sysconfig/nfs文件。
在此文件下来指定mountd,statd,lockd,rquotad端口号,修改默认的端口号,这里我用的不是默认的端口号,而是自定义的端口号。如下:
[root@dev-huanqiu ~]# cat /etc/sysconfig/nfs|grep -v "^#"
RQUOTAD_PORT=10001
LOCKD_TCPPORT=10002
LOCKD_UDPPORT=10002
MOUNTD_PORT=10003
STATD_PORT=10004

重启nfs服务
[root@dev-huanqiu ~]# /etc/init.d/nfs restart
Shutting down NFS daemon: [ OK ]
Shutting down NFS mountd: [ OK ]
Shutting down NFS services: [ OK ]
Shutting down RPC idmapd: [ OK ]
Starting NFS services: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
Starting RPC idmapd: [ OK ]

再次通过下面命令查看nfs使用的端口,其中2049是nfs服务的固定端口
[root@dev-huanqiu ~]# 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 10001 rquotad
100011 2 udp 10001 rquotad
100011 1 tcp 10001 rquotad
100011 2 tcp 10001 rquotad
100005 1 udp 10003 mountd
100005 1 tcp 10003 mountd
100005 2 udp 10003 mountd
100005 2 tcp 10003 mountd
100005 3 udp 10003 mountd
100005 3 tcp 10003 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
100024 1 udp 10004 status
100024 1 tcp 10004 status
100021 1 udp 10002 nlockmgr
100021 3 udp 10002 nlockmgr
100021 4 udp 10002 nlockmgr
100021 1 tcp 10002 nlockmgr
100021 3 tcp 10002 nlockmgr
100021 4 tcp 10002 nlockmgr

端口111和2049分别是rpcbind和nfs服务端口
将上面命令结果中的端口分别在iptables里开通,注意tcp和udp均要开通!
[root@dev-huanqiu ~]# vim /etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -s 192.168.1.19/24 -p tcp --dport 111 -j ACCEPT
-A INPUT -s 192.168.1.19/24 -p udp --dport 111 -j ACCEPT
-A INPUT -s 192.168.1.19/24 -p tcp --dport 2049 -j ACCEPT
-A INPUT -s 192.168.1.19/24 -p udp --dport 2049 -j ACCEPT
-A INPUT -s 192.168.1.19/24 -p tcp --dport 10001:10004 -j ACCEPT
-A INPUT -s 192.168.1.19/24 -p udp --dport 10001:10004 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

重启防火墙服务
[root@dev-huanqiu ~]# /etc/init.d/iptables restart
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
iptables: Applying firewall rules: [ OK ]

[root@ctl ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
ACCEPT tcp -- bogon/24 anywhere tcp dpt:nfs
ACCEPT udp -- bogon/24 anywhere udp dpt:nfs
ACCEPT tcp -- bogon/24 anywhere tcp dpts:scp-config:emcrmirccd
ACCEPT udp -- bogon/24 anywhere udp dpts:scp-config:10004
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

这样,如上设置后,nfs在开启iptables防火墙的情况下,也可以正常挂载使用了!

------------------------------------------------------------
如果客户端在nfs挂载时报权限错误,如下:
mount.nfs: access denied by server while mounting.....

则可能原因有以下几种:
1)防火墙原因
解决:关闭防火墙;如果防火墙开启,需要打开相应的端口,并对相关客户机开放;另确保/etc/hosts.allow和/etc/hosts.deny文件中有没有nfs相关规则。
2)nfs服务端挂载的目标目录权限
解决:尝试设置777权限
3)insecure标识功能关闭
解决:insecure标识如果端口号大于1024,则需要将insecure 选项加入到配置文件(/etc/exports)相关选项中mount客户端才能正常工作,默认情况下这个功能都是开启的!
如果系统要是默认禁止这个选项,那么客户端使用大于1024端口进行nfs挂载时就会报权限错误,则需要通过修改配置文件/etc/exports,加入insecure选项才能解决,如下:
/usr/local/nginx/html/ssapp.test/weiloushu/video 192.168.1.19(insecure,rw,sync,no_root_squash)

nfs服务部署记录的更多相关文章

  1. linux下syslog-ng日志集中管理服务部署记录

    syslog是Linux系统默认的日志守护进程,默认的syslog配置文件是/etc/syslog.conf文件.syslog守护进程是可配置的,它允许人们为每一种类型的系统信息精确地指定一个存放地点 ...

  2. NFS服务部署

      NFS介绍 NFS基本概述 NFS(Network File System)网络文件系统主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录.NFS系统和Windows网络共享.网络驱动器 ...

  3. docker swarm overlay stack 服务部署记录

    项目xxx(后端),xxx-ui前端(前后端分离的项目) 依赖mysql,elasticsearch.分别制作了四个镜像来做这件事.希望可以制作跨主机的部署,使用了swarm,以下是学习记录. 参考 ...

  4. Linux NFS 服务部署

    系统环境:Oracle Linux 5.7 服务端:192.168.1.111 客户端:192.168.1.171 一.服务端配置 二.客户端配置 一.服务端配置 1.依次启动portmap和nfs服 ...

  5. NFS网络共享服务部署

    10.3 NFS服务端部署环境准备 10.3.1 NFS服务部署服务器准备 服务器系统 角色 IP Centos6.7 x86_64 NFS服务器端(NFS-server) 192.168.1.14 ...

  6. Linux NFS存储服务部署

    什么是NFS 中文意思是网络文件系统,主要功能是通过网络(一般是局域网)让不同主机之间可以共享文件或目录 NFS属于本地文件存储服务 缺点1: 1 2 3 4 5 6 7 windows上无法使用   ...

  7. NFS服务基础

    NFS服务部署: (一)NFS环境准备: 操作系统 角色 IP地址 CentOS Linux release 7.3.1611 (Core) NFS服务端 192.168.152.138 CentOS ...

  8. NFS存储服务部署

    第1章 NFS介绍 1.1 NFS服务内容的概述 □ RPC服务知识概念介绍说明,以及RPC服务存在价值(必须理解掌握) □ NFS服务工作原理讲解(必须理解掌握) □ NFS共享文件系统使用原理讲解 ...

  9. NFS共享存储服务部署

    第1章 NFS介绍 1.1 NFS基本概述 NFS(Network File System)网络文件系统 主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录. NFS系统和Windows网络 ...

随机推荐

  1. iOS音频开发之`AudioStreamBasicDescription`

    这个类提供了对于音频文件的描述 An audio stream is a continuous series of data that represents a sound, such as a so ...

  2. 你真的了解UITextField吗?

    一:首先查看一下关于UITextField的定义 NS_CLASS_AVAILABLE_IOS(2_0) @interface UITextField : UIControl <UITextIn ...

  3. 功能源代码(扇形进度)及Delegate运用在开放事件中、UINavigationController的封装

    1:扇形进度视图及运用 首先先创建扇形的视图,传入进度值 #import <UIKit/UIKit.h> @interface LHProgressView : UIView @prope ...

  4. ubuntu下安装Apache + PHP + Mysql

    首次登录 在本地设备中打开终端,执行ssh命令,登陆服务器. ssh root@139.196.222.22 输入根用户密码,按回车确认. 升级软件 为了确保操作系统中的默认的软件安装了最新的更新和补 ...

  5. 让UILabel的文字顶部对齐

    参考资料 http://stackoverflow.com/questions/1054558/how-do-i-vertically-align-text-within-a-uilabel 方法一 ...

  6. Learn how to Use UIPageViewController in iOS

    下面学习内容来自国外的IOS学习网站:The AppGuruz: UIPageViewController in iOS  也许需要FQ哦 认真做一遍上面入门UIPageController的教程,然 ...

  7. Asp.net MVC验证哪些事(3)-- Remote验证及其改进(附源码)

    表单中的输入项,有些是固定的,不变的验证规则,比如字符长度,必填等.但有些是动态的,比如注册用户名是否存在这样的检查,这个需要访问服务器后台才能解决.这篇文章将会介绍MVC中如何使用[RemoteAt ...

  8. cocos2d之z轴位置示例

    1:设置资源本地z轴位置 2:调整位置示例 3:调整两个资源为同一父节点 4:ImageView 设置资源,此赋值方法第一个为资源路径

  9. 烂泥:学习mysql数据库主从同步复制原理

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 说明本篇文章部分转载自互联网. MySQL的Replication(英文为复制)是一个多MySQL数据库做主从同步的方案,特点是异步复制,广泛用在各种对 ...

  10. MySQL的Explain命令

    Explain命令是查看查询优化器如何决定执行查询的主要办法.   调用 EXPLAIN   要使用EXPLAIN,只需在查询中的SELECT关键字之前增加EXPLAIN.MySQL会在查询上设置一个 ...