NFS

NFS服务(Network FileSystem)

 

NFS用于Linux之间进行文件共享,是通过将远程Linux系统上的文件共享资源挂载到本地机器的目录上实现文件共享

一、NFS原理及应用架构

1、在企业应用

就是使用服务器配置NFS网络实现文件共享

在NFS服务端设置一个共享的目录/server,其他有权限访问NFS服务器的客户端都可以把该目录/server挂载到本地客户端的某个挂载点

客户端正确挂载完毕后,进入NFS客户端的挂载点,也就能够看到NFS服务端的/server共享目录下的数据。在客户端查看时,NFS服务端/server的目录数据就相当于本地一个目录而已,根本察觉不到任何区别。

2、NFS与RPC原理

NFS是通过网络来进行数据传输(网络文件系统),因此NFS会使用一些port来传输数据,但是NFS在传输数据的时,使用的端口是随机选择

RPC(Remote Procedure Call,就是远程过程调用)服务实现的功能是记录每个NFS功能对应的端口号,并且在NFS客户端发出请求的时候,把该功能和对应的端口信息传递给发出请求的NFS客户端,保证客户端能够正确的连接到NFS的端口,达到数据传输的目的。RPC就好比是一个中介,处在客户端、服务端之间。

二、安装配置NFS软件服务

1、安装软件包命令

  yum install nfs-utils rpcbind -y

  • nfs-utils:NFS服务的主程序,包括了rpc.nfsd、rpc.mountd这两个守护进程以及相关文档,命令
  • rpcbind:是centos7/6环境下的RPC程序

2、环境配置

NFS也是C/S模式,在Server机器上创建用于NFS文件共享的文件夹,且设置好权限

[]# mkdir /nfsShare
[]# chmod -Rf 777 /nfsShare/

3、修改NFS服务的配置文件

①  默认配置文件路径是/etc/exports

  exports配置文件语法


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

例如
/        master(rw)  master2(rw,no_root_squash)
/pub    *(rw)
/home/chao   123.206.16.61(ro)

②  nfs语法参数解释

  【NFS客户端地址配置说明】

单一客户端 192.168.178.142 用的少
整个网段 192.168.178.0/24 24表示子网掩码255.255.255.0,指定网段,用的较多

  【权限参数说明】

ro 只读
rw 读写
root_squash 当nfs客户端以root访问时,它的权限映射为NFS服务端的匿名用户,它的用户ID/GID会变成nfsnobody
no_root_squash 同上,但映射客户端的root为服务器的root,不安全,避免使用
all_squash 所有nfs客户端用户映射为匿名用户,生产常用参数
sync 数据同步写入到内存与硬盘,优点数据安全,缺点性能较差
async 数据写入到内存,再写入硬盘,效率高,但可能内存数据会丢

③配置案例
 .案例一

修改nfs配置文件为如下示例
[]# cat /etc/exports
/nfsShare *(insecure,rw,sync,root_squash)表示共享该文件夹,且提供给所有网段的机器可访问,配置规则是,可读写,数据同步写入到磁盘,把root管理员映射为本地的匿名用户,insecure是客户端从大于1024的端口发送链接

    .案例二

/home/chaoge 192.168.178.0/24(ro)
只读共享,例如一些生成服务器的日志目录,又不想给开发服务器的权限,可以用此办法,共享目录给他人只读查看

三、启动并配置NFS服务端

1、启动NFS服务端

NFS服务都是基于RPC协议通信的默认端口是111,要确保系统运行了rpcbind服务

要注意的是rpcbind服务即使停止,111端口也不会挂掉,因为还有rpcbind.socket服务
①查看rpc状态
[]# systemctl status rpcbind
[]#netstat -tunlp|grep 111
②启动rpcbind服务
[]# systemctl restart rpcbind

③启动NFS服务端
[]# systemctl restart nfs-server

2、配置NFS服务端

1)创建共享目录且设置权限

①.确保RPC服务启动
systemctl start rpcbind

②创建需要共享的目录,以及资料,并且授权
mkdir -p /nfs_data
touch /nfs_data/好嗨哦.txt

③修改文件夹的user,group,这里更换权限是防止NFS客户端无法写入数据,当然也可以修改服务端目录777权限,但是不安全,不推荐
chown -R nfsnobody.nfsnobody /nfs_data/

④上一步修改的用户是nfs的匿名用户
[]# grep nfsnobody /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

2)配置NFS服务端配置文件,并且查看挂载情况

①编辑配置文件,写入如下挂载参数
[root@~]# cat /etc/exports
/nfs_data *(insecure,rw,sync)

②2.重新加载nfs服务
systemctl reload nfs

③查看NFS服务端挂载情况
[root@~]# showmount -e
Export list for haoglinux:
/nfs_data *

④查看NFS服务端挂载默认的参数,如下大多数参数都是默认的,不做过多了解
[root@linux ~]# cat /var/lib/nfs/etab
/nfs_data *(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)

⑤把本地机器当做客户端做一个简单的挂载测试
[root@linux ~]# mount -t nfs 123.206.16.61:/nfs_data   /mnt
[root@linux ~]#
# 发现已经可以查看到挂载目录的数据
[root@linux ~]# ls /mnt/
好嗨哦.txt

# 检查挂载情况
[root@linux ~]# df -h |tail -1
123.206.16.61:/nfs_data 50G 22G 26G 47% /mnt

[root@linux ~]# mount |tail -1
123.206.16.61:/nfs_data on /mnt type nfs4 (rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.141.32.137,local_lock=none,addr=123.206.16.61)


至此NFS服务端挂载成功,配置完毕

 

四、NFS客户端

在另一台linux机器上连接nfs服务端

[root@ ~]# yum install nfs-utils rpcbind -y  #安装操作nfs的命令套件

# 确保rpcbind服务正常
systemctl status rpcbind

# 检查远程挂载情况,需要服务端防火墙关闭,或是配置了规则
[root@linux mnt]# showmount -e 123.206.16.61
Export list for 123.206.16.61:
/nfs_data *

#以nfs协议挂载
[root@linux ~]# mount -t nfs 123.206.16.61:/nfs_data /mnt

此时进入挂载的目录,查看远程NFS服务端的文件夹资料

[root@linux ~]# cd /mnt
[root@linux mnt]# ls
好嗨哦.txt

五、配置开机自动挂载,每次开机都能使用nfs

将挂载命令写入到/etc/fstab文件

[root@web01 nfsShare]# tail -1 /etc/fstab
123.206.16.61:/nfsShare /nfsShare nfs defaults 0 0

六、Autofs自动挂载服务

【为什么要用autofs】

Linux的mount命令用于挂载文件系统

对于本地固定的设备,例如硬盘分区可以使用mount进行挂载

[root@linux nfsShare]# mount -l |grep ext4
/dev/vda1 on / type ext4 (rw,noatime,data=ordered)

/etc/fstab文件中,如果定义了过多的自动挂载配置,无疑都会随着服务器开机而进行挂载,但是这些挂载后的资源,如果不用则会给服务器造成硬件资源压力,以及网络带宽压力。

因此一些具有动态特性的文件系统,如光盘、软盘、U盘、甚至NFS、SMB等文件系统,特点是当需要,且使用的时候才有必要挂载。

当光盘或是U盘需要使用的时候,我们即可插入服务器,进行相应的挂载即可,但是NFS或SMB这样的远程共享,我们就不一定知道何时使用,进行挂载,何时不用,也不造成资源浪费。

【autofs特点】

Autofs和mount的不同点在于,Autofs是一种守护进程。它在后台检测用户是否要访问一个还没有挂载的文件系统,autofs会自动检查该文件系统是否存在,存在则自动挂载。

且autofs检测到已经挂载的文件系统有一段时间没用,则会自动将其卸载,省去了人力维护挂载设备的成本,以及不会造成服务器资源浪费。

【autofs的缺点】

autofs特点是只有用户请求时才执行挂载,所以当高并发访问时,开始请求的瞬间需要执行挂载,性能较差,因此在高并发业务场景下,宁愿保持挂载也不使用autofs自动挂载。

1、安装autofs

需要挂载的那台机器执行

[root@linux nfsShare]# yum install autofs -y

2、修改autofs配置文件

autofs配置文件以挂载点 子配置文件的格式填写

#默认的配置文件如下
[root@web01 ~]# grep -v '^#' /etc/auto.master
# 定义了一个挂载点是/misc ,需要在auto.misc文件中定义挂载动作
/misc    /etc/auto.misc  
/net    -hosts
+dir:/etc/auto.master.d
+auto.master

添加nfs自动挂载配置,添加一行配置,改为如下

[root@web01 ~]# grep -v '^#' /etc/auto.master
/misc    /etc/auto.misc
/- /etc/auto.home  #添加了这里,需要创建auto.home配置文件
/net    -hosts
+dir:/etc/auto.master.d
+auto.master

3、定义子配置文件的内容

[root@web01 home]# cat /etc/auto.home
/var/autofs  -rw,soft,intr 123.206.16.61:/nfsShare

4、此时检查系统文件系统情况(检查挂载情况)

#此时并没有/var/autofs文件系统的挂载数据
[root@web01 home]# df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  1.9G     0  1.9G   0% /dev
tmpfs          tmpfs     1.9G   16K  1.9G   1% /dev/shm
tmpfs          tmpfs     1.9G  532K  1.9G   1% /run
tmpfs          tmpfs     1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/vda1      ext4       50G   30G   17G  65% /
tmpfs          tmpfs     380M     0  380M   0% /run/user/0

5、启动autofs

systemctl restart autofs systemctl enable autofs/

6、当我们进入了/var/autofs,autofs服务会自动检测,且自动挂载

[root@web01 autofs]# pwd
/var/autofs
[root@web01 autofs]# ls
haha  学autofs  学nfs
[root@web01 autofs]# df -hT
Filesystem              Type      Size  Used Avail Use% Mounted on
devtmpfs                devtmpfs  1.9G     0  1.9G   0% /dev
tmpfs                   tmpfs     1.9G   16K  1.9G   1% /dev/shm
tmpfs                   tmpfs     1.9G  532K  1.9G   1% /run
tmpfs                   tmpfs     1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/vda1               ext4       50G   30G   17G  65% /
tmpfs                   tmpfs     380M     0  380M   0% /run/user/0
123.206.16.61:/nfsShare nfs4       50G   16G   31G  35% /var/autofs

7、自动检测,且自动挂载我们可以设置,多少秒不使用之后,自动取消挂载

[root@web01 ~]# cat /etc/autofs.conf |grep -i "timeout ="
timeout = 10
 
posted @ 2021-12-18 21:49  骏马秋风  阅读(382)  评论(0)    收藏  举报