NFS部署

简介:

NFS的工作原理

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

 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是负责负责信息的传输。

http://wiki.jikexueyuan.com/project/linux/nfs.html

https://www.freebsd.org/doc/zh_CN.UTF-8/books/handbook/network-nfs.html

http://www.zhukun.net/archives/7096


NFS的安装

服务器端和客户端:

$ yum install nfs-utils portmap  (适用centos 5)
$ yum install nfs-utils rpcbind  (适用centos 6)

在线上机器只需要执行$ yum install nfs-utils,rpcbind会自动安装

如果客户端不安装,会报错如下

客户端nfs-utils,执行yum install nfs-utils -y

如果不安装,会报错如下

mount: wrong fs type, bad option, bad superblock on 10.76.174.182:/opt/meituan/nfsattachment,

       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


NFS的配置

服务器端:

主配置文件/etc/exports

$ su - sankuai 
 $ vi /etc/exports      //在此文件中输入一下内容

/opt/meituan/poslog cq-icb-h-posmonitor-staging01(rw,sync,fsid=0,anonuid=500,anongid=500)
/opt/meituan/poslog cq-icb-h-posmonitormanage-staging01(rw,sync,fsid=0,anonuid=500,anongid=500)

这个配置文件就这样简单一行。共分为三部分,第一部分就是本地要共享出去的目录,第二部分为允许访问的主机(可以是一个IP也可以是一个IP段)第三部分就是小括号里面的,为一些权限选项。

rw:read-write,可读写;
ro:read-only,只读;
sync:同步写入(文件同时写入硬盘和内存),适用在通信比较频繁且实时性比较高的场合
async:异步写入(文件先写入内存,稍候再写入硬盘),性能较好(速度快),适合超大或者超多文件的写入,但有数据丢失的风险,比如突然断电等情况;
root_squash(默认):将来访的root用户映射为匿名用户或用户组;
no_root_squash:来访的root用户保持root帐号权限(可能会不安全);
no_all_squash(默认):访问用户先与本机用户匹配,匹配失败后再映射为匿名用户或用户组;
all_squash:将来访的所有用户映射为匿名用户或用户组;
secure(默认):限制客户端只能从小于1024的tcp/ip端口连接服务器;
insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
anonuid:匿名用户的UID值,通常是nobody或nfsnobody,可以在此处自行设定;
anongid:匿名用户的GID值;
no_subtree_check:如果NFS输出的是一个子目录,则无需检查其父目录的权限(可以提高效率)

服务端NFS的启动与停止

 $ chkconfig rpcbind on       //设置开机自启动
 $ chkconfig nfs on               //设置开机自启动
 $ service rpcbind start         //启动rpcbind服务,NFS是依托rpcbind的,所以首先要启动rpcbind,然后启动NFS才能使刚才的配置生效。启动完NFS后,就该使用NFS服务了。
 $ service nfs start                //启动nfs服务
 $ showmount -e localhost   //用shoumount -e 加服务器IP就可以查看NFS的共享情况

  $ showmount  -a                 //把连接本机的NFS的client全部列出。   

客户端的挂载

格式:mount [- t nfs] [-o 选项] 服务器IP:共享的目录 本地目录 

$ mount 10.12.18.176:/opt/meituan/poslog /opt/meituan/poslog    (需要root全选,sudo一下)

NFS默认是用UDP协议,也可以加上-o proto=tcp换成TCP协议。

客户端重新挂载nfs

http://www.jianshu.com/p/cfa02764d19e

 

[方案一]

 

解决因服务端移除目录再恢复时,客户端报错,此类问题的常规思路是:
1.卸载目录 umount -f /home/log/dir
2.重新挂载 mount server_ip:/home/log/dir /home/log/dir

 

[方案二]

 

