28 网络文件共享服务

文章目录

网络文件共享服务

本章内容

  • 存储类型
  • FTP服务
  • NFS服务
  • SAMBA服务
  • 网络数据同步

1 存储类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O4DEQz7f-1577107595321)(%E6%88%AA%E5%9B%BE/2019%E5%B9%B411%E6%9C%8821%E6%97%A5/image-20191223130012238.png)]

  • 存储类型分为三种
    • 直连式存储:Direct-Attached Storage,简称DAS
    • 网络附加存储:Network-Attached Storage,简称NAS
    • 存储区域网络:Storage Area Network,简称SAN

1.1 DAS存储

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZYsNkfkb-1577107595323)(%E6%88%AA%E5%9B%BE/2019%E5%B9%B411%E6%9C%8821%E6%97%A5/image-20191223130159383.png)]

  • DAS存储是最常见的一种存储方式,尤其是在中小企业应用中。PC中的硬盘或只有一个外部SCSI接口的JBOD都属于DAS架构。DAS是指存储设备直接连接到服务器总线上,存储设备只与一台独立的主机连接,其他主机不能使用这个存储设备。DAS存储设备与服务器主机之间的连接通道通常采用SCSI连接,DAS存储设备主要是磁盘阵列(RAID: Redundant Arrays of Independent Disks)、磁盘簇(JBOD:Just a Bunch Of Disks)等

1.2 NAS存储

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7xIrosEs-1577107595324)(%E6%88%AA%E5%9B%BE/2019%E5%B9%B411%E6%9C%8821%E6%97%A5/image-20191223130252166.png)]

  • NAS存储就是存储设备通过标准的网络拓扑结构(比如以太网)添加到一群计算机上。与DAS以及SAN不同,NAS是文件级的存储方法。采用NAS较多的功能是用来进行文件共享。
  • NAS存储也通常被称为附加存储,顾名思义,就是存储设备通过标准的网络拓扑结构(例如以太网)添加到一群计算机上。NAS是文件级的存储方法,它的重点在于帮助工作组和部门级机构解决迅速增加存储容量的需求。如今更多的亲们采用NAS较多的功能是用来文档共享、图片共享、电影共享等等,而且随着云计算的发展,一些NAS厂商也推出了云存储功能,大大方便了企业和亲们等个人用户的使用。
  • NAS产品是真正即插即用的产品。NAS设备一般支持多计算机平台,用户通过网络支持协议可进入相同的文档,因而NAS设备无需改造即可用于混合Unix/Windows NT局域网内,同时NAS的应用非常灵活。
  • 但NAS有一个关键性问题,即备份过程中的带宽消耗。与将备份数据流从LAN中转移出去的存储区域网(SAN)不同,NAS仍使用网络进行备份和恢复。NAS 的一个缺点是它将存储事务由并行SCSI连接转移到了网络上。这就是说LAN除了必须处理正常的最终用户传输流外,还必须处理包括备份操作的存储磁盘请求。

1.3 SAN存储

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q6aQvGTQ-1577107595324)(%E6%88%AA%E5%9B%BE/2019%E5%B9%B411%E6%9C%8821%E6%97%A5/image-20191223130455456.png)]

  • 存储区域网络(SAN,文件和存储空间),这个是通过光纤通道或以太网交换机连接存储阵列和服务器主机,最后成为一个专用的存储网络。SAN经过十多年历史的发展,已经相当成熟,成为业界的事实标准(但各个厂商的光纤交换技术不完全相同,其服务器和SAN存储有兼容性的要求)。

  • SAN提供了一种与现有LAN连接的简易方法,并且通过同一物理通道支持广泛使用的SCSI和IP协议。SAN不受现今主流的、基于SCSI存储结构的布局限制。特别重要的是,随着存储容量的爆炸性增长,SAN允许企业独立地增加它们的存储容量。SAN的结构允许任何服务器连接到任何存储阵列,这样不管数据置放在那里,服务器都可直接存取所需的数据。因为采用了光纤接口,SAN还具有更高的带宽。

  • 如今的SAN解决方案通常会采取以下两种形式:光纤信道以及iSCSI或者基于IP的SAN,也就是FC SAN和IP SAN。光纤信道是SAN解决方案中大家最熟悉的类型,但是,最近一段时间以来,基于iSCSI的SAN解决方案开始大量出现在市场上,与光纤通道技术相比较而言,这种技术具有良好的性能,而且价格低廉。

  • SAN的优势:
    • 随着存储容量的增长,SAN允许企业独立地增加他们的存储容量。
    • SAN允许任何服务器连接到任何存储阵列(好处是:不管数据放在哪里,服务器都可以直接存取所需的数据)
    • 由于使用光纤接口,SAN具有更高的带宽。除了FC连接,SAN连接还有ISCSI(SCSI over IP)以及SAS(Serial Attached SCSI)接口。
    • 光纤接口可以提供10公里那么长那么远的连接长度,非常容易实现物理分离的存储

1.4 三种存储比较

  • SAN与NAS的主要-别体现在文件系统所在的位置

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YrtchMJr-1577107595325)(%E6%88%AA%E5%9B%BE/2019%E5%B9%B411%E6%9C%8821%E6%97%A5/image-20191223131404546.png)]

  • 三种存储架构的应用场景
    • DAS虽然比较古老了,但是还是很适用于那些数据量不大,对磁盘访问速度要求较高的中小企业
    • NAS多适用于文件服务器,用来存储非结构化数据,虽然受限于以太网的速度,但是部署灵活,成本低
    • SAN则适用于大型应用或数据库系统,缺点是成本高、较为复杂

2 文件传输协议FTP

2.1 FTP工作原理介绍

  • 文件传输协议:File Transfer Protocol 早期的三个应用级协议之一,基于C/S结构

  • 数据传输格式:二进制(默认)和文本

  • 双通道协议:命令和数据连接

  • 两种模式:从服务器角度
    • 主动(PORT style):服务器主动连接
      • 命令(控制):客户端:随机port —> 服务器:21/tcp
      • 数据:客户端:随机port <—服务器:20/tcp
    • 被动(PASV style):客户端主动连接
      • 命令(控制):客户端:随机port —> 服务器:21/tcp
      • 数据:客户端:随机port —> 服务器:随机port /tcp
  • 范例:服务器被动模式数据端口
    • 227 Entering Passive Mode (172,16,0,1,224,59)
    • 服务器数据端口为:224*256+59
  • FTP服务状态码:
    • 1XX:信息 125:数据连接打开

    • 2XX:成功类状态 200:命令OK 230:登录成功

    • 3XX:补充类 331:用户名OK

    • 4XX:客户端错误 425:不能打开数据连接

    • 5XX:服务器错误 530:不能登录

  • 用户认证:
    • 匿名用户:ftp,anonymous,对应Linux用户ftp
    • 系统用户:Linux用户,用户/etc/passwd,密码/etc/shadow
    • 虚拟用户:特定服务的专用用户,独立的用户/密码文件

2.2 常见 FTP 相关软件

  • FTP服务器端软件
    • Wu-ftpd
    • Proftpd
    • Pureftpd
    • Filezilla Server
    • Serv-U
    • Wing FTP Server
    • IIS
  • vsftpd:Very Secure FTP Daemon,CentOS 默认FTP服务器;

    • 高速,稳定,下载速度是WU-FTP的两倍
    • ftp.redhat.com数据:单机最多可支持15000个并发
  • 客户端软件:
  • ftp,lftp,lftpget,wget,curl

    • ftp -A ftpserver port -A 主动模式 –p 被动模式
    • lftp –u username ftpserver
    • lftp username@ftpserver
    • lftpget ftp://ftpserver/pub/file
  • gftp:GUI centos5 最新版2.0.19 (11/30/2008)

  • filezilla,FTP Rush,CuteFtp,FlashFXP,LeapFtp

  • IE ftp://username:password@ftpserver

2.3 vsftpd 软件介绍

  • 由 vsftpd 包提供,不再由xinetd管理
  • 用户认证配置文件:/etc/pam.d/vsftpd
  • 启动服务相关文件:
    • /usr/lib/systemd/system/vsftpd.service
    • /etc/rc.d/init.d/vsftpd
  • 配置文件:
    • /etc/vsftpd/vsftpd.conf
    • 帮助:man 5 vsftpd.conf
  • 配置文件格式:
    • option=value
    • 注意:= 前后不要有空格
  • 用户和其共享目录
    • 匿名用户(映射为系统用户ftp )共享文件位置:/var/ftp
    • 系统用户共享文件位置:用户家目录
    • 虚拟用户共享文件位置:为其映射的系统用户的家目录

2.4 vsftpd服务常见配置

2.4.1 命令端口
  • listen_port=21
2.4.2 主动模式端口
  • connect_from_port_20=YES 主动模式端口为20
  • ftp_data_port=20 (默认) 指定主动模式的端口
2.4.3 被动模式端口范围
  • linux 客户端默认使用被动模式
  • windows 客户端默认使用主动模式
  • pasv_min_port=6000 0为随机分配
  • pasv_max_port=6010
2.4.4 使用当地时间
  • use_localtime=YES 使用当地时间(默认为NO,使用GMT)
2.4.5 匿名用户登录
  • anonymous_enable=YES 支持匿名用户
  • no_anon_password=YES 匿名用户略过口令检查 , 默认NO
2.4.6 匿名用户上传
  • anon_upload_enable=YES 匿名上传,注意:文件系统权限
  • anon_mkdir_write_enable=YES 匿名建目录
  • anon_world_readable_only 只能下载全部读的文件, 默认YES
  • anon_umask=0333 指定匿名上传文件的umask,默认077
  • anon_other_write_enable=YES 可删除和修改上传的文件, ,默认NO
2.4.7 指定匿名用户的上传文件的默认的所有者和权限
  • chown_uploads=YES 默认NO
  • chown_username=wang
  • chown_upload_mode=0644
2.4.8 Linux系统用户
  • local_enable=YES 是否允许linux用户登录
  • write_enable=YES 允许linux用户上传文件
  • local_umask=022 指定系统用户上传文件的默认权限
2.4.9 将系统用户映射为指定的guest用户
  • guest_enable=YES 所有系统用户都映射成guest用户
  • guest_username=ftp 配合上面选项才生效,指定guest用户
  • local_root=/ftproot guest用户登录所在目录
2.4.10 禁锢系统用户
  • 禁锢所有系统在家目录中
    • chroot_local_user=YES 禁锢系统用户,默认NO,即不禁锢
  • 禁锢或不禁锢特定的系统用户在家目录中,与上面设置功能相反
    • chroot_list_enable=YES
    • chroot_list_file=/etc/vsftpd/chroot_list
      • 当chroot_local_user=YES时,则chroot_list中用户不禁锢
      • 当chroot_local_user=NO时,则chroot_list中用户禁锢
2.4.11 日志
  • wu-ftp日志:默认启用
    • xferlog_enable=YES 启用记录上传下载日志,此为默认值
    • xferlog_std_format=YES 使用wu-ftp日志格式,此为默认值
    • xferlog_file=/var/log/xferlog 可自动生成, 此为默认值
  • vsftpd日志:默认不启用
    • dual_log_enable=YES 使用vsftpd日志格式,默认不启用
    • vsftpd_log_file=/var/log/vsftpd.log 可自动生成, 此为默认值
2.4.12 提示信息
  • 登录提示信息
    • ftpd_banner=“welcome to mage ftp server”
    • banner_file=/etc/vsftpd/ftpbanner.txt
  • 目录访问提示信息
    • dirmessage_enable=YES 此为默认值
    • message_file=.message 信息存放在指定目录下.message ,此为默认值
2.4.13 PAM模块实现用户访问控制
  • pam_service_name=vsftpd
  • pam配置文件:/etc/pam.d/vsftpd
  • /etc/vsftpd/ftpusers 默认文件中用户拒绝登录
2.4.14 是否启用控制用户登录的列表文件
  • userlist_enable=YES 此为默认值
  • userlist_deny=YES(默认值) 黑名单,不提示口令,NO为白名单
  • userlist_file=/etc/vsftpd/users_list 此为默认值
2.4.15 连接数限制
  • max_clients=0 最大并发连接数
  • max_per_ip=0 每个IP同时发起的最大连接数
2.4.16 传输速率,字节/秒
  • anon_max_rate=0 匿名用户的最大传输速率
  • local_max_rate=0 本地用户的最大传输速率
2.4.17 连接时间:秒为单位
  • connect_timeout=60 主动模式数据连接超时时长
  • accept_timeout=60 被动模式数据连接超时时长
  • data_connection_timeout=300 数据连接无数据输超时时长
  • idle_session_timeout=60 无命令操作超时时长
2.4.18 优先以文本方式传输
  • scii_upload_enable=YES
  • ascii_download_enable=YES
2.4.19 实现基于SSL的FTPS
  • 查看是否支持SSL
    ldd `which vsftpd` #查看到libssl.so
    
  • 范例:

[root@centos8 ~]#ldd which vsftpd|grep libssl
libssl.so.1.1 => /lib64/libssl.so.1.1 (0x00007f8878e2c000)


- ##### 创建自签名证书  

```bash
#CentOS 7 上可以实现
cd /etc/pki/tls/certs/
make vsftpd.pem
openssl x509 -in vsftpd.pem -noout –text
#或者分别生成一个证书和私钥文件
mkdir /etc/vsftpd/ssl
cd /etc/vsftpd/ssl
openssl req -x509 -nodes -keyout vsftpd.key -out vsftpd.crt -days 365 -newkey
rsa:2048
  • 配置vsftpd服务支持SSL:
    [root@centos7 ~]#vim /etc/vsftpd/vsftpd.conf
    ssl_enable=YES #启用SSL
    allow_anon_ssl=NO #匿名不支持SSL
    force_local_logins_ssl=YES #本地用户登录加密
    force_local_data_ssl=YES #本地用户数据传输加密
    rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem
    #rsa_private_key_file /path/file #此项如果没有指定,私钥也在证书文件中
    #ssl_tlsv1=YES
    #ssl_sslv2=NO
    #ssl_sslv3=NO
    #require_ssl_reuse=NO
    #ssl_ciphers=HIGH
    
    
    [root@centos7 ~]#systemctl restart vsftpd
    
    [root@centos7 ~]#ftp 192.168.100.7
    Connected to 192.168.100.7 (192.168.100.7).
    220-welcome to magedu
    220
    Name (192.168.100.8:root): wang
    530 Non-anonymous sessions must use encryption.
    Login failed.
    421 Service not available, remote server has closed connection
    
    #用filezilla等工具测试
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oh2mAChc-1577107595326)(%E6%88%AA%E5%9B%BE/2019%E5%B9%B411%E6%9C%8821%E6%97%A5/image-20191223141639196.png)]

2.5 vsftpd 虚拟用户

  • 虚拟用户:
    • 所有虚拟用户会统一映射为一个指定的系统帐号:访问共享位置,即为此系统帐号的家目录
    • 各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定
  • 虚拟用户帐号的存储方式:
    • 文件:编辑文本文件,此文件需要被编码为hash格式

      • 奇数行为用户名

      • 偶数行为密码

        db_load -T -t hash -f vusers.txt vusers.db
        
    • 关系型数据库中的表中:实时查询数据库完成用户认证

    • vsftpd 支持mysql库:pam要依赖于pam-mysql

      • /lib64/security/pam_mysql.so
      • /usr/share/doc/pam_mysql-0.7/README
2.5.1 实现基于文件验证的vsftpd虚拟用户
2.5.1.1 创建用户数据库文件
vim /etc/vsftpd/vusers.txt
wang
wangpass
mage
magepass
cd /etc/vsftpd/
db_load -T -t hash -f vusers.txt vusers.db
chmod 600 vusers.db
2.5.1.2 创建用户和访问FTP目录
useradd -d /data/ftproot -s /sbin/nologin -r vuser
mkdir -pv /data/ftproot/upload
setfacl -m u:vuser:rwx /data/ftproot/upload
#chmod a=rx /data/ftproot/ 如果自动创建家目录,需修改权限
2.5.1.3 创建pam配置文件
vim /etc/pam.d/vsftpd.db
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers
2.5.1.4 指定pam配置文件
vim /etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=vuser
pam_service_name=vsftpd.db
2.5.1.5 虚拟用户建立独立的配置文件
#指定各个用户配置文件存放的路径
vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers.d/

#创建各个用户配置文件存放的路径
mkdir /etc/vsftpd/vusers.d/
cd /etc/vsftpd/vusers.d/

#创建各用户自已的配置文件,允许wang用户可读写,其它用户只读
vim wang
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

#创建各用户自已的配置文件
vim mage
#登录目录改变至指定的目录
local_root=/data/ftproot2
2.5.2 实现基于MYSQL验证的vsftpd虚拟用户
  • 环境准备
    • 本实验在两台CentOS主机上实现, CentOS 7 一台做为FTP服务器,一台做数据库服务器
2.5.2.1 在数据库服务器上安装mysql数据库
yum –y install mariadb-server
systemctl enable --now mariadb.service
2.5.2.2 在数据库服务上配置数据库支持vsftpd服务
#建立存储虚拟用户数据库和表
mysql> CREATE DATABASE vsftpd;
mysql> USE vsftpd;
mysql> CREATE TABLE users (
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
name CHAR(50) BINARY NOT NULL,
password CHAR(48) BINARY NOT NULL
);

#添加虚拟用户,为了安全应该使用PASSWORD函数加密其密码后存储
mysql> INSERT INTO users(name,password) values('wang',password('magedu'));
mysql> INSERT INTO users(name,password) values('mage',password('magedu'));

#创建连接的数据库用户
mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'172.16.0.%' IDENTIFIED BY 'magedu';
mysql> FLUSH PRIVILEGES;
2.5.2.3 在FTP服务器上安装vsftpd 和 pam_mysql包
yum install vsftpd -y
2.5.2.4 在FTP服务器上安装 pam_mysql
  • 对于 centos 6:pam_mysql由EPEL的源中提供
    yum install pam_mysql -y
    
  • 对于 centos7 和 8:无对应rpm包,需手动编译安装
    #安装相关包
    yum install vsftpd gcc gcc-c++ make mariadb-devel pam-devel
    #下载pam-mysql源码进行编译
    wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
    #https://github.com/NigelCunningham/pam-MySQL/archive/v0.8.1.tar.gz
    tar xvf pam_mysql-0.7RC1.tar.gz
    cd pam_mysql-0.7RC1/
    ./configure --with-pam-mods-dir=/lib64/security
    
    #如果上面命令不指定 --with-pam-mods-dir=/lib64/security 会报以下错误
    #checking if the second argument of pam_conv.conv() takes const pointer... no
    configure: error: Your system doesn't appear to be configured to use PAM.Perhaps you need to specify the correct location where the PAM modules reside.
    
    
    make && make install
    [root@vsftpd ~]#ll /lib64/security/pam_mysql*
    -rwxr-xr-x 1 root root 882 Dec 17 14:34 /lib64/security/pam_mysql.la
    -rwxr-xr-x 1 root root 141712 Dec 17 14:34 /lib64/security/pam_mysql.so
    
2.5.2.5 在FTP服务器上建立pam认证所需文件
vi /etc/pam.d/vsftpd.mysql
#添加如下两行
auth required pam_mysql.so user=vsftpd passwd=magedu host=mysqlserver db=vsftpd
table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=magedu host=mysqlserver
db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
注意:以上参考 README文档
  • crypt 加密方式:
    • 0表示不加密
    • 1表示crypt(3)加密
    • 2表示使用mysql password()函数加密
    • 3表示md5加密
    • 4表示sha1加密
  • 配置字段说明
    • auth 表示认证
    • account 验证账号密码正常使用
    • required 表示认证要通过
    • pam_mysql.so模块是默认的相对路径,是相对/lib64/security/路径而言,也可以写绝对路径;后面为给此模块传递的参数
    • user=vsftpd为登录mysql的用户
    • passwd=magedu 登录mysql的的密码
    • host=mysqlserver mysql服务器的主机名或ip地址
    • db=vsftpd 指定连接msyql的数据库名称
    • table=users 指定连接数据库中的表名
    • usercolumn=name 当做用户名的字段
    • passwdcolumn=password 当做用户名字段的密码
    • crypt=2 密码的加密方式为mysql password()函数加密
2.5.2.6 建立相应用户和修改vsftpd配置文件
#建立虚拟用户映射的系统用户及对应的目录
useradd -s /sbin/nologin -d /data/ftproot -r vuser
#centos7 需除去ftp根目录的写权限
chmod 555 /data/ftproot
mkdir -pv /data/ftproot/{upload,pub}
setfacl –m u:vuser:rwx /data/ftproot/upload
#确保/etc/vsftpd.conf中已经启用了以下选项
anonymous_enable=YES
#添加下面两项
guest_enable=YES
guest_username=vuser

#修改下面一项,原系统用户无法登录
pam_service_name=vsftpd.mysql

#启动vsftpd服务
systemctl enable --now vsftpd
2.5.2.7 在FTP服务器上配置虚拟用户具有不同的访问权限
  • vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可

    #配置vsftpd为虚拟用户使用配置文件目录
    vim /etc/vsftpd/vsftpd.conf
    #添加如下选项
    user_config_dir=/etc/vsftpd/vusers.d/
    
    #创建所需要目录,并为虚拟用户提供配置文件
    mkdir /etc/vsftpd/vusers.d/
    cd /etc/vsftpd/vusers.d/
    touch wang mage
    
    #配置虚拟用户的访问权限
    #虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。如要让用户wang具有上传文件的权
    限,可修改/etc/vsftpd/vusers.d/wang文件,在里面添加如下选项并设置为YES即可,只读则设为NO
    #注意:需确保对应的映射用户对于文件系统有写权限
    anon_upload_enable={YES|NO}
    anon_mkdir_write_enable={YES|NO}
    anon_other_write_enable={YES|NO}
    #登录目录改变至指定的目录
    local_root=/data/ftproot2
    

3 NFS服务

3.1 NFS工作原理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cXrrJn5e-1577107595326)(%E6%88%AA%E5%9B%BE/2019%E5%B9%B411%E6%9C%8821%E6%97%A5/image-20191223142809038.png)]

  • NFS:Network File System 网络文件系统,基于内核的文件系统。Sun公司开发,通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,基于RPC(Remote Procedure Call Protocol 远程过程调用)实现

  • RPC采用C/S模式,客户机请求程序调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K8R5ZtLR-1577107595327)(%E6%88%AA%E5%9B%BE/2019%E5%B9%B411%E6%9C%8821%E6%97%A5/image-20191223142925620.png)]

  • NFS优势:节省本地存储空间,将常用的数据,如:/home目录,存放在NFS服务器上且可以通过网络访问,本地终端将可减少自身存储空间的使用

3.2 NFS软件介绍

  • 软件包:nfs-utils
  • 相关软件包:rpcbind(必须),tcp_wrappers
  • Kernel支持:nfs.ko
  • 端口:2049(nfsd), 其它端口由portmap(111)分配
    • 说明:CentOS 6 开始portmap进程由rpcbind代替
  • NFS服务主要进程:
    • rpc.nfsd 最主要的NFS进程,管理客户端是否可登录
    • rpc.mountd 挂载和卸载NFS文件系统,包括权限管理
    • rpc.lockd 非必要,管理文件锁,避免同时写出错
    • rpc.statd 非必要,检查文件一致性,可修复文件
  • 日志:/var/lib/nfs/
  • NFS配置文件:
    • /etc/exports
    • /etc/exports.d/*.exports

3.3 NFS共享配置文件格式

/dir 		主机1(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)
      no_root_squash 		    远程root映射成root用户
      all_squash 				所有远程用户(包括root)都变成nfsnobody,CentOS8 为nobody
      no_all_squash 		   (默认)保留共享文件的UID和GID
      anonuid和anongid 指明匿名用户映射为特定用户UID和组GID,而非nfsnobody,可配合all_squash使用
      
  • 范例:NFS配置示例
    vim /etc/exports
    /myshare server.example.com
    /myshare *.example.com
    /myshare server?.example.com
    /myshare server[0-20].example.com
    /myshare 172.25.11.10
    /myshare 172.25.0.0/16
    /myshare 2000:472:18:b51:c32:a21
    /myshare 2000:472:18:b51::/64
    /myshare *.example.com 172.25.0.0/16
    /myshare desktop.example.com(ro)
    /myshare desktop.example.com(ro) server[0-20].example.com(rw)
    /myshare diskless.example.com(rw,no_root_squash)
    

3.4 NFS工具

3.4.1 rpcinfo
  • rpcinfo 工具可以查看RPC相关信息
  • 查看注册在指定主机的RPC程序
    rpcinfo -p hostname
    
  • 查看RPC注册程序
    rpcinfo –s hostname
    
  • 范例:rpcinfo
    [root@centos8 ~]#rpcinfo -p
        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
        100024 1 udp 36310 status
        100024 1 tcp 45265 status
    [root@centos8 ~]#rpcinfo -s
        program version(s) netid(s) service owner
        100000 2,3,4 local,udp,tcp,udp6,tcp6 portmapper superuser
        100024 1 tcp6,udp6,tcp,udp status 29
    
3.4.2 exportfs
  • exportfs:可用于管理NFS导出的文件系统
  • 常见选项:
    • –v 查看本机所有NFS共享
    • –r 重读配置文件,并共享目录
    • –a 输出本机所有共享
    • –au 停止本机所有共享
3.4.3 showmount
  • 常见用法:
    showmount -e hostname
    
3.4.4 mount.nfs
  • 客户端NFS挂载
  • NFS相关的挂载选项:man 5 nfs
    • fg(默认)前台挂载
    • bg后台挂载
    • hard(默认)持续请求
    • soft 非持续请求
    • intr 和hard配合,请求可中断
    • rsize和wsize 一次读和写数据最大字节数,rsize=32768
    • netdev 无网络不挂载
  • 提示:基于安全考虑,建议使用nosuid,nodev,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
    

3.5 自动挂载

  • 可使用 autofs 服务按需要挂载外围设备,NFS共享等,并在空闲5分钟后后自动卸载
3.5.1 相关包和文件
  • 软件包:autofs
  • 服务文件:/usr/lib/systemd/system/autofs.service
  • 配置文件:/etc/auto.master
3.5.2 配置文件格式
  • 参看帮助:man 5 autofs
  • 所有导出到网络中的NFS启用特殊匹配 -host 至“browse”
  • 范例:/net目录可以自动挂载NFS共享
    cat /etc/auto.master
    /net -hosts
    cd /net/192.168.8.100/
    
  • 自动挂载资源有两种格式:
    • 相对路径法:将mount point 路径分成 dirname 和 basename 分别配置,可能会影响现有的目录结构
    • 绝对路径法:直接匹配全部绝对路径名称,不会影响本地目录结构
  • 相对路径法:
    • /etc/auto.master 格式
      挂载点的dirname 		指定目录的配置文件路径
      
    • 指定目录的配置文件格式
      挂载点的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/&
    
  • 绝对路径法
    • /etc/auto.master 格式
      /- 		指定配置文件路径
      
    • 指定配置文件格式
      绝对路径 		挂载选项		 选项设备
      
  • 范例:绝对路径法
    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
    

3.7 实战案例

3.7.1 目标
  • 将NFS的共享目录,通过autofs 发布出来,做为远程主机用户的家目录
3.7.2 环境准备
  • 三台主机
    • 一台主机 nfs server,IP:192.168.8.100
    • 另两台当 nfs client,IP:192.168.8.101和192.168.8.102
3.7.3 步骤
#NFS服务器创建用户和相应的家目录,将用户wang的家目录共享
useradd -d /data/wang wang
Vim /etc/exports.d/test.exports
/data/wang *(rw,anonuid=1000,anongid=1000,all_sqush)

#在第一台NFS客户端主机192.168.8.101上实现相对路径法的autofs
vim /etc/auto.master
/home /etc/homeauto
vim /etc/homeauto
* -fstype=nfs,vers=3 192.168.8.100:/data/wang/&

#注意:home目录下其它用户家目录无法访问

#在第二台NFS客户端主机192.168.8.102上实现绝对路径法的autofs
vim /etc/auto.master
/- /etc/homeauto
vim e/etc/homeauto
/home/wang -fstype=nfs,vers=3 nfsserver:/data/wang

4 SAMBA服务

4.1 SAMBA服务简介

  • SMB:Server Message Block 服务器消息块,IBM发布,最早是DOS网络文件共享协议
  • CIFS:common internet file system,微软基于SMB发布
  • SAMBA:1991年Andrew Tridgell,实现 windows和UNIX相通
  • 官方网站:http://www.samba.org/
  • SAMBA的功能:
    • 共享文件和打印,实现在线编辑
    • 实现登录SAMBA用户的身份认证
    • 可以进行NetBIOS名称解析
    • 外围设备共享
  • Windows计算机网络管理模式:
    • 工作组WORKGROUP:计算机对等关系,帐号信息各自管理
    • 域DOMAIN:C/S结构,帐号信息集中管理,DC,AD

4.2 SAMBA软件介绍

  • 相关包:
    • 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 帮助参看:man smb.conf
  • 语法检查: testparm [-v] [/etc/samba/smb.conf]
  • 客户端工具:smbclient,mount.cifs
  • 范例:
    dnf install samba
    systemctl start smb
    systemctl start nmb
    

4.3 SAMBA客户端工具

  • UNC路径: Universal Naming Convention,通用命名规范,格式如下
\\sambaserver\sharename
4.3.1 使用smbclient 访问SAMBA服务器
smbclient -L instructor.example.com
smbclient -L instructor.example.com -U smb用户%password

#可以使用-U选项来指定用户%密码,或通过设置和导出USER和PASSWD环境变量来指定
smbclient //instructor.example.com/shared -U wang
>cd directory
>get file1
>put file2
4.3.2 挂载CIFS文件系统
  • 范例:手动挂载
mount -o user=wang,password=magedu //server//shared /mnt/smb
  • 范例:开机自动挂载
cat /etc/fstab
#可以用文件代替用户名和密码的输入
//server/homes /mnt cifs credentials或cred=/etc/smb.txt 0 0

cat /etc/smb.txt
username=wang #或 user=wang
password=password #或 pass=password

chmod 600 /etc/smb.txt

4.4 管理SAMBA用户

4.4.1 实现samba用户说明
  • 包:samba-common-tools
  • 工具:smbpasswd pdbedit
  • 用户数据库:/var/lib/samba/private/passdb.tdb
说明:samba用户须是Linux用户,建议使用/sbin/nologin
4.4.2 管理用户命令
  • 添加samba用户:
    smbpasswd -a <user>
    pdbedit -a -u <user>
    
  • 修改用户密码:
    smbpasswd <user>
    
  • 删除用户和密码:
    smbpasswd –x <user>
    pdbedit –x –u <user>
    
  • 查看samba用户列表:
    pdbedit –L –v
    
  • 范例:
    [root@centos8 ~]#pdbedit -L
    No builtin backend found, trying to load plugin
    smb1:1002:
    smb2:1003:
    smb3:1004:
    [root@centos8 ~]#pdbedit -L -v
    No builtin backend found, trying to load plugin
    ---------------
    Unix username: smb1
    NT username:
    Account Flags: [U ]
    User SID: S-1-5-21-1476810783-3936299954-1329646792-1000
    Primary Group SID: S-1-5-21-1476810783-3936299954-1329646792-513
    Full Name:
    Home Directory: \\linux39\smb1
    HomeDir Drive:
    Logon Script:
    Profile Path: \\linux39\smb1\profile
    Domain: CENTOS8
    Account desc:
    Workstations:
    Munged dial:
    Logon time: 0
    Logoff time: Wed, 06 Feb 2036 23:06:39 CST
    Kickoff time: Wed, 06 Feb 2036 23:06:39 CST
    Password last set: Thu, 19 Dec 2019 10:02:31 CST
    Password can change: Thu, 19 Dec 2019 10:02:31 CST
    Password must change: never
    Last bad password : 0
    Bad password count : 0
    Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    ---------------
    Unix username: smb2
    NT username:
    Account Flags: [U ]
    User SID: S-1-5-21-1476810783-3936299954-1329646792-1001
    Primary Group SID: S-1-5-21-1476810783-3936299954-1329646792-513
    Full Name:
    Home Directory: \\linux39\smb2
    HomeDir Drive:
    Logon Script:
    Profile Path: \\linux39\smb2\profile
    Domain: CENTOS8
    Account desc:
    Workstations:
    Munged dial:
    Logon time: 0
    Logoff time: Wed, 06 Feb 2036 23:06:39 CST
    Kickoff time: Wed, 06 Feb 2036 23:06:39 CST
    Password last set: Thu, 19 Dec 2019 09:57:36 CST
    Password can change: Thu, 19 Dec 2019 09:57:36 CST
    Password must change: never
    Last bad password : 0
    Bad password count : 0
    Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    ---------------
    
  • 查看samba服务器状态:
    smbstatus
    
  • 范例:
    [root@centos8 ~]#smbstatus
    Samba version 4.9.1
    PID Username Group Machine
    Protocol 	Version 	Encryption 		Signing
    --------------------------------------------------------------------------------
    --------------------------------------------------------
    45299 		smb1 		smb1 1			92.168.39.6 (ipv4:192.168.39.6:55898) NT1
    					- 					-
    Service 	pid 		Machine 		Connected at Encryption
    Signing
    --------------------------------------------------------------------------------
    -------------
    smb1 		45299 		192.168.39.6 	Thu Dec 19 10:30:24 AM 2019 CST -
    - 
    No locked files
    

4.5 SAMBA服务器配置

  • samba 配置文件 /etc/smb.conf 格式 ,使用.ini文件的格式
  • 用 [ ] 分分成以下几部分
    • 全局设置:
      • [global] 服务器通用或全局设置的部分
    • 特定共享设置:
      • [homes] 用户的家目录共享
      • [printers] 定义打印机资源和服务
      • [sharename] 自定义的共享目录配置
      • 其中:#和;开头的语句为注释,大小写不敏感
    • samba配置中的宏定义:
      • %m 客户端主机的NetBIOS名
      • %M 客户端主机的FQDN
      • %H 当前用户家目录路径
      • %U 当前用户的用户名
      • %g 当前用户所属组
      • %h samba服务器的主机名
      • %L samba服务器的NetBIOS名
      • %I 客户端主机的IP
      • %T 当前日期和时间
      • %S 可登录的用户名
4.5.1 SAMBA服务器全局配置
  • workgroup 指定工作组名称
  • server string 主机注释信息
  • netbios name 指定NetBIOS名,注意:netbios name需要启动nmb服务
  • 范例:
    [global]
        workgroup = workgroup
        netbios name = linux39
    
  • interfaces 指定服务侦听接口和IP
  • hosts allow 可用逗号,空格,或tab分隔,默认允许所有主机访问,也可在每个共享独立配置,如在[global]设置,将应用并覆盖所有共享设置,可以是以下格式:
    IPv4 network/prefix: 172.16.0.0/24 IPv4 前缀: 172.16.0.
    IPv4 network/netmask: 172.16.0.0/255.255.255.0
    主机名: desktop.example.com
    以example.com后缀的主机名: .example.com
    
    • 范例:
      hosts allow = 172.16. .example.com
      
  • hosts deny 拒绝指定主机访问,格式和hosts allow 相同
  • config file=/etc/samba/conf.d/%U 用户独立的配置文件
  • Log file=/var/log/samba/log.%I 不同客户机采用不同日志
  • log level = 2 日志级别,默认为0,不记录日志
    • 范例:
      [global]
          Log file=/var/log/samba/log.%I
          log level = 2
      
  • max log size=50 日志文件达到50K,将轮循rotate,单位KB
  • Security三种认证方式:
    • user:samba用户(采有linux用户,samba的独立口令)
    • share:匿名(CentOS7不再支持),已不建议使用
    • server:已不建议使用
  • passdb backend = tdbsam 密码数据库格式
4.5.2 配置特定目录共享
  • 每个共享目录应该有独立的[ ]部分
  • [共享名称] 远程网络看到的共享名称
    • comment 注释信息
    • path 所共享的目录路径
    • public 能否被guest访问的共享,默认no,和guest ok 类似
    • browsable 是否允许所有用户浏览此共享,默认为yes,no为隐藏
    • writable=yes 可以被所有用户读写,默认为no
    • read only=no 和writable=yes等价,如与以上设置冲突,放在后面的设置生效,默认只读
    • write list 用户,@组名,+组名,用,分隔,如writable=no,列表中用户或组可读写,不在列表中用户只读
    • valid users 特定用户才能访问该共享,如为空,将允许所有用户,用户名之间用空格分隔
  • 范例:基于特定用户和组的共享
    vim /etc/samba/smb.conf
    [share]
    path = /app/dir
    valid users=wang,@admins
    writeable = no
    browseable = no
    

4.6 实战案例

4.6.1 实战案例:利用SAMBA实现指定目录共享
#在samba服务器上安装samba包
yum -y install samba
#创建samba用户和组
groupadd -r admins
useradd -s /sbin/nologin -G admins wang
smbpasswd -a wang
useradd -s /sbin/nologin mage
smbpasswd -a mage

#创建samba共享目录,并设置SElinux
mkdir /testdir/smbshare
chgrp admins /testdir/smbshare
chmod 2775 /testdir/smbshare

#samba服务器配置
vim /etc/samba/smb.conf
...省略...
[share]
path = /testdir/smbshare
write list = @admins

systemctl enable --now smb nmb

#samba客户端访问
yum -y install cifs-utils

#用wang用户挂载smb共享并访问
mkdir /mnt/wang
mount -o username=wang //smbserver/share /mnt/wang
echo "Hello wang" >/mnt/wang/wangfile.txt

#用mage用户挂载smb共享并访问
mkdir /mnt/mage
mount -o username=mage //smbserver/share /mnt/mage
touch /mnt/mage/magefile.txt
4.6.2 实战案例2:实现不同samba用户访问相同的samba共享,实现不同的配置
#创建三个samba用户,并指定密码为magedu
useradd -s /sbin/nologin -r smb1
useradd -s /sbin/nologin -r smb2
useradd -s /sbin/nologin -r smb3
smbpasswd –a smb1
smbpasswd –a smb2
smbpasswd –a smb3

#修改samba配置文件
Vim /etc/samba/smb.conf
#在workgroup下加一行
config file= /etc/samba/conf.d/%U 说明:%U表示用户名
[share]
Path=/data/dir
Read only= NO
Guest ok = yes
write list=@wheel

#针对smb1和smb2用户创建单独的配置文件
Vim /etc/samba/conf.d/smb1
[share]
Path=/data/dir1
Read only= NO 等价于writable = yes
Create mask=0644
#说明:默认为744

Vim /etc/samba/conf.d/smb2
[share]
path=/data/dir2

systemctl restart smb nmb

#用户smb1,smb2,smb3访问share共享目录,看到目录是不同目录
smbclient //sambaserver/share -U smb1%magedu
smbclient //sambaserver/share -U smb2%magedu
smbclient //sambaserver/share -U smb3%magedu

5 数据的实时同步

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-95ARsVUk-1577107595328)(%E6%88%AA%E5%9B%BE/2019%E5%B9%B411%E6%9C%8821%E6%97%A5/image-20191223151647197.png)]

  • 在生产环境,有时会需要两台主机的特定目录实现实时同步。比如,将NFS共享目录的数据文件,自动实时同步到备份的服务器特定目录中

5.1 实时同步技术介绍

  • 实现实时同步的方法
    • inotify + rsync 方式实现数据同步
    • sersync :金山公司周洋在 inotify 软件基础上进行开发的,功能更加强大
  • 工作原理:
    • 要利用监控服务(inotify),监控同步数据服务器目录中信息的变化
    • 发现目录中数据产生变化,就利用rsync服务推送到备份服务器上
  • inotify:
    • 异步的文件系统事件监控机制,利用事件驱动机制,而无须通过诸如cron等的轮询机制来获取事件,linux内核从2.6.13起支持 inotify,通过inotify可以监控文件系统中添加、删除,修改、移动等各种事件

      [root@centos8 ~]#grep -i inotify /boot/config-4.18.0-80.el8.x86_64
      CONFIG_INOTIFY_USER=y
      
  • 实现inotify软件:
    • inotify-tools
    • sersync
    • lrsyncd
  • inotify+rsync使用方式
    • inotify 对同步数据目录信息的监控
    • rsync 完成对数据的同步
    • 利用脚本进行结合

5.2 实现inotify

5.2.1 内核支持
  • 内核是否支持inotify
    • Linux支持inotify的内核最小版本为 2.6.13,参看man 7 inotify

      ls -l /proc/sys/fs/inotify #列出下面的文件,说明服务器内核支持inotify
      -rw-r--r-- 1 root root 0 Dec 7 10:10 max_queued_events
      -rw-r--r-- 1 root root 0 Dec 7 10:10 max_user_instances
      -rw-r--r-- 1 root root 0 Dec 6 05:54 max_user_watches
      
  • inotify内核参数说明:
    • max_queued_events:inotify事件队列最大长度,如值太小会出现 Event Queue Overflow 错误,默认值:16384
    • max_user_instances:每个用户创建inotify实例最大值,默认值:128
    • max_user_watches:可以监视的文件数量(单进程),默认值:8192
  • 范例:
    [root@centos8 ~]#vim /etc/sysctl.conf
    fs.inotify.max_queued_events=66666
    fs.inotify.max_user_watches=100000
    [root@centos8 ~]#sysctl -p
    fs.inotify.max_queued_events = 66666
    fs.inotify.max_user_watches = 100000
    [root@centos8 ~]#cat /proc/sys/fs/inotify/*
    66666
    128
    100000
    
5.2.2 inotify-tools工具
  • inotify-tools参考文档:https://github.com/rvoicilas/inotify-tools/wiki
  • 安装inotify-tools:基于epel源
    yum install inotify-tools
    
  • inotify-tools包主要工具:
    • inotifywait: 在被监控的文件或目录上等待特定文件系统事件(open ,close,delete等)发生,常用于实时同步的目录监控
    • inotifywatch:收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计
  • inotifywait 命令常见选项
    • -m, --monitor 始终保持事件监听
    • -d, --daemon 以守护进程方式执行,和-m相似,配合-o使用
    • -r, --recursive 递归监控目录数据信息变化
    • -q, --quiet 输出少量事件信息
    • –exclude 指定排除文件或目录,使用扩展的正则表达式匹配的模式实现
    • –excludei 和exclude相似,不区分大小写
    • -o, --outfile 打印事件到文件中,相当于标准正确输出,注意:使用绝对路径
    • -s, --syslogOutput 发送错误到syslog相当于标准错误输出
    • –timefmt 指定时间输出格式
    • –format 指定的输出格式;即实际监控输出内容
    • -e指定监听指定的事件,如果省略,表示所有事件都进行监听
  • inotifywait 的–timefmt 时间格式
  • 参考 man 3 strftime
    • %Y 年份信息,包含世纪信息

    • %y 年份信息,不包括世纪信息

    • %m 显示月份,范围 01-12

    • %d 每月的第几天,范围是 01-31

    • %H 小时信息,使用 24小时制,范围 00-23

    • %M 分钟,范围 00-59

      --timefmt "%Y-%m-%d %H:%M"
      
  • inotifywait 的 --format 格式定义
    • %T 输出时间格式中定义的时间格式信息,通过 --timefmt option 语法格式指定时间信息
    • %w 事件出现时,监控文件或目录的名称信息
    • %f 事件出现时,将显示监控目录下触发事件的文件或目录信息,否则为空
    • %e 显示发生的事件信息,不同的事件默认用逗号分隔
    • %Xe显示发生的事件信息,不同的事件指定用X进行分隔
  • 范例:
    --format "%T %w%f event: %;e"
    --format '%T %w %f'
    
  • inotifywait -e 选项指定的事件类型
    • create 文件或目录创建
    • delete 文件或目录被删除
    • modify 文件或目录内容被写入
    • attrib 文件或目录属性改变
    • close_write 文件或目录关闭,在写入模式打开之后关闭的
    • close_nowrite 文件或目录关闭,在只读模式打开之后关闭的
    • close 文件或目录关闭,不管读或是写模式
    • open 文件或目录被打开
    • moved_to 文件或目录被移动到监控的目录中
    • moved_from 文件或目录从监控的目录中被移动
    • move 文件或目录不管移动到或是移出监控目录都触发事件
    • access 文件或目录内容被读取
    • delete_self 文件或目录被删除,目录本身被删除
    • unmount 取消挂载
    • 范例:
      范例:使用inotifywait
  • 范例:
    -e create,delete,moved_to,close_write, attrib
    
  • 范例:使用inotifywait
    #监控一次性事件
    inotifywait /data
    
    #持续前台监控
    inotifywait -mrq /data
    
    #持续后台监控,并记录日志
    inotifywait -o /root/inotify.log -drq /data --timefmt "%Y-%m-%d %H:%M" --format
    "%T %w%f event: %e"
    
    #持续前台监控特定事件
    inotifywait -mrq /data --timefmt "%F %H:%M" --format "%T %w%f event: %;e" -e
    create,delete,moved_to,close_write,attrib
    

5.3 rsync

  • rsync 常用于做为 linux系统下的数据镜像备份工具,实现实现远程同步,支持本地复制,或者与其他SSH、rsync主机同步数据,支持增量备份,配合任务计划,rsync能实现定时或间隔同步,配合inotify或sersync,可以实现触发式的实时数据同步
  • 官方网站: http://rsync.samba.org/
  • 软件包:rsync,rsync-daemon(CentOS 8)
  • 服务文件:/usr/lib/systemd/system/rsyncd.service
  • 配置文件:/etc/rsyncd.conf
  • 端口:873/tcp
5.3.1 rsync命令
  • rsync 格式
    #Local:
    rsync [OPTION...] SRC... [DEST]
    
    #Access via remote shell:
    Pull:
    rsync [OPTION...] [USER@]HOST:SRC... [DEST]
    Push:
    rsync [OPTION...] SRC... [USER@]HOST:DEST
    
    #Access via rsync daemon:
    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有三种工作方式:
    • 本地文件系统上实现同步。命令行语法格式为上述"Local"段的格式。
    • 本地主机使用远程shell和远程主机通信。命令行语法格式为上述"Access via remote shell"段的格式。
    • 本地主机通过网络套接字连接远程主机上的rsync daemon。命令行语法格式为上述"Access via rsync daemon"段的格式。
  • 前两者的本质是通过本地或远程shell,而第3种方式则是让远程主机上运行rsyncd服务,使其监听在一个端口上,等待客户端的连接。
  • 常见选项:
    -v:显示rsync过程中详细信息。可以使用"-vvvv"获取更详细信息。
    -P:显示文件传输的进度信息。(实际上"-P"="--partial --progress",其中的"--progress"才是显示进度信息的)。
    -n --dry-run :仅测试传输,而不实际传输。常和"-vvvv"配合使用来查看rsync是如何工作的。
    -a --archive :归档模式,表示递归传输并保持文件属性。等同于"-rtopgDl"。
    -r --recursive:递归到目录中去。
    -t --times:保持mtime属性。强烈建议任何时候都加上"-t",否则目标文件mtime会设置为系统时间,导致下次更新:检查出mtime不同从而导致增量传输无效。
    -o --owner:保持owner属性(属主)。
    -g --group:保持group属性(属组)。
    -p --perms:保持perms属性(权限,不包括特殊权限)。
    -D :是"--device --specials"选项的组合,即也拷贝设备文件和特殊文件。
    -l --links:如果文件是软链接文件,则拷贝软链接本身而非软链接所指向的对象
    -z :传输时进行压缩提高效率
    -R --relative:使用相对路径。意味着将命令行中指定的全路径而非路径最尾部的文件名发送给服务端,包括它们的属性。用法见下文示例。
    --size-only :默认算法是检查文件大小和mtime不同的文件,使用此选项将只检查文件大小。
    -u --update :仅在源mtime比目标已存在文件的mtime新时才拷贝。注意,该选项是接收端判断的,不会影响删除行为。
    -d --dirs :以不递归的方式拷贝目录本身。默认递归时,如果源为"dir1/file1",则不会拷贝dir1目录,使用该选项将拷贝dir1但不拷贝file1。
    --max-size :限制rsync传输的最大文件大小。可以使用单位后缀,还可以是一个小数值(例如:"--
    max-size=1.5m")
    --min-size :限制rsync传输的最小文件大小。这可以用于禁止传输小文件或那些垃圾文件。
    --exclude :指定排除规则来排除不需要传输的文件。
    --delete :以SRC为主,对DEST进行同步。多则删之,少则补之。注意"--delete"是在接收端执行的,所以它是在:exclude/include规则生效之后才执行的。
    -b --backup :对目标上已存在的文件做一个备份,备份的文件名后默认使用"~"做后缀。
    --backup-dir:指定备份文件的保存路径。不指定时默认和待备份文件保存在同一目录下。
    -e :指定所要使用的远程shell程序,默认为ssh。
    --port :连接daemon时使用的端口号,默认为873端口。
    --password-file:daemon模式时的密码文件,可以从中读取密码实现非交互式。注意,这不是远程shell认证的密码,而是rsync模块认证的密码。
    -W --whole-file:rsync将不再使用增量传输,而是全量传输。在网络带宽高于磁盘带宽时,该选项比增量传输更高效。
    --existing :要求只更新目标端已存在的文件,目标端还不存在的文件不传输。注意,使用相对路径时如果上层目录不存在也不会传输。
    --ignore-existing:要求只更新目标端不存在的文件。和"--existing"结合使用有特殊功能,见下文示例。
    --remove-source-files:要求删除源端已经成功传输的文件
    
5.3.2 以独立服务方式运行rsync
  • 范例:以独立服务方式运行 rsync
    #创建rsync服务器的配置文件
    vi /etc/rsyncd.conf
    uid = root
    gid = root
    use chroot = no
    max connections = 0
    ignore errors
    exclude = lost+found/
    log file = /var/log/rsyncd.log
    pid file = /var/run/rsyncd.pid
    lock file = /var/run/rsyncd.lock
    reverse lookup = no
    hosts allow = 192.168.8.0/24
    [backup]
    path = /backup/
    comment = backup
    read only = no
    auth users = rsyncuser
    secrets file = /etc/rsync.pass
    
    #服务器端准备目录
    mkdir /backup
    
    #服务器端生成验证文件
    echo "rsyncuser:magedu" > /etc/rsync.pass
    chmod 600 /etc/rsync.pass
    
    #服务器端启动rsync服务
    rsync --daemon #可加入/etc/rc.d/rc.local实现开机启动
    systemctl start rsyncd #CentOS 7 以上版本
    
    #客户端配置密码文件
    echo "magedu" > /etc/rsync.pass
    chmod 600 /etc/rsync.pass #此为必要项
    
    #客户端测试同步数据
    rsync -avz --delete --password-file=/etc/rsync.pass /data/ \
    rsyncuser@rsync服务器IP::backup
    

5.4 创建inotify_rsync.sh脚本

#!/bin/bash
SRC='/data/'
DEST='rsyncuser@rsync服务器IP::backup'
inotifywait -mrq --timefmt '%Y-%m-%d %H:%M' --format '%T %w %f' -e
create,delete,moved_to,close_write,attrib ${SRC} |while read DATE TIME DIR
FILE;do
	FILEPATH=${DIR}${FILE}
	rsync -az --delete --password-file=/etc/rsync.pass $SRC $DEST && echo
"At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >>
/var/log/changelist.log
done

5.5 实战案例:实现基于分布式的LAMP架构,并将NFS实时同步到备份服务器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MjCRZZLo-1577107595329)(%E6%88%AA%E5%9B%BE/2019%E5%B9%B411%E6%9C%8821%E6%97%A5/image-20191223153905577.png)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值