网络文件共享服务介绍
一:存储架构
根据存储设备所在的位置分类
1、DAS
DAS:
(Direct-Attached Storage)直连式存储。服务器使用专用线缆(例如SCSI)和存储设备(例如磁盘阵列)进行直连。
特点
:
- 优点是储设备只能连接到一台主机使用,无法共享,成本较高,且安全性可靠性较低
- 缺点是容量有限,不适合大规模的数据存储和共享。
使用场景
:个人电脑、小型企业、高性能计算环境等。
2、NAS
NAS:
(Network-Attached Storage)网络附加存储。服务器和存储设备非直连,而是通过
ip网络
进行连接,这样就实现了多台主机与存储设备之间的连接。
特点
:
- 优点是易于管理、容量可扩展、能够实现共享存储和备份
- 缺点存在IO瓶颈,性能较低,不适合高性能计算和数据库应用
使用场景
:文件共享、备份和存储等。
3、SAN
SAN:
(Storage Area Network)存储区域网络。基于NAS发展而来,通过
专用光纤通道交换机
访问数据,采用ISCSI、FC协议。
特点
:
- 优点:解决了NAS的IO瓶颈问题,因为采用光纤、iSCSI等协议来连接设备,速度很快。
- 缺点:价格昂贵、结构复杂、需要专业的维护和管理。
使用场景
:数据中心、虚拟化、云计算等环境
NAS和SAN区别
SAN:
可以理解为一种虚拟化存储的技术,它将存储设备从服务器中分离出来,形成一个独立的存储网络。
客户端访问这些存储设备,就像访问本地硬盘一样。因此,客户端可以对这些存储设备进行格式化、分区、挂载等操作。
NAS:
可以理解为一个存储服务器,它已经预先安装了操作系统和文件系统,并且已经格式化好了磁盘,因此客户端设备可以直接通过网络连接到NAS上来访问数据,而不需要进行格式化或设置文件系统等操作。
客户端设备可以通过网络共享协议(如SMB/CIFS、NFS、AFP等)访问NAS上的数据。
块存储和文件存储
- 块存储:
是将数据切分为固定大小的块(block),每个块都有唯一的地址,可以单独进行读写和处理。
DAS和SAN使用的就是块存储。 - 文件存储:
是将数据以文件形式存储在一个统一的文件系统中,每个文件都有唯一的名称和路径,文件系统可以通过文件名或路径名来定位文件。
NAS使用的就是文件存储。
二:文件共享服务
UNC 格式:
UNC:
(Universal Naming Convention)通用命名规则。由微软公司发明,是一种用于在网络上指定文件或文件夹位置的命名约定,允许用户通过网络共享访问文件和文件夹。
UNC格式广泛使用在windows中,Linux中也支持这种格式,例如使用Samba软件包来实现文件和打印机的共享。
格式:
\\server\share
使用反斜杠(\)作为分隔符
- server:表示共享资源所在的计算机名称或IP地址
- share: 表示共享资源的名称
注意:
UNC路径
不能指定端口号
,因为端口号不是共享资源的一部分,所以使用UNC格式的路径时不能指定端口号。
\\10.0.0.22:446\share 是错误的
1、FTP
FTP:
(File Transfer Protocol )文件传输协议,属于应用层协议,是NAS存储架构的一种协议,基于CS结构。
FTP和NAS的区别:
FTP是一个应用层协议,用于实现跨主机传输文件,NAS是一种网络架构,NAS可以使用各种协议进行文件传输,包括FTP、SMB、NFS等,因此,FTP可以用于在NAS中传输文件,但它本身不属于NAS这种网络架构。
FTP的特点:
跨平台:windows、linux等操作系统都支持FTP协议。
FTP工作原理:
采用的是双端口模式,分为命令端口和数据端口,命令端口对应命令通道,数据端口对应数据通道。
- 命令通道:客户端和服务端之间传输FTP命令和响应,以控制文件传输的整个过程。服务端的默认端口是tcp/21。
- 数据通道:客户端和FTP服务器之间实际传输数据的通道。
FTP的两种工作模式:
- 主动模式:FTP服务器主动连接客户端,这个时候FTP服务器的数据端口使用的是20端口。
- 被动模式:客户端主动连接FTP服务器,这时候FTP服务器的数据端口是随机的。
说明:
两种工作模式是针对数据通道的建立来说的,无论是主动模式还是被动模式,FTP客户端都需要连接到FTP服务器的21号端口,以建立命令通道。
FTP的工作流程:
(1)FTP服务端开启对21端口的监听,等待客户端的连接。
(2)客户端发起连接,通过连接到服务端的21端口,建立命令通道。
(3)进行数据交互:
- 主动模式:服务端主动找客户端建立数据通道,这个时候服务端使用的数据端口是20端口,客户端随机。
- 被动模式:客户端主动连接服务端,这个时候双方使用的端口都是随机的。
FTP的实现:
windows
:
- 客户端:浏览器 、资源管理器、Filezilla等
- 服务端:FileZilla Server、IIS等
Linux
:
- 客户端:ftp、wget、curl
- 服务端:vsftpd、Wu-ftpd
Linx中用于搭建FTP服务器的工具:VSFTP
特点
:性能好、下载速度快、单机可支持15k并发量。红帽默认使用的ftp服务端工具就是vsftp
2、NFS
NFS:
(Network File System) 网络文件系统,基于内核的文件系统。Sun 公司开发,通过使用 NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,基于RPC(Remote Procedure Call Protocol )远程过程调用实现。
NFS工作原理:
- 客户端发起挂载请求:客户端需要访问远程主机上的文件,它会向NFS服务器发起挂载请求。
- 服务器返回挂载信息:服务器返回需要挂载的目录信息,包括目录的文件系统类型、权限和访问方式等。
- 客户端进行挂载:客户端使用NFS协议挂载远程目录,将目录挂载到本地的一个挂载点上,此时客户端可以像访问本地文件一样访问远程文件。
- 客户端读写文件:客户端通过挂载点访问远程文件,当客户端需要读写远程文件时,它会发送NFS请求到服务器,请求服务器读取或写入文件数据。
- 服务器响应请求:服务器接收到客户端的请求后,会读取或写入相应的文件数据,并将结果返回给客户端。
- 客户端卸载挂载点:当客户端不再需要访问远程文件时,它会卸载挂载点,断开与NFS服务器的连接。
NFS使用的端口:
- Portmap(RPC bind)服务: Portmap服务使用TCP或UDP端口666666,它是NFS和其他RPC服务的注册和映射程序。
- NFS服务:NFS服务使用TCP或UDP端口2049,它是NFS协议的主要端口。
- Nlockmgr(Network Lock Manager)服务:Nlockmgr服务使用TCP或UDP端口32803,它用于提供NFS文件锁定服务。
- Mountd(Mount Daemon)服务:Mountd服务使用TCP或UDP端口20048,它是NFS挂载协议的主要服务。
NFS的相关进程:
- rpc.nfsd 最主要的NFS进程,管理客户端是否可登录
- rpc.mountd 挂载和卸载NFS文件系统,包括权限管理
- rpc.lockd 非必要,管理文件锁,避免同时写出错
- rpc.statd 非必要,检查文件一致性,可修复文件
说明:CentOS 6 开始portmap进程由rpcbind代替
NFS的使用场景:
场景一:Linux和LInux之间实现文件共享:
服务端共享出某个目录后,客户端直接挂载进行使用。
场景二:Linux和Windows之间实现文件共享:
Linux作为服务端,windows挂载linux的共享目录为本地的一个磁盘,Windows需要开启NFS客户端功能。
NFS的使用场景:
NFS:适用于需要在Unix和Linux系统之间进行文件共享的环境,例如服务器集群和高性能计算环境。
3、samba
Samba是一种基于Windows的文件共享协议开发而来的软件,它可以在Windows、Linux和Unix系统之间共享文件和打印机。Samba可以让Linux或Unix系统像Windows一样作为文件服务器,从而方便Windows系统用户访问和使用共享文件和打印机。
SMB协议:
(Server Messages Block)信息服务块协议,由ibm开发,最早用在微软的dos系统上面,windows之间的文件共享就是使用SMB协议实现的。
CIFS:
(common internet file system)通用网络文件系统,基于smb协议开发而来的文件系统,可以理解为SMB协议的升级版。
samba服务使用的端口:
默认是445和139端口
- 445端口:实现Internet文件共享
- 139端口:文件和打印共享
samba的使用场景:
场景一:Linux作为服务端,Windows作为客户端实现文件共享
通过网络驱动映射器映射为windows本地的一个磁盘。
场景二:windows作为服务端,linux作为客户端实现文件共享
samba服务存在的问题:
因为以前永恒之蓝病毒和smb1的漏洞,运营商直接把139和445这两个端口给屏蔽了,即使手动在防火墙打开这两个端口也没法使用。
windows的文件共享又默认使用的是139和445端口,无法更改客户端的端口。
在linux作为服务端,windows作为客户端的时候,因为windows默认端口没法更改,且使用的是UNC路径进行访问。
解决方法:
方法一:配置本地端口映射转发
# https://blog.csdn.net/weixin_42552016/article/details/128421145
netsh interface portproxy add v4tov4
listenport=445 listenaddress=127.0.0.1 connectport=4450 connectaddress=116.116.132.151
方法二:使用端口转发驱动
# Multi Port Forwarder驱动
# https://tubecast.webrox.fr/landrive/portmapping.html
# https://www.verigio.com/products/multi-port-forwarder/default
4、使用场景
samba:
用于在Windows和Linux系统之间进行文件共享。
NFS:
支持多种操作系统,一般使用在linux和linux之间的文件共享,也可以实现windows和linux之间的文件共享。
FTP:
FTP不像Samba和NFS一样提供文件系统级别的共享,它只是提供了一种简单的方式来传输文件,客户端通过FTP客户端软件连接到FTP服务器,然后可以上传和下载文件。FTP一般使用在将文件从一个计算机上传到另一个计算机。
三:跨主机拷贝文件
1、SCP工具
scp是基于ssh协议开发的ssh客户端工具。
# 使用格式
# Pull: scp [option] /source_file [user@]remote_host/dest_file
# Push: scp [option] [user@]remote_host/dest_file /source_file
# 选项
-r:复制文件夹
-P PORT 指明remote host的监听的端口
# 说明 复制目录文件后面有无斜线的区别
# 有斜线:复制文件夹里面的内容。 例如:scp /data/ 10.0.0.22:~/ 表示复制data中的文件
# 无斜线:复制整个文件夹 例如:scp /data 10.0.0.22:~/ 表示复制data整个目录
例如:
# 不写用户名默认使用的就是当前主机使用的用户
scp -r /data 10.0.0.22:/newdata # 将本机的data目录推到10.0.0.22的newdata中
scp -r 10.0.0.22:/newdata /data # 将10.0.0.22的newdata拉到本机的/data目录中
2、rsync工具
rsync是基于ssh协议开发的ssh客户端工具。有三种工作模式:
选项:
# -a 保留源文件的属性,但是无法保留acl和selinux属性 -a选项自带递归的功能
# -v 显示详细的过程
# --delete 保证两边的数据一样,如果目标文件存在某个源文件没有的文件,就会把目标文件的这个文件删除掉
# -t --times 保持mtime属性 强烈建议任何时候都加上"-t",否则目标文件mtime会设置为当前系统时间,导致下次更新,检查出mtime不同从而导致增量传输无效
(1)本地模式:
作用就类似于cp、mv等命令,实现本地文件系统的拷贝、重命名等作用。
# 格式: rsync [OPTION] SRC... [DEST]
# 例如:
[root@LAP1 data]# rsync file1 file666666 # 实现文件拷贝功能
[root@LAP1 data]# ls
file1 file666666
(2)基于传统的SSH协议模式
:类似于scp的作用,实现远程主机拷贝
# Pull:rsync [OPTION...] [USER@]HOST:SRC... [DEST]
# Push:rsync [OPTION...] SRC... [USER@]HOST:DEST
# 例如
rsync -av /etc server1:/tmp # 复制目录和目录下文件
rsync -av /etc/ server1:/tmp # 只复制目录下文件 和scp一样
rsync -av --delete source_file host:/dest_file # 跨主机备份
# rsync -av --delete /data/ 10.0.0.12:/back
(3)作为一个独立服务模式
rsync作为一个独立的服务运行,
Pull:
# rsync [OPTION...] [USER@]HOST::SRC... [DEST]
# rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST] # 协议的形式访问,效果等同于上面
Push:
# rsync [OPTION...] SRC... [USER@]HOST::DEST
# rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
例如:
rsync -av /etc server1:/tmp # 复制目录和目录下文件
rsync -av /etc/ server1:/tmp # 只复制目录下文件 和scp一样
rsync -av --delete source_file host:/dest_file # 跨主机备份
说明:
本地模式和ssh模式是通过本地或远程shell,而独立服务运行模式则是让远程主机上运行rsyncd服务,使其监听在一个端口上,等待客户端的连接。
四:文件定时同步
rsync + cron计划任务
可以实现最快每1分钟同步一次文件。
说明:
rsync使用的是基于传统的SSH协议的工作模式
例如:
root@ubuntu1804:~# crontab -e
# m h dom mon dow command
*/10 * * * * /usr/bin/rsync -av --delete /data/ 10.0.0.12:/back
五:文件实时同步
监听文件的相关属性事件,文件发生变化的时候就触发同步,使用inotify或者sersync监听文件的变化。
1、inotify + rsync
inotify
:系统内核的一个监控服务,属于操作系统内核的一个特有机制,用于监控文件的信息变化。
inotify管理工具:
来自于inotify-tools软件包,软件包里面包含了两个主要的工具inotifywait和inotifywatch。
- inotifywait: 在被监控的文件或目录上等待特定文件系统事件(open ,close,delete等)发生,常用于实时同步的目录监控(主要使用的就是这个工具)
- inotifywatch:收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计
rsync
:使用的是rsync的第三种工作模式(独立服务模式)。
例如:
# 1. 备份服务器启动 rsync 进程,进程启动后监听tcp的873端口。
# 2. 服务器的inotify发现数据发生变化后,就执行:
rsync -av /data ehigh@192.168.0.104::/databackup # 以服务的形式访问
# rsync -av /data rsync://192.168.0.104/databackup # 以协议的形式访问
2、sersync + rsync
sersync类似于inotify,同样用于监控,是基于inotify基础上开发而来,并且克服了inotify一个操作可能会产生重复的事件,这样可能会触发rsync的多次同步的问题。
sersync特点:
- 会对对linux系统文件系统产生的临时文件和重复的文件操作进行过滤,在结合rsync同步的时候,节省了运行时耗和网络资源
- 配置简单,提供了要给xml配置文件和一个二进制可执行文件
- 采用多线程模式
- 自带crontab功能
# sersync项目地址: https://code.google.com/archive/p/sersync/
# sersync下载地址: https://code.google.com/archive/p/sersync/downloads
例如: