NFS共享存储
Posted zzzwqh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NFS共享存储相关的知识,希望对你有一定的参考价值。
环境准备
主机名 | wanIP | lanIP | 角色 |
---|---|---|---|
web01 | 10.0.0.7 | 172.16.1.7 | nfs的客户端 |
web02 | 10.0.0.8 | 172.16.1.8 | nfs的客户端 |
nfs | 10.0.0.31 | 172.16.1.31 | nfs的服务端 |
NFS服务端
NFS(Network File System)和RPC(Remote Procedure Call)
部署NFS服务端,需要安装软件包
nfs-tools
和rpcbind
,CentOS7中自带rpcbind软件包
,NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,这是因为NFS使用了一些其它的传输协议。而这些传输协议用到了这个RPC功能。可以说NFS服务是需要使用RPC的一个程序。或者说NFS也是一个RPC Server。所以只要用到NFS的地方都要启动RPC服务,不论是NFS Server 或者NFS Client。这样Server和Client 才能通过RPC来实现PROGRAM PORT 的对应。可以这么理解RPC和NFS的关系:NFS是一个文件系统,而RPC是负责负责信息的传输。
安装完成后,修改/etc/exports文件,语法格式如下
[共享的目录] IP网段(参数,参数)
其中参数可以用 man exports
命令查到:
参数 | 参数作用 |
---|---|
rw | NFS客户端读写权限 |
ro | NFS客户端只读权限 |
root_squash | NFS客户端用root用户访问该共享文件目录时,会将root用户映射成匿名用户 |
no_root_squash | NFS客户端用root访问该共享文件夹时,不映射root用户为匿名用户,但给予root用户的待遇 |
all_squash | 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户(常用) |
no_all_squash | 无论NFS客户端使用什么账户访问,都不映射 |
sync | 同时将数据写入到内存与硬盘中,保证不丢失数据 |
async | 资料会先暂存于内存中,而非直接写入硬盘,从内存中写入硬盘 |
anonuid | 配合all_squash参数使用,将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户 |
anongid | 配合all_squash参数使用,将远程访问的所有用户组都映射为匿名用户组,并指定该用户组为本地用户组 |
# CentOS 7,只需要安装nfs-utils
[root@nfs ~]# yum install -y nfs-utils
# CentOS 6,需要安装nfs和rpc
[root@nfs ~]# yum install -y nfs-utils rpcbind
# 编辑nfs的配置文件
[root@nfs ~]# vi /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
# 检查配置文件是否生效
[root@nfs ~]# cat /var/lib/nfs/etab
# 创建匿名用户对应的本地用户
[root@nfs ~]# useradd www -u 666 -r -s /sbin/nologin -M
# 创建 /data目录,并改变其 属主和属组
[root@nfs ~]# mkdir /data
[root@nfs ~]# chown -R www.www /data
# 启动 nfs-server 和 rpcbind ,添加开机自启
[root@nfs ~]# systemctl restart nfs-server rpcbind
[root@nfs ~]# systemctl enable nfs-server rpcbind
NFS客户端
# 客户端安装 nfs-server 软件包(CentOS7)
[root@web01 ~]# yum install -y nfs-utils
# 查看 NFS服务端 "房源"
[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
# 将目录挂载到 NFS服务端,此时访问 /var/www/html目录时,实际上是 NFS服务端的 /data目录
[root@web01 ~]# mount -t nfs 172.16.1.31:/data /var/www/html/
# 对应的卸载命令
[root@web01 ~]# umount /var/www/html/
httpd服务
# 上传的文件路径设置为 /var/www/html/,由 apache 用户上传,所以要修改 /var/www/html 的属主和属组,否则 apache 用户没有写入的权限
[root@web01 ~]# chown apache.apache /var/www/html/
# 或者不指定为 apache 用户,需要修改配置文件
[root@web01 ~]# vim /etc/httpd/conf/httpd.conf
User www
Group www
[root@web01 ~]# chown www.www /var/www/html/
# 修改后,重启 httpd服务
[root@web01 ~]# systemctl restart httpd
######### 以上是单机架构服务器必须要做的操作 ,若是分布式服务器架构,使用了NFS共享存储服务器,NFS服务端的配置文件/etc/exports加入了`all_squash`,可以不改变属主及属组,任何用户都会以匿名用户身份访问 NFS服务端 ##########
# 补充1:NFS的客户端/var/www/html的属主和属组 和 NFS的服务端/data的属主和属组 尽量用同一个用户名,UID,GID
# 补充2:若不同,执行挂载后,NFS客户端会不识别 /data挂载目录(/var/www/html) 的属主和属组,只显示对应的 UID GID,若 NFS客户端有这个UID的用户,则显示客户端的用户名
# 补充3:在挂载后,对于 NFS服务端的操作,任何用户都可执行,因为 NFS服务端 `all_squash,anonuid=666,anongid=666` 参数会将远程访问的所有用户都映射为匿名用户,并指定为本地用户(UID=666,GID=666)
NFS客户端没有 NFS服务端匿名用户:
NFS客户端 有和NFS服务端匿名用户相同 UID/GID的用户:
以上是关于NFS共享存储的主要内容,如果未能解决你的问题,请参考以下文章