搭建NFS共享存储服务

作者: oldboy 分类: IDC 发布时间: 2022-07-13 18:32

NFS简介

NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。

  NFS最早是由Sun公司发展出来的,

  简单的来说:它就是是可以透过网络,让不同的主机、不同的操作系统可以共享存储。

以下是NFS最显而易见的好处:

  1. 节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用。

  2. 用户不需要在网络中的每个机器上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络上被访问使用。

  3. 一些存储设备CDROM和Zip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用。这可以减少整个网络上可移动介质设备的数量。

  NFS 的基本原则是“容许不同的客户端及服务端通过一组RPC分享相同的文件系统”,它是独立于操作系统,容许不同硬件及操作系统的系统共同进行文件的分享。

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

安装流程

1、检查是否已经安装了服务:

rpm -qa rpcbind nfs-utils

(1)如果没有则安装下:

yum install  rpcbind nfs-utils -y  

等价于

yum groupinstall “NFS file server ” -y

(2)再确认下是否安装成功:rpm -qa rpcbind nfs-utils

2、启动rpcbind及nfs服务:/etc/init.d/rpcbind start和/etc/init.d/nfs start

C7:   

systemctl start nfs && systemctl start rpcbind
systemctl enable nfs && systemctl enable rpcbind
systemctl status nfs && systemctl status rpcbind

3、查看nfs服务向rpc注册的端口

rpcinfo -p localhost

4、创建一个存储目录,并改变属主和属组,在安装nfs服务时会自动创建的nfsnobody用户,满足依赖关系。:

mkdir /data
chown -R nfsnobody.nfsnobody /data  

5、编辑nfs配置文件:

vim /etc/exports

可以通过man exports  查看使用说明

编辑格式:
共享目录  允许访问的网段(rw,sync)

/data 172.16.1.0/24(rw,sync)

/share 192.168.22.0/24(rw,async)  # 共享目录路径 客户端ip(选项)

生产中使用的all_squash,anonuid=997,anongid=99是个组合,就是使用web服务器web的用户与用户组(nginx用户),nfs服务器上也要有此用户并设置一样的uid和gid:

/data 172.16.1.0/24(rw,all_squash,anonuid=997,anongid=995)
chown -R nginx.nginx /data/blog

共享目录:nfs服务器需要共享给客户端的目录

客户端:网络中可以访问nfs共享目录的客户端ip,有这么几种表示方式:

指定ip地址的主机:192.168.22.11

通过ip地址段指定子网中的主机:192.168.22.0/24

*:所有主机

选项(选项之间以逗号’,’分割):

ro # 只读权限

rw # 读写权限

sync # 同步,数据更安全,速度慢

async #异步,速度快,效率高,安全性低

nfs层面开启读写权限,系统也要对others开启读写权限:chmod o+w /共享目录

6、重新加载:/etc/init.d/nfs reload

7、测试下服务端是否可以挂载:

showmount -e 172.16.1.31

8、客户端安装服务并检查下安装是否成功:

yum install  rpcbind nfs-utils -y
rpm -qa rpcbind nfs-utils

9、启动客户端服务并设置开机启动:/etc/init.d/rpcbind start和chkconfig rpcbind on

systemctl start rpcbind 
systemctl enable rpcbind 
systemctl status rpcbind
10、测试挂载并挂载:
showmount -e 172.16.1.31
mount -t nfs 172.16.1.31:/data /mnt

11、解决开机挂载的问题:

echo “mount -t nfs 172.16.1.31:/data /mnt” >>/etc/rc.local

或者写到fstab里

客户端出错总结:

服务端的防火墙没有放行导致

方法1:关闭服务器的防火墙后正常

方法2:放行相应的端口

1)服务器开启111和2049端口,111为rpcbind对应端口,2049为nfsd对应端口
firewall-cmd –permanent –add-port=2049/tcp
firewall-cmd –permanent –add-port=2049/udp
firewall-cmd –permanent –add-port=111/tcp
firewall-cmd –permanent –add-port=111/udp
firewall-cmd –reload

2)编辑/etc/sysconfig/nfs 修改默认端口,在末尾添加以下内容:
RQUOTAD_PORT=30001
LOCKD_TCPPORT=30002
LOCKD_UDPPORT=30002
MOUNTD_PORT=30003
STATD_PORT=30004

3)开启添加的端口

firewall-cmd –permanent –add-port=30001/tcp
firewall-cmd –permanent –add-port=30001/udp
firewall-cmd –permanent –add-port=30002/tcp
firewall-cmd –permanent –add-port=30002/udp
firewall-cmd –permanent –add-port=30003/udp
firewall-cmd –permanent –add-port=30003/tcp
firewall-cmd –permanent –add-port=30004/tcp
firewall-cmd –permanent –add-port=30004/udp
firewall-cmd –reload

4)重启服务
systemctl restart nfs

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

标签云