赞
踩
通过 POSIX 兼容性测试的 v3.7 发布后,FastCFS 完全可以作为 NFS 的后端存储,推荐使用 FastCFS v3.7.1 及后续版本。FastCFS 的搭建参见 gitee 上的 FastCFS 项目官网 ,本文着重介绍 FastCFS 作为后端存储的 NFS 搭建及常见问题排查。
NFS 服务端运行在 FastCFS 的 fuse client 节点上, 需要事先部署好 FastCFS 集群和 fuse client 。
CentOS 和 RHEL:
yum install -y nfs-utils rpcbind
Ubuntu 和 Debian:
apt install nfs-kernel-server -y
NFS 服务配置文件 /etc/exports 示例:
/opt/fastcfs/fuse 192.168.25.57(rw,sync,all_squash,anonuid=501,anongid=504)
参数注解:
/opt/fastcfs/fuse
:要共享的目录192.168.25.57
:表示只允许该客户端挂载共享目录,可以是 CIDR 网段 192.168.25.0/24
,也可以用 *
代表允许所有的网段访问rw
:可读写权限sync
:数据同步写入内存和硬盘all_squash
:表示不管使用 NFS 目录的用户是谁,其身份被限定为一个指定的普通用户身份设置 gid 和 uid 权限;anonuid/anongid
: 要和 root_squash 以及 all_squash 一同使用,用于指定使用 NFS 的用户限定到的 uid 和 gid。 注意: 服务端和客户端 uid 和 gid 的用户和组必须存在,否则以 root 用户身份使用注意:rw、sync 等之间是不能有空格或参数不完整,否则报
exportfs: /etc/exports:1: syntax error: bad option list
systemctl restart rpcbind && systemctl restart nfs-server
exportfs -arv
CentOS 和 RHEL:
yum install nfs-utils -y
Ubuntu 和 Debian:
apt install nfs-common -y
客户端测试是否能连接服务端:
showmount 192.168.25.118 -e
mount 命令示例:
mount -t nfs -onolock,nfsvers=3 192.168.25.118:/opt/fastcfs/fuse /mnt/nfs
或者:
mount -t nfs -onolock,nfsvers=4 192.168.25.118:/ /mnt/nfs
服务端查看:
rpcinfo -p | grep -iE "service|NFS"
客户端查看:
nfsstat
systemctl list-unit-files --type=service | grep enable | grep rpcbind
systemctl list-unit-files --type=service | grep enable | grep nfs-server
注: 输出为空则开机启动没有生效
systemctl enable rpcbind && systemctl enable nfs-server
服务端关闭防火墙,以及设置目录权限,都解决不了,在 /etc/exports 文件中引入如下配置,问题解决。
NFS 默认支持的端口小于 1024,加入 insecure
参数开启大于 1024
端口的支持,/etc/exports
配置示例:
/opt/fastcfs/fuse 192.168.25.118 (insecure,rw,sync,no_root_squash)
故障原因: 服务端 NFS 共享目录的权限设置问题
解决方法: 在服务端设置 NFS 共享目录权限为 777,客户端就可以写入文件
问题原因: 开启了防火墙
解决方法: 关闭防火墙
出错信息: reason given by server: No such file or directory
解决方法:
NFS v3 直接使用服务端配置的目录,如:/opt/fastcfs/fuse
,而 v4 将服务端配置的路径作为基路径,mount
要使用 /
NFS 挂载默认会使用最新的 NFS 协议,挂载命令示例(支持 v4 前提下使用):
mount -t nfs -onolock 172.16.168.131:/ /mnt/nfs
NFS v3 挂载命令示例:
mount -t nfs -onolock 172.16.168.131:/opt/fastcfs/fuse /mnt/nfs
指定 NFS v4 挂载命令示例:
mount -t nfs -onolock,nfsvers=4 172.16.168.131:/ /mnt/nfs
友情提示:
CentOS 6 需要使用 NFS v3 挂载
/etc/exports
中需要设置fsid=0
,例如:/opt/fastcfs/fuse 172.16.168.130 (fsid=0,rw,sync,no_root_squash,no_all_squash)
配置示例:
/opt/fastcfs/fuse 10.10.31.0/24: (rw,no_root_squash,no_all_squash,sync)
10.10.31.0/24
:这是允许访问 NFS server 的 IP 范围,也就是 10.10.31 开头的 IP,24 是掩码长度。可以设定的参数主要有以下这些:
rw 或 ro
:rw 表示可读写权限,ro 表示只读权限no_root_squash
:登入到 NFS 主机的用户如果是 root,该用户即拥有 root 权限no_all_squash
:透传普通用户 ID 及其用户组root_squash
:登入 NFS 主机的用户如果是 root,该用户权限将被限定为匿名使用者 anonuidall_squash
:不管登陆 NFS 主机的用户是何权限都会被重新设定为匿名使用者 anongidanonuid
:将登入 NFS 主机的用户都设定成指定的 user id,此 ID 必须存在于 /etc/passwd
中,默认为 nobody
或 nfsnobody
anongid
:将登入 NFS 主机的用户组都设定成指定的 group id,此 ID 必须存在于 /etc/group
中,默认为 nobody
或 nfsnobody
sync
:数据同步写入硬盘async
:数据会先存放在内存中,然后再异步写入硬盘insecure
:允许对本共享目录的非授权访问async
:异步同步,此参数会提高 I/O 性能,但会降低数据安全(除非对性能要求很高,对数据可靠性不要求的场合),不推荐使用;noatime
:取消更新文件系统上的 inode 访问时间,提升 I/O 性能,优化 I/O 目的,推荐使用;nodiratime
:取消更新文件系统上的 directory inode 访问时间,高并发环境可以提高系统性能,推荐使用。Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。