共计 2559 个字符,预计需要花费 7 分钟才能阅读完成。
背景说明:
最近在搞实验室集群环境,需要把存储服务器用起来,两台存储服务器大概 12T 的大小,想实现使其他的 8 个计算节点都能像访问本地目录一样访问存储服务器,类似 Windows 下的文件共享,因此使用了 NFS 服务。
NFS
1. 介绍
NFS 是 Network File System 的缩写,即网络文件系统。是一种使用于分散式文件系统的协定,功能是让客户端通过网络访问不同主机上磁盘里的数据,主要用在类 Unix 系统上实现文件共享的一种方法。
2. 核心原理
NFS 使用 RPC,即远程过程调用 (Remote ProcedureCall),它能使客户端执行其他系统中的程序。NFS 本身是没有提供信息传输的协议和功能的,但 NFS 却能让我们通过网络进行资料的分享,这是因为 NFS 使用了一些依赖 RPC 的传输协议。可以简单理解 RPC 和 NFS 的关系:NFS 是一个文件系统,而 RPC 负责信息的传输。
详细配置
1. 前期配置
关闭服务端和客户端的防火墙和 selinux,这里的服务端指需要共享出去的存储服务器,客户端指其他的 8 个计算节点。
以下所有命令是在 CentOS7 环境下
1.1 关闭防火墙
systemctl stop firewalld
1.2 把 selinux 设置为许可模式(或者关闭)
etenforce 0
(如果想要禁用,需要更改配置文件,把 SELINUX 设置成 disabled,重启生效)
2. 服务端配置
2.1 安装需要的软件包(使用 yum)
yum install -y rpc-bind nfs-utils
2.2 创建想要共享的文件夹,例如 /datas
mkdir /datas
2.3 把共享目录的权限设定为所有用户都可读可写权限
chmod -R 777 /datas
2.4 修改 NFS 服务的主配置文件 /etc/exports
vim /etc/exports
# 添加如下规则
/datas *(rw,sync)
规则说明:/datas 代表共享的文件,* 代表所有主机都可以访问,rw 指读和写的权限,sync 表明使用同步方式。
其他更为精确的可选配置如下:
< 输出目录 > 客户端(选项: 访问权限, 用户映射, 其他]
输出目录是指 NFS 系统中所定义的共享给客户端使用的文件系统
客户端是定义网络中可以访问这个 NFS 共享目录的 IP 地址或网段或域名等
客户端常用的指定方式
指定 ip 地址的主机:192.168.100.1
指定一个子网:192.168.100.0/24 也可以写成:192.168.100.0/255.255.255.0
指定域名的主机:david.bsmart.cn
指定域中的所有主机:*.bsmart.cn
所有主机:*
选项用来设置输出目录的访问权限、用户映射等。
NFS 主要有 3 类选项:
设置输出目录只读:ro
设置输出目录读写:rw
用户映射选项
all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);
no_all_squash:与 all_squash 取反(默认设置);
root_squash:将 root 用户及所属组都映射为匿名用户或用户组(默认设置);
no_root_squash:与 rootsquash 取反;
anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);
anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);
其它选项
secure:限制客户端只能从小于 1024 的 tcp/ip 端口连接 nfs 服务器(默认设置);
insecure:允许客户端从大于 1024 的 tcp/ip 端口连接服务器;
sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
async:将数据先保存在内存缓冲区中,必要时才写入磁盘;
wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);
no_wdelay:若有写操作则立即执行,应与 sync 配合使用;
subtree:若输出目录是一个子目录,则 nfs 服务器将检查其父目录的权限(默认设置);
no_subtree:即使输出目录是一个子目录,nfs 服务器也不检查其父目录的权限,这样可以提高效率;
2.5 开启 NFS 服务
systemctl start nfs
至此服务端的 nfs 配置完毕,回想一下,我们主要做了:
关闭防火墙和 selinux
将我们创建的目录 /datas 通过 nfs 主配置文件 /etc/exports 共享出去
开启 nfs 服务
Ps:如果想共享服务器的某个硬盘,只需要将 /datas 目录使用 mount 命令挂载到该硬盘即可。
查看硬盘和挂载情况的命令为:
df -h
例如将硬盘设备 /dev/sdd 挂载到 /datas
mount /dev/sdd /datas
接下来配置客户端
3. 客户端配置
3.1 关闭防火墙和 selinux
同上
3.2 安装 NFS
同上
3.3 将服务端的共享目录挂载到本机的 /data-nfs 目录上,我这里的 ip 是 IB 卡的的 ip,没有 IB 驱动的可以直接使用内网 ip,/data-nfs 是我自定义的目录。
mount -t nfs 12.12.12.29:/datas /data-nfs
至此,客户端配置完毕,访问 /data-nfs 目录就相当于访问服务端的 /datas 目录
ps:以上配置重启机器后会出问题,建议设置开机启动执行。
10 分钟学会在 Ubuntu 18.04 LTS 上安装 NFS 服务器和客户端 https://www.linuxidc.com/Linux/2018-11/155331.htm
Llinux 下搭建 NFS 文件共享服务器 https://www.linuxidc.com/Linux/2018-12/156110.htm
: