NFS网络共享文件

java nfs 文件共享 nfs共享文件夹_客户端

 

网络文件系统,英文Network File System(NFS),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。多个服务器之间需要共享文件,通过NFS服务共享是一个简单的方法。

一、(可选)NFS服务端准备

1、在NFS新挂载一块硬盘,或新建一个目录

2、将硬盘分区及格式化

fdisk /dev/sdb
#输入n,然后一路默认最后输入w,完成分区

#然后格式化
mkfs.xfs /dev/sdb1

#然后挂载到目录
mkdir -p /nfs-data;
mount /dev/sdb1 /nfs-data

#将下面信息写入/etc/fstab文件,让系统开启自动挂载
/dev/sdb1              /nfs-data             xfs    defaults        0 0

3、查看是否挂载成功

df -h

 

二、安装NFS组件

在当做NFS服务端客户端的主机上都安装NFS组件

yum install -y nfs-utils

#其实还需要rpcbind组件的,不过安装nfs-utols的时候回自动连带安装了
#设置开机启动,关闭防火墙
systemctl enable rpcbind.service;  
systemctl enable nfs-server.service 
systemctl stop firewalld

 

三、配置主机

服务端编辑/etc/exports文件,配置哪些主机可以使用

/nfs-data 192.168.136.0/24(rw,sync,no_root_squash,no_wdelay)

#第一部分/nfs-data是要共享的目录
#第二部分192.168.136.0/24是有权限使用共享目录的地址段,也可以直接写一些IP地址,例如192.168.136.10(rw,sync,no_root_squash,no_wdelay) 192.168.136.20(rw,sync,no_root_squash,no_wdelay)
#第三部分是具体权限:
    #rw表示可读写,ro只读
    #sync :同步模式,内存中数据实时写入磁盘;
    #async :不同步,数据在内存中,定期写入磁盘
    #no_root_squash :加上这个选项后,root用户就会对共享的目录像是对本机的目录一样拥有最高权限。
    #root_squash:和上面的选项对应,root用户对共享目录的权限不高,只有普通用户的权限
    #all_squash:不管使用NFS的用户是谁,他的身份都会被限定成为一个指定的普通用户身份
    #anonuid=xxx/anongid=xxx :要和root_squash 以及all_squash一同使用,用于指定使用NFS的用户限定后的uid和gid,前提是本机的/etc/passwd中存在这个uid和gid

 

  • NFS常用挂载选项
ro                      只读访问 
rw                      读写访问 
sync                    同步写数据 
async                   异步写入数据 
secure                  NFS通过1024以下的安全TCP/IP端口发送 
insecure                NFS通过1024以上的端口发送 
wdelay                  如果多个用户要写入NFS目录,则归组写入(默认) 
no_wdelay               如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。 
hide                    在NFS共享目录中不共享其子目录 
no_hide                 共享NFS目录的子目录 
subtree_check           如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认) 
no_subtree_check        和上面相对,不检查父目录权限 
all_squash              共享文件的UID和GID映射匿名用户anonymous,适合公用目录。 
no_all_squash           保留共享文件的UID和GID(默认) 
root_squash             root用户的所有请求映射成如anonymous用户一样的权限(默认) 
no_root_squas           root用户具有根目录的完全管理访问权限 
anonuid=xxx             指定NFS服务器/etc/passwd文件中匿名用户的UID 
anongid=xxx             指定NFS服务器/etc/passwd文件中匿名用户的GID

 

四、启动服务

#服务端两个都需要启动
systemctl start rpcbind
systemctl start nfs

#客户端只需要启动rpcbind即可
systemctl start rpcbind

#查看NFS服务器启动是否成功
rpcinfo -p

#查看主机对外共享的目录以及客户端ip段信息
showmount -e <需要查看的服务端ip>

java nfs 文件共享 nfs共享文件夹_服务器集群_02

 

五、挂载NFS服务器

在客户端挂载NFS服务器

mkdir /data
mount -t nfs 192.168.136.183:/nfs-data /data

# 可以df -h看一下挂载情况,也可以本地写入文件,去服务端查看一下是否同步成功

 

六、autofs自动挂载(针对client端)

1、(不推荐)方式一

通过系统配置 /etc/fstab 自动挂载

server_IP:/remote_dir  /local_dir  nfs  defaults  1  1

例如:

192.168.56.101:/home/shareStoreDir /home/shareStoreDir nfs defaults 0 0
  • 第1个1表示备份文件系统,第2个1表示从/分区的顺序开始fsck磁盘检测,0表示不检测。
  • 这种方法不推荐,尝试过程中发现开机很慢,而且开机后并没有挂载成功。
  • 后查找原因是开机时,系统还没有完全完成所有服务的启动,包括网络服务:network。
  • 在网络无法连入时试图mount NFS当然会失败

 

2、(不推荐)方式二

开机自动挂载:在/etc/rc.d/rc.local文件中添加记录

添加开机启动脚本

mount -t nfs -o nolock hostname(orIP):/directory /mnt

还是会遇到上面开机后并没有挂载成功的问题,供解决方法可以休眠几秒后尝试
命令修改为:

sleep 5;mount -t nfs xx.xx.xx.xx:/home /mnt/nfs

 

3、(推荐)开机自动挂载 autofs

NFS客户端在获取数据时与NFS服务器进行连接,而在没有获取数据的时间内,自动的断开与NFS服务器之间的连接,这就是NFS的自动挂载技术。

注: 只有cd /tmp/a/nfs 进去, 触发一下,才能自动挂载。 另外 nfs目录,不能提前创建,自动挂载时,系统自动创建nfs目录。

1)安装autofs

yum install -y autofs

# 启动并设置开机自启
systemctl start autofs.service
systemctl enable autofs.service

2)主要有两个配置文件

/etc/auto.master: 文件定义本地挂载点
/etc/auto.xxx 配置文件是用来设置需要挂载的文件系统类型和选项(这个文件可以自己指定,只要和auto.master中的配置文件名称对应即可)

3)auto.master文件
该文件定义本地挂载点

  • /data:是要挂载的本地目录,我们在向NFS服务器发送请求信号时,一定要在这个目录下面进行操作,否则是无效的。
  • /etc/auto.nfs:是一个配置 NFS服务器共享文件的路径,及本地在/data目录中要与远程共享文件挂载的目录及权限,在auto.nfs文件中还要详细说明
  • –-timeout=60:指NFS客户端在多久没有向NFS服务器请求数据时断开挂载连接。

 

  • 如果一个NFS服务器上有许多的客户端一直连接的话,NFS服务器会承受很大的带宽压力,这对NFS服务器的正常使用会造成很大的影响,因此,为了解决这一弊端,可以设定超时时间

java nfs 文件共享 nfs共享文件夹_自动挂载_03

 

4)auto.nfs文件

该文件不是系统文件,由用户自定义,格式参考auto.misc,后缀可以随意修改,但必须和auto.master文件中保持一致。设置需要挂载的文件系统类型和选项

java nfs 文件共享 nfs共享文件夹_java nfs 文件共享_04

5)重启autofs

systemctl restart autofs.service

 

6)强烈建议

  • auto.master文件中的本地要挂载的本地目录,必须为空目录,否则在systemctl stop autofs.service时,会出现问题。
  • 如果本地要挂载的本地目录不为空目录,stop以后,目录下原始数据就会被挂载覆盖。autofs会自动把配置文件挂载在本地要挂载的本地目录
mount   # 可查看所有挂载情况

java nfs 文件共享 nfs共享文件夹_自动挂载_05