然而通常情况下,因为客户端挂载的目录会被其他进程打开,导致我们在卸载目录的时候通常不能成功,那么成功卸载目录也有以下步骤:
1.查看哪些进程占用文件目录: fuser -mu /mnt
2.kill掉这些占用文件目录的进程:kill -9 xxxx
3.卸载目录:umount -f /home/log/dir
4.重新挂载目录:mount server_ip:/home/log/dir /home/log/dir

 

[方案三]

 

运气不太好的时候,当还有未知应用进程在操作文件目录,上述步骤也是不成功的,这个时候就要使用炒鸡卸载方式umount -l
1.使用lazy卸载:umount -l /home/log/dir
2.重新挂载目录:mount server_ip:/home/log/dir /home/log/dir

 

解释下umount lazy:

     umount -l #umount lazy
     当不知道是什么应用操作了文件目录,使用umount -f也无法成功的时候,使用umount -l ,umount会等待应用操作文件系统,直到文件系统可以被卸载为止,即umount -l并不是立刻清除所有挂载操作,它的特点是一直等待;



修改配置文件/etc/exports 如何生效

exportfs -rv  等价于 /etc/init.d/nfs reload 加载配置生效(当修改了/etc/exports时执行)

-a 打开或取消所有目录共享。 

-o options,...指定一列共享选项,与 exports(5) 中讲到的类似。

 -i 忽略 /etc/exports 文件,从而只使用默认的和命令行指定的选项。 

-r 重新共享所有目录。它使 /var/lib/nfs/xtab 和 /etc/exports 同步。 它将 /etc/exports 中已删除的条目从 /var/lib/nfs/xtab 中删除,将内核共享表中任何不再有效的条目移除。 

-u 取消一个或多个目录的共享。 

-f 在“新”模式下,刷新内核共享表之外的任何东西。 任何活动的客户程序将在它们的下次请求中得到 mountd添加的新的共享条目。 

-v 输出详细信息。当共享或者取消共享时,显示在做什么。 显示当前共享列表的时候,同时显示共享的选项。





      本文转自Tenderrain 51CTO博客,原文链接:http://blog.51cto.com/tenderrain/1975268,如需转载请自行联系原作者





相关文章
|
2月前
|
存储 Kubernetes 容器
百度搜索:蓝易云【Kubernetes使用helm部署NFS Provisioner】
现在,你已经成功使用Helm部署了NFS Provisioner,并且可以在Kubernetes中创建使用NFS存储的PersistentVolumeClaim。
44 10
|
6月前
|
网络协议 安全 Unix
centos7.9系统部署NFS详细流程—2023.04
centos7.9系统部署NFS详细流程—2023.04
364 0
|
5月前
|
Kubernetes 容器
K8s之部署nfs
K8s之部署nfs
|
7月前
|
缓存 安全 网络协议
部署YUM仓库及NFS共享服务
部署YUM仓库及NFS共享服务
158 0
|
8月前
|
域名解析 运维 负载均衡
【运维知识进阶篇】Tomcat集群实战之部署zrlog博客(Tomcat服务安装+静态资源挂载NFS+Nginx负载均衡+HTTPS证书+Redis会话保持)
【运维知识进阶篇】Tomcat集群实战之部署zrlog博客(Tomcat服务安装+静态资源挂载NFS+Nginx负载均衡+HTTPS证书+Redis会话保持)
252 1
|
11月前
|
Unix 应用服务中间件 Linux
ansible在web集群中批量部署nfs
ansible在web集群中批量部署nfs
154 0
Kubernetes----安装部署NFS服务器
Kubernetes----安装部署NFS服务器
253 0
|
存储 网络协议 Linux
nfs共享存储部署
nfs部署 ​ NFS基于TCP/IP穿件的网络文件系统,NFS服务的实现依赖于RPC(远程调用服务)机制,才能完成远程到本地的映射过程,在centos 系统中,需要安装nfs-utils、rpcbind软件包来提供nfs共享服务,NFS用于共享发布和访问,而RPC用于过程调用。
198 0
nfs共享存储部署
|
弹性计算