nfs工作模式参考

一、NFs是什么

NFS是Network File System的缩写,即网络文件系统。客户端通过挂载的方式将NFS服务器端共享的数据目录挂载到本地目录下。

nfs为什么需要RPC?
因为NFS支持的功能很多,不同功能会使用不同程序来启动,因此,NFS对应的功能所对应的端口无法固定。
端口不固定造成客户端与服务端之间的通信障碍,所以需要RPC来从中帮忙。
NFS启动时会随机取用若干端口,然后主动向RPC服务注册取用相关端口和功能信息,RPC使用固定端口111来监听来自NFS客户端的请求,
并将正确的NFS服务端口信息返回给客户端,这样客户端与服务端就可以进行数据传输了。

二、NFS的工作流程

1
2
3
4
1、由程序在NFS客户端发起存取文件的请求,客户端本地的RPC(rpcbind)服务会通过网络向NFS服务端的RPC的111端口发出文件存取功能的请求。
2、NFS服务端的RPC找到对应已注册的NFS端口,通知客户端RPC服务。
3、客户端获取正确的端口,并与NFS daemon联机存取数据。
4、存取数据成功后,返回前端访问程序,完成一次存取操作。

所以无论客户端,服务端,需要使用NFS,必须安装RPC服务。

三、NFS服务安装配置
nfs-utils、rpcbind
查看是否安装NFS

1
2
> rpm -qa nfs-utils rpcbind
> yum install nfs-utils rpcbind

四、启动rpcbind服务

启动rpc服务

1
> systemctl start/stop/status rpcbind.service

查看rpc端口,111是主端口,是客户端通信的端口

1
2
> lsof -i :111
> netstat -lntup|grep rpcbind

如果出现-bash未找到命令可执行下面命令

1
> yum install net-tools lsof

查看nfs服务向rpc注册的端口信息

1
> rpcinfo -p localhost

五、启动NFS服务

1
> systemctl start/stop/status nfs.service

再次查看rpc注册的端口信息

1
> rpcinfo -p localhost

六、NFS常见进程详解

1
> ps -ef|egrep "rpc|nfs"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
rpc      101101      1  0 17:11 ?        00:00:00 /sbin/rpcbind -w
rpcuser  101188      1  0 17:22 ?        00:00:00 /usr/sbin/rpc.statd --no-notify
root     101190      2  0 17:22 ?        00:00:00 [rpciod]
root     101200      1  0 17:22 ?        00:00:00 /usr/sbin/rpc.idmapd
root     101201      1  0 17:22 ?        00:00:00 /usr/sbin/rpc.mountd
root     101206      2  0 17:22 ?        00:00:00 [nfsd4]
root     101207      2  0 17:22 ?        00:00:00 [nfsd4_callbacks]
root     101213      2  0 17:22 ?        00:00:00 [nfsd]
root     101214      2  0 17:22 ?        00:00:00 [nfsd]
root     101215      2  0 17:22 ?        00:00:00 [nfsd]
root     101216      2  0 17:22 ?        00:00:00 [nfsd]
root     101217      2  0 17:22 ?        00:00:00 [nfsd]
root     101218      2  0 17:22 ?        00:00:00 [nfsd]
root     101219      2  0 17:22 ?        00:00:00 [nfsd]
root     101220      2  0 17:22 ?        00:00:00 [nfsd]
root     101243 100830  0 17:28 pts/0    00:00:00 grep -E --color=auto rpc|nfs

nfsd(rpc.nfsd)主进程,主要是管理客户端能否登入服务端,登入者ID判别。
mountd(rpc.mountd)管理NFS文件系统,登入者的权限管理
rpc.lockd(非必要)用来锁定文件,用于客户端同时写入
rpc.statd(非必要)检查文件一致性
rpc.idmapd 名字映射后台进程

七、配置NFS/RPCBIND开机自启动

1
2
> systemctl enable rpcbind.service
> systemctl enable nfs.service

八、NFS服务端配置文件

