企业级nfs网络文件共享服务

前言

环境:centos 7.9

什么是nfs网络文件共享服务

NFS是Network File System的缩写,中文意识是网络文件系统,它的主要功能是在网络(一般局域网)间让不同的主机同享文件或目录,NFS客户端可以通过挂载的方式将NFS服务端共享的目录挂载到本地客户端的系统中(就是某一个挂载点下),这样在本地客户端看来NFS服务端的共享目录就好像自己的磁盘分区或目录一样,而实际上却是远端的NFS服务器的目录。
其实NFS就像Windows下目录共享功能,在Windows服务器中共享某一个目录,然后另外一台Windows客户端就能在“我的电脑”通过映射网络驱动器的方式,再分配一个盘符,这样就生成了一个映射盘,这个映射盘内容就是Windows服务器中共享目录的内容了。

RPC服务

NFS所支持的功能非常多,而不同的功能都会使用不同的程序来启动,而不同的程序就会有不同的端口,因此NFS的端口就无法固定,这样一来就造成了NFS客户端与NFS的服务端通信故障,为了解决这个问题,就有了RPC(Remote Procedure Call)服务来帮忙,RPC服务最主要的功能是记录每个NFS功能对应的端口,并且在NFS客户端请求NFS服务端时将端口和信息准确的传递,从而达到数据的交互,我们可以简单的理解RPC为NFS客户端和NFS服务端的中介,就像租房,顾客找到中介说要租房,中介介绍房子,中介就相当RPC,房子的所有者就相当于NFS服务端,顾客租房找中介,中介要预先有房子主人的信息才能将房源信息告诉顾客。

说明:在启动NFS服务前,必须先启动RPC服务,因为NFS服务启动时要向RPC服务注册,所以必须先启动RPC服务,如果RPC服务重启了,那么原来注册的端口数据也会丢失,因此NFS服务也必须重启才能重新向RPC注册端口信息,而如果仅仅是修改了NFS服务的配置信息,是不需要重启NFS或RPC服务的,直接nfs reload即可或exportfs -rv 即可使配置文件/etc/exportfs立即生效。

yum安装NFS服务

rpc是由rpcbind服务来提供的,这里就通过yum方式来安装nfs和rpc

yum -y install nfs-utils rpcbind

启动RPC、NFS服务:

#启动rpcbind.service,rpcbind.service监听111端口
systemctl enable --now rpcbind.service
#启动NFS服务					
systemctl enable --now nfs-server.service			
#查看nfs服务向RPC服务注册的端口信息,发现很多端口
rpcinfo -p localhost						

nfs服务默认需要启动的服务或进程至少有NFS quotas(rpc.rquotad)、NFS daemom(nfsd)、NFS mountd(rpc.mountd)
还可以通过ps -ef| egrep "rpc|nfs" 查看,如下:

[root@node2 ~]# rpcinfo -p localhost
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100005    1   udp  20048  mountd
    100005    1   tcp  20048  mountd
    100024    1   udp  50678  status
    100024    1   tcp  35897  status
    100005    2   udp  20048  mountd
    100005    2   tcp  20048  mountd
    100005    3   udp  20048  mountd
    100005    3   tcp  20048  mountd
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100003    3   udp   2049  nfs
    100227    3   udp   2049  nfs_acl
    100021    1   udp  57905  nlockmgr
    100021    3   udp  57905  nlockmgr
    100021    4   udp  57905  nlockmgr
    100021    1   tcp  36191  nlockmgr
    100021    3   tcp  36191  nlockmgr
    100021    4   tcp  36191  nlockmgr

nfsd:主要功能是管理NFS客户端是否能够登陆NFS服务器主机,包括身份ID判别等;
rpc.mountd:主要功能是管理NFS文件系统,当客户端登陆进来后,它会读取/ect/exports配置文件来对比客户端的权限,如果通过了,客户端就能正
常取得使用服务端文件的权限了;
rpc.rquotad:主要功能是管理磁盘配额;
rpc.lockd:可以用来锁定文件,用于多客户端同时写入,此功能非必要;
rpc.statd:检查文件的一致性,与rpc.lockd相关,此功能非必要;
rpc.idmapd:名字映射后台服务;

