通过 NFS 实现服务器目录共享
2020年01月17日 17:00:44 Linux ⁄ 共 4480字 暂无评论 ⁄ 被围观 3,097次

项目需求

在一些项目开发中,往往有这种需求,就是项目的一些静态资源都是直接存放在项目服务外的目录中。比如 APP 程序包的上传和下载,一般后台服务上传包,服务直接把包上传到当前系统资源目录,但多个上传服务上传的包都在各自的应用服务器上,由于下载并发量比较大,下载服务常常做了负载均衡,所以当前机器的下载服务并不一定能找到上传的包,因为有些包是在其它机器上。

鉴于这种需求,有两种解决方式。一种是上传下载就用一个服务,目录也只有一个,上传时上传到该目录,下载时从该目录取,这种方式对并发大的情况显然不能支撑;另外一种方式,就是每个服务都对应自己单独的资源目录,然后做目录共享,使得不管哪个服务下载资源,都能够访问到,这就是这篇所要说的 NFS 目录共享安装和配置。

服务原理

NFS(Network File System,网络文件系统)是当前主流异构平台共享文件系统之一。主要应用在 UNIX 环境下。最早是由 Sun Microsystems 开发,现在能够支持在不同类型的系统之间通过网络进行文件共享,广泛应用在 FreeBSD、SCO、Solaris 等异构操作系统平台,允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,使得每个计算机的节点能够像使用本地资源一样方便地使用网上资源。换言之,NFS 可用于不同类型计算机、操作系统、网络架构和传输协议运行环境中的网络文件远程访问和共享。

NFS 的工作原理是使用客户端/服务器架构,由一个客户端程序和服务器程序组成。服务器程序向其他计算机提供对文件系统的访问,其过程称为输出。NFS 客户端程序对共享文件系统进行访问时,把它们从 NFS 服务器中“输送”出来。文件通常以块为单位进行传输。其大小是 8KB(虽然它可能会将操作分成更小尺寸的分片)。NFS 传输协议用于服务器和客户机之间文件访问和共享的通信,从而使客户机远程地访问保存在存储设备上的数据。

资源准备

准备两台机器,分别为 web69(192.168.220.69)、web68(192.168.220.68),计划用 web69 作为 nfs 服务端,web68 作为 nfs 服务客户端,机器可以任意扩展。

安装配置

一、查看系统是否已经安装 NFS 服务

命令:rpm -qa |grep nfs

如果没有输出信息,则说明未安装该服务。

二、查看系统是否已经安装 rpcbind 服务

命令:rpm -qa |grep rpcbind

注:rpcbind 是一个 RPC 服务,主要是在 nfs 共享时候负责通知客户端、服务器的 nfs 端口号的,简单理解 rpc 就是一个中介服务。

三、安装 NFS 和 rpcbind

如果在前两步发现这两个服务都没有安装,则安装这俩服务,如果安装了,则这步不需要做了。

命令:yum -y install nfs-utils rpcbind

已加载插件:fastestmirror
设置安装进程
Loading mirror speeds from cached hostfile
... ...
已安装:
  nfs-utils.x86_64 1:1.2.3-70.el6_8.2                           rpcbind.x86_64 0:0.2.0-12.el6                          

作为依赖被安装:
  keyutils.x86_64 0:1.4-5.el6         libevent.x86_64 0:1.4.13-4.el6         libgssglue.x86_64 0:0.1-11.el6           
  libtirpc.x86_64 0:0.2.1-11.el6_8    nfs-utils-lib.x86_64 0:1.1.5-11.el6    python-argparse.noarch 0:1.2.1-2.1.el6   

完毕!

四、NFS 服务端配置

1. 在 NFS 服务端上创建共享目录 /home/workspace

命令:mkdir -p /home/workspace

2. 并设置目录访问权限

命令:chmod 777 /home/workspace

3. 编辑 export 文件,内容如下:

命令:vi /etc/exports

/home/workspace 192.168.220.0/24(rw,no_root_squash,no_all_squash,sync)

常见的参数则有:

rw/ro:该目录分享的权限是可擦写 (read-write) 或只读 (read-only),但最终能不能读写,还是与文件系统的 rwx 及身份有关。
sync/async:sync 代表数据会同步写入到内存与硬盘中,async 则代表数据会先暂存于内存当中,而非直接写入硬盘!
no_root_squash/root_squash:客户端使用 NFS 文件系统的账号若为 root 时,系统该如何判断这个账号的身份?预设的情况下,客户端 root 的身份会由 root_squash 的设定压缩成 nfsnobody,如此对服务器的系统会较有保障。但如果你想要开放客户端使用 root 身份来操作服务器的文件系统,那么这里就得要开 no_root_squash 才行!
no_all_squash/all_squash:不论登入 NFS 的使用者身份为何,他的身份都会被压缩成为匿名用户,通常也就是 nobody(nfsnobody) 。
anonuid/anongid:anon 意指 anonymous (匿名者) 前面关于 *_squash 提到的匿名用户的 UID 设定值,通常为 nobody(nfsnobody),但是你可以自行设定这个 UID 的值!当然,这个 UID 必需要存在于你的 /etc/passwd 当中! anonuid 指的是 UID 而 anongid 则是群组的 GID。

