NFS网络文件系统
安装NFS服务端
系统版本声明: RHEL8
参考链接: 博哥爱运维
NFS缺点
: 自身不支持高可用
,单节点部署生产环境风险高.
RHEL
安装NFS服务端
# rhel安装NFS服务端
yum -y install nfs-utils rpcbind
# 按需安装autofs
yum install -y autofs
# 启动并开机自启nfs-server和rpcbind服务
## rhel8依赖的服务
systemctl enable --now nfs-server rpcbind nfs-utils
## Centos7依赖的服务
systemctl enable --now rpcbind nfs
systemctl enable --now autofs
Debian
安装NFS服务端
# Debian系列安装NFS服务器端
apt install nfs-kernel-server -y
配置防火墙放行策略
portmapper
端口:111 udp/tcp
nfs/nfs_acl
端口:2049 udp/tcp
;4001
——4004
服务端权限详解
NFS服务端
的/etc/exports
中,配置参数如下:
参数 | 解释 |
---|---|
ro | 以只读 方式共享(默认策略) |
rw | 以读写 方式共享 |
root_squash | 客户机用root用户访问该共享文件夹时,将root用户映射成匿名用户 |
no_root_squash | 客户端使用root用户连接NFS时,依然映射为root用户(相当于在服务器上用root身份访问该目录) |
all_squash | 客户机上的所有用户 访问该共享目录时都映射成匿名用户(nfsnobody ) |
no_all_squash | 客户机上的所有用户 访问共享文件的均保留原UID 和原GID (默认策略) |
anonuid | 将客户机上的用户映射成NFS服务器上指定的用户UID(UID=xxx) |
anongid | 将客户机上的用户GID映射成NFS服务器上指定的用户GID(GID=xxx) |
sync | 数据实时落盘,同步写入到内存与硬盘中,效率低 ,但可以保证数据一致性 |
async | 资料会先暂存于内存中,数据延迟落盘,async相比sync性能高 |
subtree_check | 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认) 写操作之前, 检查 客户端访问的目录是否是共享目录的子目录。 |
no_subtree_check | 写操作之前,不检查 客户端访问的目录是否是共享目录的子目录。 |
wdelay | 指定等待写入数据的时间,检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置) |
no_wdelay | 如果多个用户要写入NFS目录,则立即写入,当使用async 时,无需此设置 。若有写操作则立即写入 ,应 与sync 配合使用 |
hide | 隐藏共享目录中的指定文件或目录; 在NFS共享目录中不共享其子目录 |
no_hide | 不隐藏共享目录中的指定文件或目录(默认设置) |
secure | 允许NFS客户端通过安全 的TCP端口2049(默认) 连接NFS服务器;如需使用其他端口或协议,可以通过修改 /etc/nfs.conf 配置文件来指定。 |
insecure | 允许NFS客户端通过不安全 的UDP端口2049(默认) 连接NFS服务器;如需使用其他端口或协议,可以通过修改 /etc/nfs.conf 配置文件来指定。 |
NFS使用的端口
参考: https://blog.51cto.com/u_15127582/3383593
# 查看NFS启动后的端口
rpcinfo -p localhost
## 验证服务是否正在运行
rpcinfo -p $nfs_server
NFS
使用是:2049
RPC
端口:111
RPC client
:随机端口
- 1)
portmapper(RPC)
端口:111 udp/tcp
; - 2)
nfs/nfs_acl
端口:2049 udp/tcp
; - 3)
mountd
端口:32768--65535 udp/tcp
- 4)
nlockmgr
端口:32768--65535 udp/tcp
系统RPC服务
在nfs服务
启动时默认会给mountd
和nlockmgr
动态选取一个随机端口
来进行通讯。
设置NFS固定端口
vim /etc/sysconfig/nfs
在最后添加
# RPC配额守护程序的TCP端口号
RQUOTAD_PORT=4001
# NFS文件锁定程序的TCP和UDP端口号
LOCKD_TCPPORT=4002
LOCKD_UDPPORT=4002
# NFS挂载守护程序的端口号
MOUNTD_PORT=4003
# NFS状态守护程序的端口号
STATD_PORT=4004
重启rpcbind
和nfs
服务
# 重启rpcbind和nfs服务
systemctl restart rpcbind nfs
服务端配置(生产环境示例)
NFS服务端
配置文件为 /etc/exports
(默认是空文件),此处要注意三台服务器开放的ip限制有区别,除了exports
文件外,其他配置完全一样.
async
是延迟落盘
,sync
是实时落盘
,async
相比sync
性能要高一些.
例如: NFSserver
将/nfsshare
目录共享给192.168.186.0
网段
# 创建/nfsshare目录
mkdir /nfsshare
# 设置目录属主和属组为nobody
chown nobody.nobody /nfsshare
# 设置nfsshare目录其他人拥有写权限,否则客户端不可写
chmod o+w /nfsshare
# 修改服务端配置文件
vim /etc/exports
配置内容如下:
# 在/etc/exportfs中增加以下一行内容
## 注意:网段和(权限)中间没有空格
## insecure允许客户端使用非特权端口(大于1024)
## async相比sync性能要高一些
## no_root_squash避免root越权
# /nfsshare *(insecure,rw,async,no_root_squash)
# /nfsshare 192.168.32.0/24(rw,async,no_root_squash)
## 快捷编辑
echo '/nfsshare 192.168.32.0/24(rw,async,no_root_squash)' > /etc/exports
共享目录 | 共享给哪些客户端 | 权限 |
---|---|---|
/nfsshare | 192.168.32.0/24 | (rw,async,no_root_squash) |
/nfsshare | * | (insecure,rw,async,no_root_squash) |
使服务端配置生效
每次修改
/etc/exports
文件时,都需要运行下面的命令使配置生效
。如果有任何错误或警告,它们将显示在终端上。
exportfs
命令用来管理当前NFS共享的文件系统列表.
常用参数:
参数 | 解释 |
---|---|
-a | 打开或取消所有目录共享。 |
-o options,... | 指定一列共享选项,与 exports(5) 中讲到的类似。 |
-i | 忽略 /etc/exports 文件,从而只使用默认的和命令行指定的选项。 |
-r | 重新共享所有目录。它使 /var/lib/nfs/xtab 和 /etc/exports 同步。它将 /etc/exports 中已删除的条目从 /var/lib/nfs/xtab 中删除,将内核共享表中任何不再有效的条目移除。 |
-u | 取消一个或多个目录的共享。 |
-f | 在“新”模式下,刷新内核共享表之外的任何东西。任何活动的客户程序将在它们的下次请求中得到 mountd 添加的新的共享条目。 |
-v | 输出详细信息。当共享或者取消共享时,显示在做什么。显示当前共享列表的时候,同时显示共享的选项。 |
# -ar使共享配置生效(可以不重启nfs-server服务)
## -v查看当前的活动出口及其状态
exportfs -arv
使用exportfs命令查看已共享的资源
# 在服务器查看已共享的资源
exportfs
# 刷新显示已共享的资源
exportfs -rv
客户端挂载nfs
# 安装nfs客户端
## rhel系列安装nfs客户端
yum install -y nfs-utils
## Debian系列安装nfs客户端
apt update && apt install -y nfs-common
检查和测试nfs服务器是否可以连通
# 验证NFS是否可被export和挂载
## -e:显示NFS服务器上所有的共享目录。
showmount -e $nfs_server_ip
## -d:仅显示已被NFS客户端加载的目录
showmount -d 192.168.32.131
挂载NFS
# 客户端临时挂载NFS
mount -t nfs 192.168.32.131:/nfsshare /mnt/nfs
# 查看是否挂载
df -Th
持久挂载
https://blog.youkuaiyun.com/omaidb/article/details/120091688
# 将nfs挂载写入/etc/fstab中持久挂载,需要加_netdev,防止客户端在网络就绪之前开始挂载文件系统
## _netdev 声明网络存储,网络就绪后才会执行挂载
192.168.32.131:/nfsshare /mnt/nfs defaults,_netdev 0 0
# 或者
<本地挂载点> -rw,sync <远程nfs服务器>:/路径
NFS挂载示例
# 将远程NFS共享目录挂载到本地文件系统,这里将远程NFS共享目录的根目录挂载到本地文件系统的/hdfs_2目录下
# -t nfs:指定文件系统类型为NFS
# -o:指定挂载选项,包括:
## vers=3:指定NFS版本为3
## proto=tcp:指定NFS使用TCP协议进行通信
## nolock:禁用NFS文件锁定机制
## noacl:禁用ACL(访问控制列表)
## sync:强制NFS挂载同步,确保数据的一致性
# 10.0.1.31:/:远程NFS服务器IP地址和共享目录路径
# 10.1.1.36:/hdfs_2:本地文件系统上的目标路径
mount -t nfs -o vers=3,proto=tcp,nolock,noacl,sync 10.0.1.31:/ 10.1.1.36:/hdfs_2
挂载时debug
## -v 显示挂载过程
mount -v
NFS常用测试命令
验证NFS服务是否正在运行
# 验证NFS服务是否正在运行
rpcinfo -p $nfs_server
验证NFS空间是否可被export和挂载
# 验证NFS空间是否可被export和挂载
## -d:仅显示已被NFS客户端加载的目录;
## -e:显示NFS服务器上所有的共享目录。
showmount -e $nfs_server_ip
在服务器查看已共享的资源
# 使NFS配置热生效
## -ar使共享配置生效(可以不重启nfs-server服务)
## -v查看当前的活动出口及其状态
exportfs -arv
# 在服务器查看已共享的资源
exportfs
# 刷新显示已共享的资源
exportfs -rv
nfsstat列出NFS统计信息
https://www.linuxcool.com/nfsstat
常用参数:
参数 | 解释 |
---|---|
-s | 仅列出NFS服务器端状态 |
-c | 仅列出NFS客户端状态 |
-n | 仅列出NFS状态,默认显示nfs客户端和服务器的状态 |
-m | 打印以加载的nfs文件系统状态 |
-r | 仅打印rpc状态 |
参考实例 :
# 查看nfs版本
nfsstat -m <nfs服务器>
# 要显示关于客户机发送和拒绝的RPC和NFS调用数目的信息
nfsstat -c
# 要显示和打印与客户机NFS调用相关的信息
nfsstat -cn
# 要显示和打印客户机和服务器的与RPC调用相关的信息:
nfsstat -r
# 要显示关于服务器接收和拒绝的RPC和NFS调用数目的信息:
nfsstat –s
NFS常见问题
Linux操作系统上NFS客户端运行性能差?
参考: https://help.aliyun.com/document_detail/65228.html
问题描述:
Linux操作系统中出现NFS客户端读写速度只有几MB/s。
问题原因:
在Linux操作系统中,NFS客户端对于同时发起的NFS请求数量进行了控制,默认编译的内核中此参数值为2,严重影响性能。
解决方案:
修改同时发起的NFS请求数量,提高NFS性能。
NFS客户端对同时发起的NFS请求数量进行了控制,默认编译的内核中此参数值为2
,严重影响性能,建议您将该参数值修改为128
。
echo "options sunrpc tcp_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf
echo "options sunrpc tcp_max_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf
sysctl -w sunrpc.tcp_slot_table_entries=128
## 可选
reboot
执行以下命令查看修改结果。
如果返回值为128,则说明修改成功。
# 查看NFS客户端对同时发起的NFS请求数量
cat /proc/sys/sunrpc/tcp_slot_table_entries
NFS备份方案
可以使用sersync
方案来实时备份
数据
https://blog.youkuaiyun.com/omaidb/article/details/133091969