配置文件/etc/exports讲解

刚安装好的NFS服务其默认配置文件是:/etc/exports,此文件是空的,需要用户自行配置,配置格式如下:

NFS共享目录	NFS客户端IP(参1,参2,参3,.....)

执行man exports 可以查看更具体的使用方法,有多个共享目录的话就写多行;

下面演示一下范例并讲一下NFS客户端地址的几种写法:

1、/data	192.168.118.0/24(rw,sync)
#以上命令表示服务端共享目录是/data,注意被共享的目录一定要使用绝对路径,192.168.118.63/24表示客户端地址是192.168.118.*网段,24表示
255.255.255.0,注意24与后面的括号不要有空格,rw表示运行读写,sync表示数据同步写入服务端磁盘;192.168.118.0/24这种写法可以授权整个网
段都能访问NFS服务端,是企业中较为常用的写法;
2、/data	192.168.118.63(rw,sync)	
#以上命令根示例1差不多,只是这条命令仅表示192.168.118.63客户端能访问;
3(有异常,用第1条吧)、/date	192.168.118.*(rw,sync)	
#跟1类似,也可以权限整个网段,但不推荐这样写;正常的写法:/date	192.168.118.0/24(rw,sync)
4、/data	 *(rw,sync)	
#星号表示所有主机

5、如果是k8s测试集群用途的nfs,可以这样配置
/k8s *(rw,sync,no_root_squash)

配置好NFS服务后,可以查看NFS配置的参数以及默认自带的参数:cat /var/lib/nfs/etab

NFS配置权限常用参数说明

rw:Read-write,表示可读可写;
ro:Read-only,表示只读;
sync:客户端请求写入磁盘时,数据同步写入到服务端磁盘才返回,优点:数据安全不丢失,缺点:性能比不启用该参数要差;
async:写入数据时先写入内存缓冲区,直到磁盘有空档才写入磁盘,优点:可以提升写入效率,缺点:服务端异常关机内存数据会丢失;
no_root_squash:访问共享目录的用户如果是root,它对该共享目录具有 root 的权限,不安全,不建议使用;
root_squash:访问共享目录的用户如果是root,则它的权限将被压缩成为匿名使用者,通常他的 UID 与 GID 都会变成 nfsnobody 身份;
all_squash:无论访问共享目录的用户身份如何,他的权限都被压缩成匿名用户,同时他的 UID 与 GID 都会变成 nfsnobody 身份;
anonuid:参数以anon*开头即指anonymous匿名用户,这个用户的UID设置值通常为nfsnobody的UID值,当然也可以自行设置这个UID值。但是,UID必
须存在于/etc/passwd中。在多NFS Clients时,如多台Web Server共享一个NFS目录,通过这个参数可以使得不同的NFS Clients写入的数据对所有
NFS Clients保持同样的用户权限,即为配置的匿名UID对应用户权限,这个参数很有用,一般默认即可;
anongid:同anonuid,区别就是把uid(用户id)换成gid(组id);

编辑/etc/exports配置文件

#创建共享目录
mkdir -p /data/k8s_data								

# 输入共享目录以及授权客户端访问,保存退出,注意括号(前后不要有空格
# 注意如果是为k8s安装nfs,参数加一个no_root_squash,安装mysql有用
cat >> /etc/exports <<'EOF'
/data/k8s_data 192.168.118.0/24(rw,sync,no_root_squash)		
EOF
#使配置立即生效,也可以systemctl reload nfs-server.service
exportfs -rv
#查看NFS配置的参数以及默认自带的参数,显示使用的用户为匿名用户
cat /var/lib/nfs/etab
#查看安装nfs服务默认生成的用户
grep -i nfs /etc/passwd
#把共享目录授权给上面查到的用户
chown -R nfsnobody:nfsnobody /data/k8s_data

