当前位置: 首页 > 工具软件 > FastCFS > 使用案例 >

基于FastCFS的NFS搭建及常见问题排查

督德明
2023-12-01

通过 POSIX 兼容性测试的v3.7发布后,FastCFS完全可以作为NFS的后端存储,推荐使用FastCFS v3.7.1及后续版本。FastCFS的搭建参见gitee上的FastCFS项目官网,本文着重介绍FastCFS作为后端存储的NFS搭建及常见问题排查。

一、服务端

NFS服务端运行在FastCFS的fuse client节点上。

1.1 安装

CentOS和RHEL:yum install -y nfs-utils rpcbind

Ubuntu和Debian:apt install nfs-kernel-server -y

1.2 配置

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

1.3 服务启动

systemctl restart rpcbind && systemctl restart nfs-server

1.4 重新加载配置文件

exportfs -arv

二、客户端

2.1 安装

CentOS和RHEL:yum install nfs-utils -y

Ubuntu和Debian:apt install nfs-common -y

2.2 挂载

客户端测试是否能连接服务端:

showmount 192.168.25.118 -e

mount命令示例:

mkdir -p /mnt/nfs

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

三、NFS部署FAQ

3.1 如何查看nfs版本

服务端查看:rpcinfo -p | grep -iE "service|NFS"

客户端查看:nfsstat

3.2 NFS服务端如何设置开机启动

1)查看rpcbind和nfs-server是否开机启动

systemctl list-unit-files --type=service | grep enable | grep rpcbind

systemctl list-unit-files --type=service | grep enable | grep nfs-server

注:输出为空则开机启动没有生效

2)设置开机启动

systemctl enable rpcbind && systemctl enable nfs-server

3.3 两台虚拟机都是Centos6客户端口登录总是提示:mount.nfs: access denied server while mounting

服务端关闭防火墙,以及设置目录权限,都解决不了,在/etc/exports文件中引入如下配置,问题解决。NFS默认支持的端口小于1024,加入insecure参数开启大于1024端口的支持,/etc/exports配置示例:/opt/fastcfs/fuse 192.168.25.118 (insecure,rw,sync,no_root_squash)

3.4 客户端NFS操作提示没有权限(Permission denied)

故障原因:服务端NFS共享目录的权限设置问题

解决方法:在服务端设置NFS共享目录权限为777,客户端就可以写入文件

3.5 目录操作错误提示:mount: mount to NFS server '192.168.25.118' failed: System Error: No route to host. mount clntudp_create: rpc: port mapper failure - rpc: unable to receive

问题原因:开启了防火墙

解决方法:关闭防火墙

3.6 FastCFS作为NFS后端存储时NFS client mount失败

出错信息: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)

附一、NFS server配置文件/etc/exports 参数注解

配置示例:

/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,该用户权限将被限定为匿名使用者anonuid

all_squash:不管登陆NFS主机的用户是何权限都会被重新设定为匿名使用者anongid

anonuid:将登入NFS主机的用户都设定成指定的user id,此ID必须存在于/etc/passwd中,默认为nobody或nfsnobody

anongid:将登入NFS主机的用户组都设定成指定的group id,此ID必须存在于/etc/group中,默认为nobody或nfsnobody

sync:数据同步写入硬盘

async:数据会先存放在内存中,然后再异步写入硬盘

insecure:允许对本共享目录的非授权访问

附二、NFS client在高并发下挂载磁盘参数优化

async:异步同步,此参数会提高I/O性能,但会降低数据安全(除非对性能要求很高,对数据可靠性不要求的场合),不推荐使用;

noatime:取消更新文件系统上的inode访问时间,提升I/O性能,优化I/O目的,推荐使用;

nodiratime:取消更新文件系统上的directory inode访问时间,高并发环境可以提高系统性能,推荐使用。

 类似资料: