最近项目上有这么个需求,客户端上传文件的时候,想把文件上传到另外一台服务器。
本来想用ftp的,觉得太麻烦,就各种查资料,请教别人,后来发现,NFS这个东东真不错。
NFS(网络文件系统)服务可以将远程Linux系统上的文件共享资源挂载到本地主机的目录上,从而使得本地主机(Linux客户端)基于TCP/IP协议,像使用本地主机上的资源那样读写远程Linux系统上的共享文件。
简单来说就是,把远程服务器上的一个目录映射到本地,就像操作本地目录一下操作远程目录,这个完全符合我的需求。
NFS分为服务器端和客户端,远程服务器是服务端,本地服务器是客户端,我们现在就开始配置吧。
安装NFS
查看是否安装了nfs,输入命令:rpm -qa |grep nfs
没有结果,说明没有安装。
输入安装命令:yum install nfs-utils
一路选择yes,直到安装完成。
再次查看,已经安装好了。
在/usr/local目录下建立upload目录为共享目录。
mkdir upload
设置足够的权限确保其他用户也有写入权限
(因为下面我们把客户端映射为匿名用户了):
chmod -Rf 777 upload
创建一个文件(测试用,非必要) echo “welcome to install nfs” > readme
NFS服务程序的配置文件为 /etc/exports,默认情况下里面没有任何内容。
我们可以按照“共享目录的路径 允许访问的NFS客户端(共享权限参数)”的格式,定义要共享的目录与相应的权限。
参数使用表格如下:
输入命令:vi /etc/exports
加入
/usr/local/upload 10.145.1.*(rw,sync,root_squash)
注意,NFS客户端地址与权限之间没有空格。
启动NFS服务之前,还需要顺带重启并启用rpcbind服务程序,并将这两个服务一并加入开机启动项中。
输入命令:
systemctl restart rpcbind
systemctl enable rpcbind
systemctl start nfs-server
systemctl enable nfs-server
firewall-cmd --permanent --add-service=nfs firewall-cmd --permanent --add-service=mountd firewall-cmd --permanent --add-service=rpc-bind firewall-cmd --reload
如果不设置防火墙,客户端可能访问不到服务器的nfs。
showmount -e localhost
至此,服务器端配置成功。
安装NFS
同样需要检查安装nfs,步骤和服务器一样。
命令格式为“共享的目录名称 允许使用客户端地址”。
showmount -e 10.145.1.36
表示客户端和服务器端连接没有问题。
可以是任何目录,请按需创建。
mkdir upload
使用mount命令并结合-t参数,指定要挂载的文件系统的类型,并在命令后面写上服务器的IP地址、服务器上的共享目录以及要挂载到本地系统(即客户端)的目录。
命令格式:mount -t nfs 服务器的IP:/服务器上的共享目录 本地的挂载目录
输入命令:
mount -t nfs 10.145.1.36:/usr/local/upload /usr/local/upload
挂载完成后,进入upload 目录,看到了服务器上创建的readme文件,说明挂载成功!
客户端新建一个文件readme2 echo “create by client” > readme2
在服务器端查看,写入成功!
至此,配置完成了!
如果希望NFS文件共享服务能一直有效,则需要将其写入到fstab文件中:
vi /etc/fstab
10.145.1.36:/usr/local/upload /usr/local/upload nfs defaults 0 0
这样就算服务器重启,也不会丢失配置了。
Linux系统之间,共享目录文件用NFS非常方便,有以下优缺点:
优点:服务端的同一块磁盘可以挂载到不同的客户端,实现文件的共享,可以扩充客户端的存储空间。
缺点:严重依赖网络,当网络出现问题,客户端挂载的网络磁盘会无法使用。
最后,搭建NFS系统,最好是在同一局域网内,还要注意防火墙的设置。