客户端挂载服务端的共享目录

#客户端也要安装nfs-utils,主要是为了有mount.nfs、showmount命令
yum -y install nfs-utils
#不用启动nfs-server服务			
systemctl disable --now nfs-server.service
#客户端查看服务端有哪些共享目录
showmount -e 192.168.118.130
#客户端挂载NFS服务端的共享目录
mount.nfs 192.168.118.130:/data/k8s_data  /mnt
#查看挂载的结果	
df  -Th
#设置客户端开机自动挂载NFS服务端共享目录	
echo "/bin/mount.nfs 192.168.118.130:/data/k8s_data  /mnt "	>> /etc/rc.local
# 记得加权限
chmod a+x /etc/rc.local
chmod a+x /etc/rc.d/rc.local

客户端卸载挂载

客户端取消挂载nfs目录,其实和平时取消挂载磁盘一样,即直接使用umount取消挂载即可,如下:

umount  /mnt					

NFS服务的重点知识梳理

多个客户端可以共同挂载一个远程的nfs共享目录,当多个NFS客户端访问服务器端的读写文件时,需要具有以下几个权限:

1、NFS服务器/etc/exports设置需要开放可写入的权限,即服务端的共享权限。
2、NFS服务器实际要共享的NFS目录权限具有可写入w的权限,即服务端本地目录的安全权限。
3、每台机器都对应存在和NFS默认配置UID的相同UID65534的nfsnobody用户(确保所有客户端的访问权限统一,否则每个机器需要同时建立相同UID的用户,并覆盖NFS的默认用户配置)。

只有满足上述三个条件,多个NFS客户端才能具有查看、修改、删除其他任意NFS客户端上传文件的权限,这在大规模的集群环境中作为集群共享存储时尤为重要。

重点NFS服务文件及命令

1、主配置文件:/etc/exports文件,一行为单位,一个共享目录就写一行;
2、完整参数配置文件:/var/lib/nfs/etab,存放NFS服务完整的参数;
3、/usr/sbin/exportfs命令:NFS服务的管理命令,修改主配置文件后直接使用该命令使配置生效,exportfs -rv 等价于systemctl reload nfs-server.service;
4、/usr/sbin/showmount命令:常用于在客户端查看NFS服务端配置及挂载情况,语法:showmount -e ip

总结

1、服务端安装rpc、nfs服务

yum install rpcbind nfs-utils -y
#必须先启动rpcbind 服务
systemctl start rpcbind.service
#然后再启动nfs服务
systemctl start nfs-server.service
#设置开机自启
systemctl enable rpcbind.service
#设置开机自启
systemctl enable nfs-server.service

2、编辑NFS服务端配置文件/etc/exports

NFS共享目录	NFS客户端地址(参1,参2,参3,.....)		#这是书写格式,有多个共享目录就写多行
# 创建共享目录
mkdir -p /data/k8s_data 
cat >> /etc/exports <<'EOF'
/data/k8s_data 192.168.118.0/24(rw,sync,no_root_squash)		
EOF

3、客户端安装rpc服务

#客户端安装nfs-utils服务,提供mount.nfs、showmount命令
yum install nfs-utils -y
#可以不用启动nfs-utils
systemctl disable --now nfs-utils
showmount -e 192.168.118.140						#客户端查看NFS服务端有哪些共享目录
mount -t nfs 192.168.118.140:/data/k8s_data  /mnt		#客户端挂载NFS服务端的共享目录
df  -h												#查看挂载的结果,已正常挂载
ls /mnt												#进入挂载点查看编辑文件
echo "/bin/mount -t nfs 192.168.118.140:/data/k8s_data  /mnt "	>> /etc/rc.local		#设置客户端开机自动挂载NFS服务端共享目录
# 记得加权限
chmod a+x /etc/rc.local
chmod a+x /etc/rc.d/rc.local

4、客户端卸载nfs目录

#卸载
umount  /mnt
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值