exports文件配置格式:

1
NFS共享的目录 NFS客户端地址1(参数1,参数2,...) 客户端地址2(参数1,参数2,...)

说明:
NFS共享目录:

1
要用绝对路径,可被nfsnobody读写。

NFS客户端地址:

1
2
3
4
5
指定IP: 192.168.0.1
指定子网所有主机: 192.168.0.0/24
指定域名的主机: test.com
指定域名所有主机: *.test.com
所有主机: *

参数:

1
2
3
4
5
6
7
8
9
10
ro:目录只读
rw:目录读写
sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性
async:将数据先保存在内存缓冲区中,必要时才写入磁盘
all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody)
no_all_squash:与all_squash取反(默认设置)
root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置)
no_root_squash:与rootsquash取反
anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx)
anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户

例如:

1
/data/tmp 192.168.1.0/24(rw,sync,all_squash)

创建需要共享的目录

1
2
mkdir -p /data/tmp
chown -R nfsnobody.nfsnobody /data/tmp

重新加载nfs配置

1
> exportfs -rv/systemctl reload nfs.service

查看nfs服务器挂载情况

1
> showmount -e localhost

九、客户端挂载测试/本地也可以

安装rpc

yum -y install nfs-utils rpcbind
systemctl start rpcbind.start

创建目录

1
2
mkdir -p /data/tmp2
> mount -t nfs 192.168.1.233:/data/tmp /data/tmp2

查看挂载

1
> df -h

在tmp下创建文件

1
> touch /data/tmp/1.txt

查看tmp2下是否有文件

1
> ls /data/tmp2

卸载挂载

1
> umount /data/tmp2

注意:

我们服务器和客户端都要安装nfs-utils、rpcbind
mount: wrong fs type, bad option, bad superblock on 125.64.41.244:/data/img,
missing codepage or helper program, or other error
(for several filesystems (e.g. nfs, cifs) you might
need a /sbin/mount.<type> helper program)
In some cases useful info is found in syslog - try
dmesg | tail or so
根据错误提示,查看/sbin/mount.<type>文件,果然发现没有/sbin/mount.nfs的文件,安装nfs-utils即可
还可以通过/etc/fstab自动加载,但是会存在问题,因为系统加载是先走/etc/fstab,后走网络,我们的nfs是基于网络的,方法是有的,这里不一一说了,建议将挂载写入到/etc/rc.local即可

10. 应用实践

服务器端

[root@Poppy ~]# yum install rpcbind nfs-utils
[root@joker ~]# cat /etc/exports
# share /nfsbackup by joker for poppy at today
/nfsbackup nfs客户端ip(rw,sync,all_squash,anonuid=1006,anongid=1006) # 开启本地账号映射,就是远程过来的用户相当于本地账号www
[root@joker ~]# id www
uid=1006(www) gid=1006(www) groups=1006(www)
[root@joker ~]# ls -ld /nfsbackup/
drwxr-xr-x 3 www www 4096 Jun 12 18:01 /nfsbackup/
[root@joker ~]# systemctl start nfs.service
[root@joker ~]# showmount -e 127.0.0.1
Export list for 127.0.0.1:
/nfsbackup nfs客户端ip

客户端

[root@Poppy ~]# yum install rpcbind nfs-utils
[root@Poppy ~]# systemctl start rpcbind.service
[root@Poppy ~]# mount -t nfs nfs服务器ip/nfsbackup /joker/
/joker/的目录最好是应用的软件有写的权限

