nfs服务介绍
- nfs(Network File System) 网络文件系统,能使用户访问服务器的文件系统,就像访问自己的本机的文件系统一样,并且多个
客户端共享访问该文件系统。 - 目前nfs服务,较为流行的两个nfs的组件为:nfsd,nfs-ganesha。前者linux为系统自带的内核态的文件系统,后者是开源的用户空间的文件
系统。因为nfs-ganesha运行在用户态,nfsd运行在内核态,所以nfs-ganesha具有内存分配灵活,可移植性更好,更方便扩展等优势。
缺点是nfs-ganesha目前的稳定性还不如nfsd。
如何搭建nfsd和nfs-ganesha服务
机器环境为centos7,由于两者都使用2049端口,因此一台服务器上,只能跑其中之一.
-
搭建nfsd服务
A. 检查是否安装rpcbind和nfs-utils软件
rpm -qa | grep rpcbind nfs-utilsB. 如果上面两个软件没有安装,需要安装这两个软件
yum install -y rpcbind nfs-utilsC. 启动B中安装的软件
systemctl start rpcbind && systemctl enable rpcbind
systemctl start nfs && systemctl enable nfsD. 配置nfs权限文件
配置权限可以直接修改/etc/exports文件,也可以在/etc/exports.d目录下,添加*.exports文件。
文件内容格式为:目录 IP/IP网段(nfs选项)
文件内容每一个权限的占用一行,选项一般使用较多的搭配项为,rw/ro,sync,no_root_squash,rw表示读写,ro表示只读
sync,表示数据写入到内存和硬盘,保证数据不会丢失,当客户端用root身份挂载时候,nfs服务器将其映射为root用户.E. 执行权限的加载 命令,exportfs -rav 执行这个命令,并不需要去重启nfs服务。
F. 客户端使用如下命令去挂载,172.16.0.1表示服务器的ip地址,vers 代表协议类型,支持3,4,4.1等,/mnt表示服务器的
共享目录,/tmp为本地目录
mount -t nfs 172.16.0.1:/mnt /tmp -o vers=4G. 挂载成功后,使用df命令,nfs4所在的哪一行为挂载的nfs文件系统
然后就可以,cd /tmp,对这个目录下进行读写文件等操作了,
至此nfsd服务全部搭建完毕。H. 查看nfs的日志,在系统日志/var/log/messages中,可以用vim打开,搜索nfs关键字。
-
nfs-ganesha搭建
A. 从github下载nfs-ganesha,按照官网给的编译文档进行编译,并将相应的二进制ganesha.nfsd ,拷贝/usr/bin/目录下B. 配置nfs-ganesha的systemd服务,从nfs-ganesha/src/scripts/systemd目录下,将nfs-ganesha-lock.service.el7,nfs-ganesha.service.el7
拷贝到目录/usr/lib/systemd/system,并去掉后缀el7,然后执行命令systemctl daemon-reloadC.配置nfs-ganesha的配置文件,/etc/ganesha/ganesha.conf内容大概如下,
EXPORT
{Export Id (mandatory, each EXPORT must have a unique Export_Id)
Export_Id = 12345;
Exported path (mandatory)
Path = /mnt;
Pseudo Path (required for NFSv4 or if mount_path_pseudo = true)
Pseudo = /mnt;
Restrict the protocols that may use this export. This cannot allow
access that is denied in NFS_CORE_PARAM.
Protocols = 3,4;
Access type for clients. Default is None, so some access must be
given. It can be here, in the EXPORT_DEFAULTS, or in a CLIENT block
Access_Type = RW;
Whether to squash various users.
Squash = no_root_squash;
Allowed security types for this export
Sectype = sys,krb5,krb5i,krb5p;
Exporting FSAL
FSAL {
Name = VFS;
}
}
具体配置可以参照,github文档D. 启动nfs-ganesha服务,执行systemctl start nfs-ganesha,
然后检查nfs-ganesha状态,执行systemctl reload nfs-ganesha,E. client挂载与nfsd client挂载方式一样,挂载成功后,说明nfs-ganesha搭建完成
nfs服务常见异常问题解决办法
1. 当nfs 服务器宕机或者nfs服务挂掉时,客户端未进行正常的umount,这时候客户端执行df命令,或者cd 到挂载路径,
client会hang住,客户端可以执行 umount 挂载路径 -fl
2. 当客户端在服务器的授权正常时,client mount不了服务器的目录,可以在服务器的/var/log/messages中查下,是不是
nfsd最大块的问题,就是当前nfsd支持传输的最大块大小,不能满足client传输的块大小,
实质上就是nfsd设置的块大小过小,
解决办法是:在nfs服务器上执行,echo 1048576 > /proc/fs/nfsd/max_block_size
内核目前支持的最大块大小为1M