本文最后更新于:2023年12月5日 晚上
补充知识:iSCSI
概括的说,iSCSI 是一种存储设备远程映射技术,它可以将一个远程服务器上的存储设备映射到本地,并呈现为一个块设备(大白话就是磁盘)。从普通用户的角度,映射过来的磁盘与本地安装的磁盘毫无差异。
这种映射方式基于是基于 SCSI 协议的,SCSI 协议是计算机与外围设备(例如硬盘、光盘等)通信的协议。而 iSCSI 则是通过 TCP 协议对 SCSI 进行封装的一种协议,也就是通过以太网传输 SCSI 协议的内容。
存储类型
存储类型分为三类:
直连式存储:Direct-Attached Storage,简称 DAS
网络附加存储:Network-Attached Storage,简称 NAS
存储区域网络:Storage Area Network,简称 SAN
FC:Fibre Channel 光纤
三种存储比较
三种存储应用场景
- DAS 虽然比较古老了,但是还是很适用于那些数据量不大,对磁盘访问速度要求较高的中小企业
- NAS 多适用于文件服务器,用来存储非结构化数据,虽然受限于以太网的速度,但是部署灵活,成本低
- SAN 则适用于大型应用或数据库系统,缺点是成本高、较为复杂
FTP 服务
文件传输协议:File Transfer Protocol,基于 C/S 结构
数据传输格式:二进制(默认)和文本
双通道协议:命令和数据传输使用不同的端口
两种模式:从服务器角度命令 主动 和 被动 模式
FTP 服务状态码:
用户认证:
常见 FTP 相关软件:
FTP 服务器端软件
Wu-ftpd、Proftpd、Pureftpd、Filezilla Server、Serv-U、Wing FTP Server、IIS
vsftpd:Very Secure FTP Daemon,CentOS 默认 FTP 服务器
客户端软件
ftp、lftp、lftpget、wget、curl
vsftpd
pureftpd
NFS 服务
工作原理
Network File System:网络文件系统,基于内核的文件系统。通过 NFS,用户和程序可以像访问本地文件一样去访问远端系统上的文件,基于 RPC(Remote Procedure Call Protecol)实现。
上图中的 portmap,自 centos6 之后就被 rpcbind 代替了
优点:节省本地存储空间,将常用的数据,如:/home 目录,存放在 NFS 服务器上且可以通过网络访问,本地终端将可减少自身存储空间的使用
缺点:1. 占用带宽;2. 端口号比较多,而且不固定,防火墙不太好配;所以 nfs 一般不用在互联网,都是用在局域网
nfs 软件介绍
软件包:nfs-utils(包括服务器和客户端相关工具)
相关软件包:rpcbind(必须)、tcp_wrappers
kernel 支持:nfs.ko
端口:2049(nfsd),其他端口由 portmap 分配
nfs 服务主要进程:
- rpc.nfsd:最主要的 NFS 进程,管理客户端是否可登录
- rpc.mountd:挂载和卸载 NFS 文件系统,包括权限管理
- rpc.lockd:非必要,管理文件锁,避免同时写出错
- rpc.statd:非必要,检查文件一致性,可修复文件
日志:/var/lib/nfs
配置文件:/etc/exports 和 /etc/exports.d/*.exports
nfs 配置文件
nfs 工具
fpcinfo
rpcinfo 工具可以查看 RPC 相关信息
范例:
exportfs
用于管理 NFS 导出的文件系统
- -v:查看本机所有 NFS 共享
- -r:重读配置文件,这个选项可以避免重启服务
- -a:输出本机所有共享
- -au:停止本机所有共享
showmount
常见用法:查看远程主机的 nfs 共享
范例:
monut
客户端 nfs 挂载
options:
- nfsvers=n
- vers=n
- soft / hard
范例:
自动挂载 autofs
使用 autofs 服务按需要挂载外围设备,NFS 共享等,并在空闲 5 分钟后后自动卸载
配置文件:/etc/auto.master
案例:
10.0.0.1(ubuntu):nfs server,共享/data/wwwroot/script 目录
10.0.0.71(centos):nfs client
/etc/fstab 和 autofs
/etc/fstab 设置开机自动挂载,系统开机会去读取这个文件,用于挂载本地固定设备,如硬盘
autofs 设置自动挂载,只有当访问挂载点的时候,autofs 才会挂载,过一段时间没有访问,autofs 就会自动卸载设备,用于挂载动态的设备,如光盘、nfs、smb 等文件系统
SAMBA 服务
官网:https://www.samba.org/
相关包:
- samba 提供 smb 服务器端
- samba-client 客户端软件
- samba-common 通用软件
- cifs-utils smb 客户端工具
- samba-winbind 和 AD 相关
相关服务进程:
- smbd 提供 smb(cifs)服务 TCP:139、445
- nmbd NetBIOS 名称解析 UDP:137、138,如果不使用计算机名来访问,这个就没用
主配置文件:/etc/samba/smb.conf
语法检查: testparm [-v] [/etc/samba/smb.conf]
客户端工具:smbclient、mount.cifs
samba 服务器配置
/etc/samba/smb.conf 是主配置文件,ini 格式,来自 samba-common 包
分为全局配置[global] 和特定的共享设置,例如[homes]、[printers]等\
smb.conf 中的宏定义
[global] 全局配置
workgroup:指定工作组名称
server string:主机注释信息
netbios name:指定 NetBIOS 名,可以被 SAMBA 客户端使用,但不支持 ping
注意:netbios name 需要启动 nmb 服务
范例:
interfaces:指定服务侦听接口和 IP
hosts allow: 允许指定主机访问,可用逗号,空格,或 tab 分隔,默认允许所有主机访问,可以在其他共享独立配置,但是[global]中的设置会覆盖其他共享设置,可以是以下格式:
hosts deny:拒绝指定主机访问,格式和 hosts allow 相同
config file=/etc/samba/conf.d/%U:用户独立的配置文件
log file=/var/log/samba/log.%I:不同客户机采用不同日志
log level = 2:日志级别,默认为 0,不记录日志
范例:
max log size=50:日志文件达到 50K,将轮循 rotate,单位 KB
security=user:认证方式,有三种
- user:samba 用户(采有 linux 用户,samba 的独立口令)
- share:匿名(CentOS7 不再支持),已不建议使用
- server:已不建议使用
passdb backend = tdbsam:密码数据库格式
…
特定共享目录配置
范例:
samba 用户管理
smbpasswd 命令
smbpasswd 用于管理 samba 用户
添加用户:实际上是把把系统用户映射为 samba 用户,所以添加的用户首先必须是 linux 系统用户
修改用户密码:
删除用户和密码:
查看 samba 用户列表:
范例:
案例
实现不同 samba 用户访问相同的 samba 共享,实现不同的配置
数据的实时同步
实现实时同步的方法:
- inotify + rsync
- sersync:国人周洋在 inotify 基础上开发的,功能强大,只是已经不再更新了
inotify
异步的文件系统事件监控机制,利用事件驱动机制,而无须通过诸如 cron 等的轮询机制来获取事件,linux 内核从 2.6.13 起支持 inotify,通过 inotify 可以监控文件系统中添加、删除,修改、移动等各种事件
inotify+rsync 使用方式:
- 利用监控服务(inotify),监控同步数据服务器目录中信息的变化
- 发现目录中数据产生变化,就利用 rsync 服务推送到备份服务器上
- 利用脚本进行结合
inotify 内核参数
- max_queued_events:inotify 事件队列最大长度,如值太小会出现 Event Queue Overflow 错误,默认值:16384, 生产环境建议调大,比如:327679
- max_user_instances:每个用户创建 inotify 实例最大值,默认值:128
- max_user_watches:可以监视的文件的总数量(inotifywait 单进程),默认值:8192,建议调大
inotifywait
范例:
inotifywatch
rsync
rsync 常用做镜像备份和同步数据,配合计划任务实现定时备份,配合 inotify 可以实现触发式的实时数据同步
官方网站: http://rsync.samba.org/
软件包:rsync、rsync-daemon(CentOS 8)
服务文件:/usr/lib/systemd/system/rsyncd.service
配置文件:/etc/rsyncd.conf
端口:873/tcp
前两种的本质是通过本地或远程 shell,而第 3 种方式则是让远程主机上运行 rsyncd 服务,使其监听在一个端口上,等待客户端的连接
范例:备份服务器启动 rsync 的守护进程,然后数据服务器去连接,再进行数据的推送和拉取
rsyncd.conf 的格式 参考 man rsyncd.conf
或者 https://linux.die.net/man/5/rsyncd.conf
上面的过程都是免密的,我们也可以设置认证
inotify+rsync+shell 脚本 实现实时数据同步
备份数据库是:10.0.0.71,inotifywait 监控文件变化,rsync 负责同步数据
sersync 实现实时数据同步
sersync 虽然快 10 年没更新了,但是还是比较好用的
sersync 项目地址: https://code.google.com/archive/p/sersync/
sersync 下载地址: https://code.google.com/archive/p/sersync/downloads
sersync 类似于 inotify,同样用于监控,但它克服了 inotify 的缺点
inotify 最大的不足是会产生重复事件,或者同一个目录下多个文件的操作会产生多个事件,例如,当监控目录中有 5 个文件时,删除目录时会产生 6 个监控事件,从而导致重复调用 rsync 命令。另外比如:vim 文件时,inotify 会监控到临时文件的事件,但这些事件相对于 rsync 来说是不应该被监控的
sersync 优点:
- c++编写,速度快
- 对 linux 系统文件系统产生的临时文件和重复的文件操作进行过滤,所以在结合 rsync 同步的时候,节省了运行时耗和网络资源
- 配置很简单,其中提供了静态编译好的二进制文件和 xml 配置文件,直接使用即可
- 使用多线程进行同步,尤其在同步较大文件时,能够保证多个服务器实时保持同步状态
- 有出错处理机制,通过失败队列对出错的文件重新同步,如果仍旧失败,则按设定时长对同步失败的文件重新同步
- 不仅可以实现实时同步,另外还自带 crontab 功能,只需在 xml 配置文件中开启,即也可以按要求隔一段时间整体同步一次,而无需再额外配置 crontab 功能
- 可以二次开发
sersync 只有两个文件:
二进制程序文件 sersync2
配置文件 confxml.xml
基于 rsync daemon 实现 sersync
基于远程 shell 实现 sersync