4. 使得配置生效

命令:exportfs -r

五、启动服务端 rpcbind 和 nfs 服务

1. 查看服务是否启动

命令:

service rpcbind status

service nfs status

2. 启动服务

命令:

service rpcbind start

service nfs start

3. 配置开机启动服务

chkconfig rpcbind on

chkconfig nfs on

chkconfig --list rpcbind

chkconfig --list nfs

4. 查看 RPC 服务的注册状况

命令:rpcinfo -p localhost

选项与参数:
-p :针对某 IP (未写则预设为本机) 显示出所有的 port 与 porgram 的信息;
-t :针对某主机的某支程序检查其 TCP 封包所在的软件版本;
-u :针对某主机的某支程序检查其 UDP 封包所在的软件版本;

5. 测试联机

在 NFS 服务器设定妥当之后,我们可以在 server 端先自我测试一下是否可以联机,就是利用 showmount 这个指令来查阅。

命令:showmount -e localhost

选项与参数:
-a :显示目前主机与客户端的 NFS 联机分享的状态;
-e :显示某部主机的 /etc/exports 所分享的目录数据;

六、NFS 客户端安装

客户端只需要安装 nfs 服务即可,不需要安装 rpcbind 服务了。

安装详细步骤参考第三步。

七、NFS 客户端配置

1. 创建挂载目录

在客户端机器上创建挂在目录,这里与服务端保持一致(可以按照需求,不一致也没问题)

命令:mkdir -p /home/workspace

2. 并设置目录访问权限

命令:chmod 777 /home/workspace

3. 查看服务器抛出的共享目录信息

命令:showmount -e 192.168.220.69

4. 挂载目录

为了提高 NFS 的稳定性,使用 TCP 协议挂载,NFS默认用 UD P协议。

命令:mount -t nfs 192.168.220.69:/home/workspace /home/workspace -o proto=tcp -o nolock

八、测试目录共享

1. 在客户端机上,查看磁盘信息。

命令:df -h

2. 在服务端机上,创建一个文件,编辑一些内容。

  1. [root@web69 workspace]# touch abc.txt  
  2. [root@web69 workspace]# ll  
  3. total 4  
  4. -rw-r--r--. 1 root root    0 Jan 17 16:21 abc.txt  
  5. drwxr-xr-x. 4 root root 4096 Apr 26  2019 RSF  
  6. [root@web69 workspace]# vi abc.txt   
  7. [root@web69 workspace]# cat abc.txt   
  8. test nfs...  
  9. [root@web69 workspace]#  

3. 查看客户端机上是否能共享,查看内容是否正确。

  1. [root@web68 workspace]# ll  
  2. total 4  
  3. -rw-r--r--. 1 root root    0 Jan 17 16:21 abc.txt  
  4. drwxr-xr-x. 4 root root 4096 Apr 26  2019 RSF  
  5. [root@web68 workspace]# cat abc.txt   
  6. test nfs...  
  7. [root@web68 workspace]#  

4. 在客户端机上追加一部分内容到文件。

  1. [root@web68 workspace]# echo 'ok.' >> abc.txt   
  2. [root@web68 workspace]# cat abc.txt   
  3. test nfs...  
  4. ok.  
  5. [root@web68 workspace]  

5. 查看服务端机上的文件内容是否正确。

  1. [root@web69 workspace]# cat abc.txt   
  2. test nfs...  
  3. ok.  
  4. [root@web69 workspace]  

到此,nfs 目录共享的安装、配置和测试就完成了。

九、其它配置

1. 设置挂载永久生效

上面测试步骤中的挂载命令,是临时生效的。也就是说当机器重启后,在客户端机上,看不到挂载的目录,那么如何设置永久挂载呢?有两种方式:

1)修改 /etc/fstab 文件。

命令:192.168.220.69:/home/workspace    /home/workspace    nfs    rw    0    0

2)把上面的挂载命令添加到 /etc/rc.local 中。

命令:mount -t nfs 192.168.220.69:/home/workspace /home/workspace -o proto=tcp -o nolock

2. 端口不固定,如何配置防火墙规则

为了方便配置防火墙,需要固定 nfs 服务端口。NFS 启动时会随机启动多个端口并向 RPC 注册,这样如果使用 iptables 对 NFS 端口进行限制就会有点麻烦,可以更改配置文件固定 NFS 服务相关端口。

分配端口,编辑配置文件:

命令:vi /etc/sysconfig/nfs

修改配置文件后,记得重启 nfs 服务。重启后可以看到,随机端口已固定,便于配置防火墙策略。

原文链接: https://blog.csdn.net/tzhuwb/article/details/104019989

给我留言

留言无头像?