nfs之脚气的更多相关文章

  1. nfs 笔记 2

    http://woxihuanpes.blog.163.com/blog/static/12423219820097139145238/ http://blog.csdn.net/willvc123/ ...

  2. linux NFS 配置步骤

    转载 http://woxihuanpes.blog.163.com/blog/static/12423219820097139145238/ NFS server可以看作是一个FILE SERVER ...

  3. ubuntu 14.04LTS 环境下配置NFS服务

    简言之,NFS(Network FileSystem,网络文件系统)用于在不同机器,不同操作系统之间通过网络互相分享各自的文件.NFS设计之初就是为了在不同的系统间使用,所以它的通讯协议设计与主机及操 ...

  4. 【Oracle 集群】11G RAC 知识图文详细教程之RAC在LINUX上使用NFS安装前准备(六)

    RAC在LINUX上使用NFS安装前准备(六) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇 ...

  5. Ubuntu搭建NFS

    NFS全称是Network File System,网络文件系统.它可以通过网络实现文件共享.其结构图大概是这样的: 在机器E上开启NFS服务,机器ABCD都挂载NFS,这样可以实现机器ABCD共享文 ...

  6. nfs挂载配置

    nfs挂载步骤 服务器端 1.安装nfs-utils rpcbind $sudo yum –y install nfs-utils rpcbind 2.文件开放出去配置/etc/exports 例子: ...

  7. NFS服务器搭建——可用于共享文件或负载均衡文件共享服务器使用

    一.软件包安装 yum -y install nfs-utils  rpcbind 二.服务器端配置共享目录 1. 在服务器上创建NFS共享目录:mkdir /usr/local/test 2. 设置 ...

  8. NFS网络共享服务部署

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

  9. Linux NFS服务器的安装与配置

    一.NFS服务简介 NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布.功能是通过网络让不同的机器.不同的操 ...

随机推荐

  1. Draggable拖动

    Draggable(拖动)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 EasyUI中Draggable(拖动)组件的使用方法,这个组件不依赖于其他组件. 1.加载方式 / ...

  2. DRF中五大扩展类及视图集的介绍

    五个扩展类 (1)ListModelMixin 列表视图扩展类,提供list(request, *args, **kwargs)方法快速实现列表视图,返回200状态码. 该Mixin的list方法会对 ...

  3. open()参数宏的意义 O_TRUNC

    C语言中一些基本函数 int _open(char *pathname,int access)为读或写打开一个文件, 按后按access来确定是读文件还是写文件,access值见下表 ┌──────┬ ...

  4. (转)Mahout Kmeans Clustering 学习

    一.Mahout命令使用 合成控制的数据集 synthetic_control.data 可以从 此处下载,总共由600行X60列double型的数据组成, 意思是有600个元组,每个元组是一个时间序 ...

  5. Shell 循环中实现展示进度百分比的脚本方法

    Shell 循环中实现展示进度百分比的脚本方法 当我需要处理一个几万行的文件的时候,需要处理的时间是比较长的.我一开始的想法是,没处理一行,就输出一个 # 号.但是这样还是会出现很多很多的 # 号,即 ...

  6. 《Unity 3D游戏客户端基础框架》消息系统

    功能分析: 首先,我们必须先明确一个消息系统的核心功能: 一个通用的事件监听器 管理各个业务监听的事件类型(注册和解绑事件监听器) 全局广播事件 广播事件所传参数数量和数据类型都是可变的(数量可以是 ...

  7. Unity3D使用溶解技术解决障碍物遮挡

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解 ...

  8. Okhttp之连接池ConnectionPool简单分析(一)

    开篇声明:由于本篇博文用到的一些观点或者结论在之前的博文中都已经分析过,所以本篇博文直接拿来用,建议读此博文的Monkey们按照下面的顺序读一下博主以下博文,以便于对此篇博文的理解: <Okht ...

  9. 向量点积(Dot Product),向量叉积(Cross Product)

    参考的是<游戏和图形学的3D数学入门教程>,非常不错的书,推荐阅读,老外很喜欢把一个东西解释的很详细. 1.向量点积(Dot Product) 向量点积的结果有什么意义?事实上,向量的点积 ...

  10. Ubuntu 12.04.1 OK335xS busybox-1.24.1 文件系统编译错误及解决方案

    Ubuntu OK335xS busybox- 文件系统编译错误及解决方案 一.参考文档: 编译busybox的一些错误: http://blog.csdn.net/hshl1214/article/ ...