本笔记来源: 文件共享服务FTP、NFS、Samba数据同步实战_哔哩哔哩_bilibili
把网络中的资源通过NFS共享出来,共享出来以后,通过挂载NFS的远程资源把它挂到本机,一旦挂到本机以后,就和使用本地硬盘没有区别。这种逻辑带来的结果就是多个用户同时把NFS资源挂载到本机,可能会出现多个用户同时编辑一个文件的情况,必然会产生冲突问题。因为都在打开这个文件,会造成这个文件的破坏。所以在NFS服务器中,为了保证数据的一致性,它有很多相关的NFS进程来保证文件的完整性,所以NFS比其他文件服务要复杂。体现在端口号复杂,因为它的端口号是变化的。端口变化用户去连接NFS服务器呢,这就涉及到注册中心。
什么是注册中心: 服务提供者把提供的服务注册在注册中心上,用户只需联系注册中心就行了,注册中心就把服务器的地址提供给用户,继而就可以连接了。有点像某宝的概念
Network File System网络文件系统,基于内核的文件系统。Sun公司开发,通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,基于RPC(Remote Procedure Call Protocol远程过程调用) 实现RPC采用C/S模式,客户机请求程序调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行
RPC服务提供了注册中心的功能。NFS再启动的时候,会把自己的端口信息注册到RPC服务中,然后RPC服务就记录了你当前服务端使用的端口
安装rpcbind.service
查看状态
rpcbind.sock负责监听端口号111,通常rpcbind.service是没有启动的,它俩相分离,而rpcbind.sock是启动的,只有用户访问这个端口时,才会自动激活rpcbind.service,它才会启动 .
那我们会有疑问,服务都没启动,谁会监听111呢,下图就说明了一切。可以看出是systemd负责监听111,当用户访问时,它会自动激活rpcbind.service
安装nfs
通过安装过程发现,nfs与rpcbind是有依赖性的
启动nfs
按照理论逻辑当nfs启动的时候它会自动把端口号注册到rpcbind
如下图,看到rpcbind的服务启动了起来,之前没有起来,现在为什么突然起来了呢?我们知道从CentOS7开始服务能自动解决依赖性,当nfs启动的时候,又因为rpcbind与它有依赖,所以nfs会连着它也一起启动。
nfs支持网络共享和远程的客户端进行远程的挂载
rpc.statd: 当有多个用户访问资源时,会对某个文件同时进行修改,可能造成这个文件破坏,为了避免这个问题,开启这个进程进行保护。ftp是没有这个功能的,所以ftp不支持同时在线修改,它支持在线下载到本地,然后在本地修改
nfs-utils需在客户端和服务端都要安装
/usr/sbin/showmount : 客户端程序。可以通过showmount命令查看nfs上的共享资源 ,也可以挂载资源
nfs只能用于内网环境中,不能应用于外网,因为nfs端口具多且易变化,防火墙不容易配置
/etc/exports #主配置文件 放共享资源的共享规则
/etc/exports.d/*.exports #子配置文件
这两个文件都行,随便选
/dir 主机(opt1,opt2) 主机2(opt1,opt2)
格式说明:
主机格式
单个主机: ipv4, ipv6, FQDN
IP networks: 两种掩码格式均支持
172.18.0.0/255.255.0.0
172.18.0.0/16
wildcards: 主机名通配.例如*.magedu.com.IP不可以
netgroups: NIS域的主机组.@group_name 用的不多
anonymous:表示使用*通配所有客户端 匿名,相当于*
每个条目指定目录导出到的哪些主机,及相关的权限和选项
默认选项: (ro,sync,root_squash,no_all_squash)
ro,rw 只读和读写
async 异步,数据变化后不立即写磁盘,性能高 #数据变化后不立即写磁盘,先写入到缓冲区中,过一段时间再写入磁盘,性能高,但有可能会丢数据
sync(1.0.0后为默认)同步,数据在请求时立即写入共享存储磁盘 #即当你远程的把数据写入磁盘以后,会立即写入磁盘中去,不会放到缓存里.安全可靠,性能不好
root_squash (默认) 远程root映射为nfsnobody,UID为65534,CentOS8为nobody,早期版本是4294967294(nfsnobody) #压榨root
no_root_squash 远程root映射成root用户
all_squash 所有远程用户(包括root)都变成nfsnobody,CentOS8为nobody
no_all_squash (默认)保留共享文件的UID和GID #普通用户不压榨
anonuid和anongid 指明匿名用户映射为特定用户UID和组GID,而非nfsnobody,可配合all_squash使用
Ps:
LDAP:轻量级的目录访问协议 #它可以集中的存储所有账号,即其他机器的账号都来自于它,这样用它来登录验证,就能达到uid统一的效果,不用担心用户在不同的机器上访问UID不同,造成权限不同。
exportfs: 可用于管理NFS导出的文件系统
常见选项:
• -v 查看本机所有NFS共享
• -r 重读配置文件,并共享目录
• -a 输出本机所有共享
• -au 停止本机所有共享
客户端NFS挂载
NFS相关的挂载选项: man 5 nfs
• fg(默认)后台挂载 #就算挂载不上,也不影响前台挂载命令
• bg后台挂载
• hard (默认) 持续请求 #就算挂不上去,也一直挂,就卡在那
• soft 非持续请求 #挂不上去,可以等一会再挂,不会导致命令卡在那儿无法操作
• intr和hard配合,请求可中断(ctrl+c中断)
•rsize和wsize一次读和写数据最大字节数, rsize=32768
•_netdev 无网络不挂载
提示: 基于安全考虑, 建议使用nosuid,_netdev,noexec挂载选项
范例: 临时挂载NFS共享
mount -o rw,nosuid,fg,hard,intr 172.16.0.1:/testdir /mnt/nfs/
范例: 开机挂载
vim /etc/fstab
172.16.0.1:/public /mnt/nfs nfs defaults,_netdev 0 0
可使用autofs服务按需要挂载外围设备,NFS共享等,并在空闲5分钟
软件包: autofs
服务文件: /usr/lib/systemd/system/autofs.service
配置文件: /etc/auto.master
参看帮助: man 5 autofs
所有导出到网络中的NFS启用特殊匹配-host至'browse'
范例: /net目录可以自动挂载NFS共享
cat /etc/auto.master
/net -hosts
cd /net/192.168.8.100/
要使用自动挂载服务,首先要安装: yum -y install autofs
•相对路径法: 将挂载的目标文件夹(也就是挂载点)分成 dirname 和 basename 分别配置, 可能会影响现有的目录结构
•绝对路径法: 直接匹配全部绝对路径名称,不会影响本地目录结构
1. /etc/auto.master格式
挂载点的dirname 指定目录的配置文件路径(也就是子配置文件)
2. 指定目录的配置文件格式
挂载点的basename 挂载选项 选项设备
范例: 相对路径法
[root@centos8 ~]#vim /etc/auto.master
/misc /etc/auto.misc
[root@centos8 ~]#vim /etc/auto.misc
cd -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
范例: 相对路径法为支持通配符
vim /etc/auto.master
/misc /etc/auto.misc
vim /etc/auto.misc
#表示/misc下面的子目录和nfs共享/export目录的子目录同名
* server:/export/&
1./etc/auto.master
/- 指定配置文件路径
2、指定配置文件格式
绝对路径 挂载选项 选项设备
范例: 绝对路径法
vim /etc/auto.master:
/- /etc/auto.direct
vim /etc/auto.direct:
/foo -fstype=nfs server1:/export/foo
/user/local -fstype=nfs.vers=3 server1:/usr/local
/mnt/cdrom -fstype=iso9660 :/dev/cdrom
利用自动挂载可以实现:把家目录都挂载到一个目录里,网络中有很多用户,他们分别在不同的主机上登录. 比如以wang的身份,它在网络上有三台机器, 他在每个机器上都有账号,他在第一台机器上登录并在自己家目录上新建了一些文件,然后他又去到别的机器上也以王的账号登录,但他看到的家目录数据是这台机器的数据,并不是上一台机器家目录的数据,就是说数据不能漫游。所以我们可以专门搭一台NFS服务器,把所有用户的家目录都映射到NFS共享的目录下面去,这样无论我们去哪台机器上登录看到的资源都是同一台NFS服务器的资源。可以自动挂载或者永久挂载(/etc/fstab),手动挂很麻烦
如下图,甲用户想上传资源到LAP服务器上,例如这个资源存放目录在/var/www/html/wp-content里,
如果甲用户上传的资源没有进行nfs挂载,只是上传到本地,那么当其他用户访问时可能会访问其他LAP服务器,导致访问不到甲用户上传的资源,为了解决这个问题,我们可以把这个目录挂载到nfs服务器上的/data/www上。用户上传资源到/var/下这个目录实际上上传到了/data/www下。像图片,静态资源上传到nfs服务器上,像文章上传到Mysql服务器上
1.创建共享目录
2.编辑共享规则
#我们要共享哪个目录 #共享哪个主机 不加括号就是只读
/data/www *
3.重启服务
systemctl restart nfs或exportfs -r #exports -r加载配置文件,不用重启
exportfs -v #查看有哪些共享目录
1.查看服务器上有哪些共享目录
2.在客户端上把共享目录挂载到本机
4.df -h验证是否挂载成功