NFS 介绍
NFS 为网络文件管理系统,它能够多台服务器直接相互访问文件,可以简单理解为windows系统中的文件共享功能,详细的介绍可以参阅 NFS网络文件系统
安装服务
- 需要安装的服务(需要使用NFS服务的服务器都需要安装)
rpcbind:将不同服务与对应的端口进行绑定,以便支持机器间的相互操作
nfs-server:文件共享服务 - 检测是否安装
- 大多数已经自带了rpcbind和nfs-server,如果已经安装则跳过
- 使用以下命令检测
返回了版本等信息则说明已经安装rpm -qa nfs-utils rpcbind
- 安装服务
yum install -y nfs-utils rpcbind
配置服务
我们假定实现两台服务器之间的文件共享,便于理解,我们这里给两台服务器分别取名为SERVER_A(IP:10.0.0.1)和SERVER_B(IP:10.0.0.2),假定SERVER_A为存储资源的服务器
在配置之前,我们需要设置一个用于NFS操作的用户,这里我们直接设置为nginx的用户,原因是网站在访问时,用户为nginx服务的用户,为了防止权限问题导致的异常情况,使NFS服务和nginx服务用户一致即可,同时,在所有使用NFS服务的服务器上,都应该存在这个用户和用户组,即每台服务器的这个用户所属用户ID和所属用户组ID相同。
例如:
在SERVER_A上nginx用户名和用户组名为www,用户ID为501,用户组ID为501,那么在其他服务器上,也应该存在一个用户ID为501,用户组ID为501的www用户和用户组。
这样,每台服务器通过NFS在SERVER_A上的写入文件时,文件所属角色为www:www,其他服务器通过web网页访问创建的文件,在SERVER_A依然有权限通过web网页进行操作配置NFS用户
注意: 每台服务器都需要设置- 查看nginx用户
通过查看nginx的配置文件nginx.conf中的user后面跟的信息
如后面为 www www 表示nginx的用户为www,用户组为www,
以下均使用www:www 举例说明 - 查看nginx用户ID和用户组ID
- 查看nginx用户
配置共享文件(在SERVER_A操作)
NFS服务的配置文件为 /etc/exports
配置内容格式:
<输出目录> [客户端 选项(访问权限,用户映射,其他)]
使用以下命令查看配置帮助man exports
配置举例
我们在SERVER_A的根目录创建一个文件夹储存网站的session文件,执行以下两条命令mkdir /sessions chmod 1777 /sessions
执行完毕后,会在根目录生成sessions目录,且权限为1777
现在演示配置将SERVER_A的/sessions目录共享给SERVER_B
编辑/etc/exportsvim /etc/exports
输入如下内容
解释:
将SERVER_A的/sessions目录共享给SERVER_B,且SERVER_B拥有读写权限,并指定 用户ID为501,用户组ID为501,此处的501,是通过 配置NFS用户 得到的ID
启动服务(在SERVER_A操作)
使用systemctl 命令启动systemctl start rpcbind.service systemctl start nfs-server.service
挂载(在SERVER_B操作)
- 在SERVER_B上,首先启动NFS服务,方法同上
- 查看NFS共享状态
我们可以在SERVER_B上查看SERVER_A的共享状态,使用showmount 命令
执行完成后会列出在SERVER_A上的/etc/exports 配置文件中配置的共享设置showmount -e 10.0.0.1
- 挂载目录
使用mount命令进行挂载,在挂载之前,我们需要先在SERVER_B的根目录建立sessions 目录
将SERVER_A的/sessions目录挂载到当前服务器的/sessionsmkdir /sessions chmod 1777 /sessions
mount -t nfs 10.0.0.1:/sessions /sessions
- 检验是否挂载成功
我们在SERVER_A的/sessions目录下面随便写入一个文件,例如
查看SERVER_B的/sessions目录下面,如果出现了aaa.txt 则表示挂载成功或者,我们在SERVER_B上使用df 命令查看,出现以下信息,则表示挂载成功!
- 检验是否有权限写入(在SERVER_B操作)
挂载完成后,我们需要检验是否有写入权限,切换至挂载的目录,创建测试文件,如果在SERVER_A的共享目录中出现了测试文件,且文件所有者为www:www,则表示以上NFS配置成功
自启服务和自动挂载
配置完成后,我们需要配置NFS服务自启
使用systemctl命令
分别在两台服务器上执行
systemctl enable rpcbind.service
systemctl enable nfs-server.service
配置SERVER_B的自动挂载
编辑/etc/rc.local
如果 rc.local 没有执行权限,需要设置执行权限
chmod +x /etc/rc.d/rc.local
以上步骤,创建了sessions目录,并设置了共享,设置session共享时,只需要将php.ini中的session储存方式改为文件储存,并且保存目录配置为/sessions,这样即可使服务器之间session共享