文件共享NFS&&autofs
NFS服务
-
ftp vsftpd
-
Samba linux和Windows之间进行文件共享
-
专用于linux和linux之间的专门的文件共享服务 (NFS服务),network,filesystem网络文件系
NFS服务可以把远程linux机器上面的文件目录数据,通过挂载的形式,映射在用户本地机器
(linux用户在自己本地有一个文件夹,通过NFS服务把本地这个文件夹,远程挂载到网络中一台机器的文件夹)
本地/mnt -----------------------远在广东的一台服务器/chaogedir
NSF特点
NFS很想Windows的网络共享,Samba服务
Samba服务主要用于办公室的局域网共享服务
NFS发展有30年,代表一个稳定的网络文件共享系统,中小型企业最佳的文件共享选择
共享存储的形式
分为软件,硬件共享存储的形式
软件共享存储 -------NFS服务搭建
硬件共享存储
中小型企业一般不会购买硬件存储设备,成本太高,大公司业务发展特别快,想要购买硬件设备分散网站的压力,如果网站的压力持续增长,硬件存储设备就得继续扩展,成本过高
因此主流的企业都会选择开源的软件替代硬件设备,比如NFS集群服务的搭建
NFS和RPC的概念
NFS通过port传输数据,NFS服务在传输数据的时候,端口是随机选择的(自己重启NFS服务,查看端口是否在变化)
答案就是NFS是通过RPC服务,进行一个端口注册,实现告知用户,NFS的工作端口是哪一个
什么是RPC
RPC(远程过程调用)
linux上使用NFS服务,必须启动2个服务
-
NFS服务
-
RPC服务
NFS服务通过RPC注册自己的端口功能
RPC服务功能就是记录每个NFS功能对应的一个端口号,并且RPC保证了NFS客户端发出请求的时候,把该功能对应的端口信息告知NFS客户端,保证客户端能够正确连接到NFS服务端的端口,达到数据传输的目的
RPC好比是一个中介,处于客户端和服务端之间
RPC服务如何知道NFS服务端的端口信息呢
答案是:NFS服务器启动的时候,会随机采用若干个端口,并且主动在RPC服务中进行注册
如此一来,RPC服务就正确知道所有NFS服务端的端口功能了,RPC夫妇默认使用linux的111端口和NFS客户端,进行一个交流,并且通过111端口将正确的NFS服务端的端口信息,告知给NFS客户端。
因此NFS客户端就能够正确找到NFS服务端的端口信息了
RPCBIND
RPC在centos7系统平台下,实现的软件,RPCBIND服务
NFS服务的配置,必须先运行好RPCBIND服务才行
如果RPCBIND服务重启了,原本注册的NFS服务端的信息也就失效了,你还得再重启NFS服务端,重新注册信息才行
如果你仅仅修改了NFS配置文件,不需要重启NFS服务端,因为重启之后,端口的信息就更新了还得重新注册,只需要执行如下命令,重新读取NFS配置文件即可
exrpotfs -rv
systemctl reload nfs
?
安装配置NFS
-
nfs-utils: NFS服务的主程序,包括了rpc.nfsd.rpc.mountd这两个守护进程,相关的配置文件信息
-
rpcbind:centos7,是一个RPC服务进程
[root@lzyunv ~]# yum -y install nfs-utils rpcbind
?
环境配置
NFS是c/s模式,client,server准备一个NFS客户端,两天linux机器
在NFSserver端 创建一个共享的文件夹,且设置相应的读写权限
[root@lzyunv ~]# mkdir /nfsalex
[root@lzyunv ~]# ls /nfsalex/
[root@lzyunv ~]# chmod -Rf 777 /nfsalex/
?
修改NFS服务的配置文件
/etc/exports
nfs配置文件,想要遵守如下的规矩
?
NFS服务端共享目录, NFS客户端地址(参数1,参数2....) NFS客户端地址2(参数1,参数2....)
?
例如
#把nfs服务端的根目录共享出去,且允许两个主机名为clientl client2的机器,进行一个rw,读写权限
/ clientl(rw) client2(rw)
#允许任意的客户端,都能够挂载到此NFS服务端的 /public目录下
/public *(rw)
?
#只允许指定IP地址的服务器,能够挂载此NFS服务端的/home/alex文件夹 且是只读的
/home/alex 192.168.124.42(ro)
nfs语法参数解释
1.nfs共享目录:是NFS服务器需要共享出去的实际目录,文件夹,必须写绝对路径,且注意目录的读写本地权限,如果你允许客户端读写操作,other有一个读写的权限(user,group,other 三个身份)
?
2.NFS客户端地址,也就是NFS服务器授权可以访问共享目录的地址,可以写主机名,可以写通配符,IP地址
?
3.权限参数,对NFS授权的客户端,进行权限控制的参数,详细见下面的案例
?
?
nfs客户端地址形式
单一客户端 192.168.124.113 用的很少
?
允许整个网段访问 192.168.124.0/24 指定局域网网段,用的还是很多的
?
授权整个域名客户端 nfs.alex.com 用的很少
授权子域名客户端 *.alex.com 用的很少
nfs客户端的权限参数
ro 只读
rw 读写
root_squash 当nfs客户端以root账号访问,NFS服务端共享目录数据的时候,把该root映射为NFS服务端的一个匿名用户,该用户的UID,GID会变成nfsnobody的信息
no_root_squash 几乎和上面一样 root账户会映射为root账户,非常不安全,禁用
all_squash 所有nfs客户端的用户映射为匿名用户很安全,生产环境常用
?
sync 数据同步写入到内存和磁盘,优点是保证内存数据安全,但是效率太低
async 数据先写入到内存,再持久化到磁盘,效率非常高,但是可能会有数据丢失的隐患
启动NFS服务端的文件目录共享
NFS服务都是基于RPC的111通讯端口,必须确保先启动RPC服务
如果RPCBIND服务停止了,111端口也不会挂掉,因为centos7还提供了一个rpcbind.socket服务运行着
1.保证rpcbind服务正常运行
systectl status rpcbind
NFS服务端部署
1. 确保rpcbind服务正常启动
?
2.创建nfs服务端共享的目录,且进行权限修改
[root@localhost ~]# mkdir -p /nfsalex/
[root@localhost ~]# chmod -Rf 777 /nfsalex/
[root@localhost ~]# id nfsnobody
uid=65534(nfsnobody) gid=65534(nfsnobody) 组=65534(nfsnobody)
[root@localhost ~]# chown -R nfsnobody.nfsnobody /nfsalex/
?
3.在nfs共享目录中,创建测试的文件[root@localhost ~]# touch /nfsalex/alex你是个天才.txt
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# touch /nfsalex/alex爱丽魔力转圈圈.txt
?
4.修改nfs服务端的配置文件,进行客户端授权
[root@localhost ~]# cat /etc/exports
/nfsalex *(insecure,rw,sync) #参数解释,允许客户端大于1024的端口发请求
?
5.重新加载nfs,读取配置文件
[root@localhost ~]# systemctl restart nfs
?
6检查本地的nfs服务挂载情况
[root@localhost ~]# showmount -e 127.0.0.1
Export list for 127.0.0.1:
/nfsalex *
?
7.再次检查nfs服务端的共享参数
[root@localhost ~]# cat /var/lib/nfs/etab
/nfsalex *(rw,sync,wdelay,hide,nocrossmnt,insecure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,insecure,root_squash,no_all_squash)
?
8.此时可以把nfs服务端本地,当做一个客户端,模拟挂载访问试试
[root@localhost ~]# mount -t nfs 127.0.0.1:/nfsalex /mnt/
[root@localhost ~]# mount -l |grep mnt #查看挂载情况
[root@localhost ~]# ls /mnt/
alex爱丽魔力转圈圈.txt alex你是个天才.txt
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# ls
alex爱丽魔力转圈圈.txt alex你是个天才.txt
[root@localhost mnt]# touch mnt到此一游.txt #表示nfs目录共享是可读,可写的
[root@localhost mnt]# ls
alex爱丽魔力转圈圈.txt alex你是个天才.txt mnt到此一游.txt
[root@localhost /]# ls /mnt/
[root@localhost /]# ls /nfsalex/
alex爱丽魔力转圈圈.txt alex你是个天才.txt mnt到此一游.txt
?
9.如果不用nfs目录共享了,可以直接取消挂载
[root@localhost /]# umount /mnt/
?
nfs客户端远程挂载使用
1.准备一个新的linux客户端机器,并且安装nfs相关的软件
[root@localhost ~]# yum -y install nfs-utils rpcbind
?
2.确保rpcbind服务正常
[root@localhost ~]# systemctl start rpcbind
[root@localhost ~]# systemctl status rpcbind
● rpcbind.service - RPC bind service
Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
Active: active (running) since 五 2020-07-17 09:19:52 CST; 1h 30min ago
Process: 668 ExecStart=/sbin/rpcbind -w $RPCBIND_ARGS (code=exited, status=0/SUCCESS)
Main PID: 674 (rpcbind)
Tasks: 1
CGroup: /system.slice/rpcbind.service
└─674 /sbin/rpcbind -w
?
7月 17 09:19:47 localhost.localdomain systemd[1]: Starting RPC ...
7月 17 09:19:52 localhost.localdomain systemd[1]: Started RPC b...
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost ~]#
?
3.可以远程的检查,nfs服务端的共享情况
[root@localhost ~]# showmount -e 192.168.124.46
Export list for 192.168.124.46:
/nfsalex *
?
4.进行以nfs协议的挂载使用了
[root@localhost ~]# mount -t nfs 192.168.124.46:/nfsalex /lz888/
?
5.检查nfs客户端本地的挂载情况
[root@localhost ~]# mount -l |tail -1
192.168.124.46:/nfsalex on /lz888 type nfs4 (rw,relatime,vers=4.1,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.124.45,local_lock=none,addr=192.168.124.46)
?
6.进入本地挂载的目录,尝试访问远程的NFS服务端数据
root@localhost ~]# cd /lz888/
[root@localhost lz888]# touch 大碗宽面.txt
[root@localhost lz888]# ls
alex爱丽魔力转圈圈.txt mnt到此一游.txt
alex你是个天才.txt 大碗宽面.txt
?
7,如果不想用了,可以卸载目录挂载
[root@localhost ~]# umount /lz888/
?
8,。如果挂载,取消挂载出现问题,怎么办
#取消挂载失败, 注意, 不要呆在挂载点中
[root@localhost lz888]# umount /lz888/
umount.nfs4: /lz888: device is busy
[root@localhost lz888]# cd
[root@localhost ~]# umount /lz888/
?
?
如果挂载都失败,检查服务端的配置,以及防火墙是否打开
nfs自动挂载服务
配置开机挂载服务,每次开机都能使用nfs
1把挂载目录写入到,开机自动挂载文件中
/etc/fsrab文件
[root@localhost ~]# tail -1 /etc/fstab
192.168.124.46:/nfsalex /lz888 nfs defaults 0 0
autofs自动挂载服务
如果开机就强制挂载很多内容,但是又不经常使用,会给服务器造成很大的压力
因此一些具有动态特性的文件系统,可以选择进行动态挂载
比如
光盘,软盘,u盘,移动硬盘,NFS,SMB等文件系统
?
autofs特点
autofs和mount命令的不同点在于
autofs是一个守护进程,他会在后台检测用户是否需要访问某一个还未挂载文件系统,autofs会自动检测该文件系统是否存在,如果存在如果用户过则进行挂载,如果用户过了一段时间没有使用该文件系统。autofs自动将其卸载,节省人力维护的成本,以及节省服务器资源。
缺点
autofs特点是,当用户请求时才挂载文件系统,如果是高并发的业务场景,大量的用户并发访问文件系统
autofs突然进行大量的挂载,会给服务器造成很大的压力,因此在一些高并发场景下,宁愿保存持续挂载也不用autofs
安装autofs工具
[root@localhost ~]# yum -y install autofs
修改autofs配置文件
打开autofs配置文件,找到第七行,添加如下代码
vim /etc/anto.master
/misc /etc/auto.misc
/- /etc/auto.home #添加这里的配置参数
修改自定义的自动挂载配置文件
[root@localhost ~]# cat /etc/auto.home
?
启动autofs
systemctl start autofs
检查本地文件系统情况
1.检查现有的本地挂载文件系统情况
root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 17G 6.0G 12G 35% /
devtmpfs 471M 0 471M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 8.6M 479M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 1014M 157M 858M 16% /boot
tmpfs 98M 8.0K 98M 1% /run/user/42
tmpfs 98M 40K 98M 1% /run/user/0
/dev/sr0 4.2G 4.2G 0 100% /run/media/root/CentOS 7 x86_64
?