• rsync+inotify-tools文件传输


    目录

    rsync

    rsync概述

    rsync优缺点

    rsync参数

    rsync命令

    rsync同步源

    linux 安装rsync

    安装rsync服务端

    安装rsync客户端

    windows 安装rsync

    rsync实践

    inotify-tools 

    inotify-tools概述 

     innotify-tools 命令、参数、事件

     rsync客户端安装inotify-tools

     innotify-tools实践

    rsync+inotify-tools实践

    加入开机自动执行


    数据均由rsync客户端推向服务端进行传输

    rsync传输命令最好手敲 否则可能会出现模块用户密码无法识别的情况

    官网:rsync
    Linux版下载:rsync download
    Windows版下载:cwRsync - Rsync for Windows | itefix.net

    rsync

    rsync概述

     rsync(remote sync)远程同步,rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。已支持跨平台,可以在Windows与Linux间进行数据同步。 rsync监听端口:873,rsync运行模式:C/S。

    官网:https://rsync.samba.org/
    官方文档:https://www.samba.org/ftp/rsync/rsync.html
    GitHub地址:https://github.com/WayneD/rsync

    rsync优缺点

    一、优点
    可以镜像保存整个目录树和文件系统;
    可以做到保持原来文件的权限、时间、软硬链接等等;
    无须特殊权限即可安装;
    可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能;
    可以使用rcp、ssh等方式来传输文件,rsync本身不对数据加密;
    支持匿名传输,可以实现方便安全的进行数据备份和镜像;
    可以实现增量同步,既只同步发生变化的数据,因此数据传输效率很高;
    可以通过socket(进程方式)传输文件和数据。
    2)缺点
    同步数据,需要扫描所有文件进行对比,才进行差量传输。如果文件数量达到百万甚至千万级,扫描文件对比文件将非常耗时,降低了rsync效率;
    rsync不能实时地区监测、同步数据。虽然可以通过守护进程方式触发同步,但两次动作间有时间差,导致数据不一致,无法应对出现故障时完全恢复数据。

    缺点可以通过和inotify-tools配合解决

    rsync参数

    rsyncd.conf 参数参数说明
    uid=rootrsync 使用的用户。
    gid=rootrsync 使用的用户组(用户所在的组)
    use chroot=no

    如果为 true,daemon 会在客户端传输文件前“chroot to the path”。这是一种安

    全配置,因为我们大多数都在内网,所以不配也没关系

    max connections=200设置最大连接数,默认 0,意思无限制,负值为关闭这个模块
    timeout=400默认为 0,表示 no timeout,建议 300-600(5-10 分钟)
    pid file

    rsync daemon 启动后将其进程 pid 写入此文件。如果这个文件存在,rsync 不会

    覆盖该文件,而是会终止

    lock file指定 lock 文件用来支持“max connections”参数,使得总连接数不会超过限制
    log file不设或者设置错误,rsync 会使用 rsyslog 输出相关日志信息
    ignore errors忽略 I/O 错误
    read only=false指定客户端是否可以上传文件,默认对所有模块为 true
    list=false是否允许客户端可以查看可用模块列表,默认为可以
    hosts allow

    指定可以联系的客户端主机名或和 ip 地址或地址段,默认情况没有此参数,即都

    可以连接

    hosts deny

    指定不可以联系的客户端主机名或 ip 地址或地址段,默认情况没有此参数,即都

    可以连接

    auth users

    指定以空格或逗号分隔的用户可以使用哪些模块,用户不需要在本地系统中存在。

    默认为所有用户无密码访问

    secrets file指定用户名和密码存放的文件,格式;用户名;密码,密码不超过 8 位
    [backup]

    这里就是模块名称,需用中括号扩起来,起名称没有特殊要求,但最好是有意义的

    名称,便于以后维护

    path

    这个模块中,daemon 使用的文件系统或目录,目录的权限要注意和配置文件中的

    权限一致,否则会遇到读写的问题

    配置/etc/rsyncd_users.db,跟auth users对应

    rsync命令

    1. rsync --help
    2. rsync [选项] 原始位置 目标位置
    常用选项说明
    -r递归模式,包含目录及子目录中的所有文件
    -l对于符号链接文件仍然复制为符号链接文件
    -v显示同步过程的详细信息
    -z在传输文件时进行压缩goD
    -p保留文件的权限标记
    -a归档模式,递归并保留对象属性,等同于-rlpt
    -t保留文件的时间标记
    -g保留文件的属组标记(仅超级用户使用)
    -o保留文件的属主标记(仅超级用户使用)
    -H保留硬链接文件
    -A保留ACL属性信息
    -D保留设备文件及其他特殊文件
    --delete删除目标位置有而原始位置没有的文件
    --checksum根据对象的校验和来决定是否跳过文件

    rsync同步源

           在远程同步任务中,负责发起rsync司步操作的客户机称为发起端,而负责响应来自客户机的rsync同步操作的服务器称为同步源(备份源)。在同步过程中,同步源负责提供文件的原始位置,发起端应对该位置具有读取权限。
    例:
            rsync服务端同步别人,下行同步,将别人的信息下载到本地;
            别人同步rsync服务端,上行同步,将信息上传至rsync服务器。

    同步方式:
            全量备份:
            原有的数据全部传送,把原来的文件和新的文件一起统一传送,全量复制,效率低

            增量备份:
            在传输数据之前通过一些算法通过你有的数据和我有的数据进行对比,把不一样的数据通过网络传输,增量复制,效率高

    配置源的两种表示方法
    格式一:
    用户名@主机地址::共享模块名
    rsync -avz backuper@192.168.10.10::wwwroot /root

    格式二:
    rsync://用户名@主机地址/共享模块名
    rsync -avz rsync://backuper@192.168.10.10/wwwroot /root

    linux 安装rsync

    安装rsync服务端

    1. #安装rsync和xinetd超级守护进程
    2. yum install -y xinetd rsync
    3. #配置rsync配置文件
    4. vim /etc/rsyncd.conf
    5. ##########linux rsyncd.conf 配置文件参数后面不能有备注否则可能有问题##############
    6. #Global Settings 全局配置
    7. uid = nobody #运行rsync的用户
    8. gid = nobody #运行rsync的用户组
    9. use chroot = no #是否让进程离开工作目录
    10. max connections = 5 #最大并发连接数,0为不限制
    11. timeout = 600 #超时时间
    12. pid file = /var/run/rsyncd.pid #指定rsync的pid存放路径
    13. lockfile = /var/run/rsyncd.lock #指定rsync的锁文件存放路径
    14. log file = /var/log/rsyncd.log #指定rsync的日志存放路径
    15. #模块配置
    16. [web1]
    17. path = /var/www #认证的模块名,在client端需要指定 服务端存放客户端文件的目录 windows客户端存放d盘下backup_d文件夹下path = /cygdrive/d/backup_d
    18. ignore errors = yes #忽略一些无关的I/O错误
    19. read only = no #客户端是否能拉(PULL)
    20. write only = no #客户端是否能推(PUSH)
    21. hosts allow = 172.16.150.150 #白名单,可以访问此模块的主机
    22. hosts deny = * #黑名单,*表示任何主机
    23. list = yes #客户端请求是否可以列出模块列表
    24. uid = root #以root的身份去获取文件
    25. gid = root
    26. auth users = web #认证此模块的用户名
    27. secrets file = /etc/web.passwd #指定存放“用户名:密码”格式的文件
    28. max connections = 200 # 最大连接数
    29. timeout = 600 # 设置超时时间
    30. ###############################################################
    31. ##########windows rsyncd.conf 配置文件参数后面不能有备注否则可能有问题##############
    32. uid = root
    33. gid = 0
    34. use chroot = no
    35. strict modes = no
    36. max connections = 5
    37. timeout = 600
    38. pid file = rsyncd.pid
    39. lockfile = rsyncd.lock
    40. log file = rsyncd.log
    41. prot = 873
    42. [test]
    43. path = /cygdrive/d/backup_d
    44. ignore errors = yes
    45. read only = no
    46. hosts deny = *
    47. hosts allow = 192.168.90.243
    48. list = yes
    49. max connections = 200
    50. timeout = 600
    51. auth users = asd
    52. secrets file = etc/rsyncd.secrets
    53. ###########################################################################
    54. #创建同步目录
    55. mkdir -p /var/www/
    56. #配置rsync认证文件/etc/web.passwd
    57. echo "web:web" > /etc/web.passwd
    58. #修改/etc/web.passwd的权限为600
    59. chmod 600 /etc/web.passwd
    60. #配置服务能够启动
    61. chkconfig rsync on
    62. systemctl start xinetd start
    63. #检查873端口是否监听成功
    64. ss -antl | grep 873
    65. #检查rsync的运行状态
    66. chkconfig --list
    67. systemctl status rsync

    安装rsync客户端

    1. #安装
    2. yum install -y xinetd rsync
    3. #设置rsync客户端的密码文件,客户端只需要设置rsync同步的密码即可,不用设置用户名(默认已经安装了rsync)
    4. echo web > /etc/web.passwd
    5. #修改/etc/rsyncd.passwd的权限为600
    6. chmod 600 /etc/web.passwd

    windows 安装rsync

    正常执行rsync安装包下一步下一步下一步即可,服务端需要设置一个账号和密码,客户端则不用,配置信息和linux一样

    window实践 创建bat脚本 执行脚本进行传输数据

    @echo off
    cmd /k "cd /d E:\cwRsync\bin&&rsync.exe -vzrtopg --progress --delete xz@服务端ip::www /cygdrive/E/databackup/www --port=端口号 --password-file=/cygdrive/E/cwRsync/passwd
    "
    pause

    rsync实践

    1. # 在192.168.0.99节点上测试手动同步
    2. # 从远端【拉取】数据
    3. rsync -avz root@192.168.0.99:/opt/nfsdata/* /opt/nfsdata/
    4. #从服务端拉取数据
    5. rsync -avz --progress --delete root@192.168.90.13::web /shell
    6. # 在192.168.0.99节点上测试手动同步
    7. # 从【推送】数据
    8. rsync -avz /opt/nfsdata/* root@192.168.0.99:/opt/nfsdata/
    9. ### 在192.168.0.99节点上测试手动同步,通过【拉取】数据,配置文件配置的模块,这里走的是rsync协议,上面走的是ssh协议,只要做了免密就直接推送或拉取数据了。这里就会用到配置文件里配置的users用户了,也是secrets file文件里配置的其中一个用户。
    10. #【方式一】
    11. rsync -avz backuper@192.168.0.99::nfsdata /opt/nfsdata/
    12. # 【方式二】
    13. rsync -avz rsync://backuper@192.168.0.99/nfsdata /opt/nfsdata/
    14. # 在192.168.0.99节点上执行
    15. ###【推送】
    16. #【方式一】非交互式,/opt/backuper.pass文件是backuper用户的密码,且文件权限600
    17. rsync -avz --password-file=/opt/backuper.pass /opt/nfsdata/* backuper@192.168.0.99::nfsdata
    18. # 【方式二】
    19. rsync -avz /opt/nfsdata/* rsync://backuper@192.168.0.99/nfsdata
    20. #有密码形式推送数据到服务端
    21. rsync -avz --progress --delete /shell 用户@IP地址::模块 --password-file 客户端存放密码文件
    22. rsync -avz --progress --delete /shell @192.168.90.13::test --password-file /etc/web.passwd
    23. #无密码形式推送数据到服务端
    24. rsync -avz --progress --delete /shell uid@服务IPD地址::模块
    25. rsync -avz --progress --delete /shell root@192.168.90.13::web

    inotify-tools 

    inotify-tools概述 

    Inotify是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。

    Inotify 监控文件系统操作,比如读取、写入和创建,基于事件驱动,可以做到对事件的实时响应,高效,而且没有轮询造成的系统资源消耗。

    在前面有讲到,rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样刚好解决了同步数据的实时性问题。

    inotify能监控非常多的文件系统事件,通过监控这些事件来监控文件是否发生变更,然后通过rsync来更新发生变更的文件

     innotify-tools 命令、参数、事件

    命令
    inotify-tools 包含了两个命令:inotifywait 与 inotifywatch。
            inotifywait:在被监控的文件或目录上等待特定文件系统事件发生,执行后处于阻塞状态,适合在shell脚本中使用。
    阻塞状态 (Blocked):阻塞状态是线程因为某种原因放弃CPU的使用权,暂时停止运行。
            inotifywatch:用于收集文件系统的统计数据,例如发生了多少次 inotify 事件,某文件被访问了多少次等等。

    内核参数
            /proc/sys/fs/inotify/ 目录下包含三个文件,分别设置 inotify 相关的三个内核参数。
            max_queued_events:inotify 事件队列可容纳的事件数量,超出的事件被丢弃,但会触发队列溢出Q_OVERFLOW事件。/proc/sys/fs/inotify/max_queued_events默认值16384
            max_user_instances:每个用户可运行的 inotifywait 或 inotifywatch 命令的进程数。/proc/sys/fs/inotify/mak_user_instances默认值128
            max_user_watches:每个 inotifywait 或 inotifywatch 命令可以监控的文件数量。如果监控的文件数目巨大,需要根据情况适当增加此值。/proc/sys/fs/inotify/max_user_watches默认值8192 

    事件
    inotify 监控的文件系统事件:
    access:文件被访问。
    modify:文件被修改。
    attrib:文件元数据被修改。
    open:文件被打开。

    move    移动
    create:在被监控的目录中创建了文件或目录。
    delete:删除了被监控目录中的某个文件或目录。

    -m    持续进行监控
    -r    递归监控所有子对象
    -q    简化输出信息
    -e    指定要监控哪些事件类型

    inotifywait:用于持续监控,实时输出结果
    可监控modify(修改)、create(创建)、move(移动)、delete(删除)、attrib(属性更改)等各种事件,一有变动立即输出结果。
    inotifywatch:用于短期监控,任务完成后再输出结果
    可用来收集文件系统变动情况,并在运行结束后输出汇总的变化情况。
    例:
    inotifywait -mrq -e modify,create,attrib,move,delete 文件或目录


    注意:对文件的某个操作往往会触发多个事件,用户应用程序需要自己防止做出重复响应。

     rsync客户端安装inotify-tools

    1. #检查当前系统内核是否支持inotify 内核版本大于2.6.13则支持
    2. uname -r
    3. #安装 在一块不知道为什么 inotify-tools 没有安装上 所以分开进行了安装
    4. yum install -y epel-release
    5. yum install -y inotify-tools
    6. #配置内核参数
    7. #inotify 事件队列可容纳的事件数量,超出的事件被丢弃,但会触发队列溢出Q_OVERFLOW事件。
    8. #/etc/sysctl.conf(内核参数配置文件),需要配置下面配置
    9. vim /etc/sysctl.conf
    10. ###################sysctl.conf######################### 默认值16384
    11. max_queued_events=16384
    12. #每个用户可运行的 inotifywait 或 inotifywatch 命令的进程数。默认值128
    13. mak_user_instances=128
    14. #每个 inotifywait 或 inotifywatch 命令可以监控的文件数量。
    15. #如果监控的文件数目巨大,需要根据情况适当增加此值。配置的监控数量应该大于监控目标的总文件数默认值8192
    16. max_user_watches=8192 
    17. ########################################################

     innotify-tools实践

    不指定监控事件,分别打开两个 shell 窗口,使用 inotifywait 和 inotifywatch 监控某个目录:

    1. #创建目录
    2. mkdir /var/inotify-test
    3. #监控这个文件有没有发生变化
    4. inotifywait -m /var/inotify-test
    5. #显示目录的详细信息
    6. inotifywatch -v /var/inotify-test
    7. 在目录下面创建两个文件
    8. touch /var/inotify-test/file1
    9. touch /var/inotify-test/file2
    10. 其中 inotifywait 的信息是在进程运行过程中输出的,而 inotifywatch 的信息是在进程结束时输出的。
    11. 以上测试没有指定监听事件,所以监听的是所有的事件,可以通过 -e 选项来指定监听事件,如:
    12. inotifywait -m -e create,modify,delete /var/inotify-test

    rsync+inotify-tools实践

    1. vim /opt/inotify_rsynx.sh
    2. #!/bin/bash
    3. #定义两个变量:监控文件,执行备份
    4. INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete 需要监控的目录或文件"
    5. RSYNC_CMD="rsync -azH --delete --password-file=/etc/密码文件 刚才监控的目录或文件 用户名@主机地址::共享模块名"
    6. #
    7. #rsync -az --delete /home/backup/project/bak_project rsync_backup@172.16.0.92::backup_e &>/dev/null
    8. #while read获取监控结果
    9. $INOTIFY_CMD | while read DIRECTORY EVENT FILE
    10. #当读取目录,事件,文件
    11. do
    12. #如果rsync没有运行,执行rsync进行备份操作
    13. if [ $(pgrep rsync | wc -l) -eq 0 ] ; then
    14. $RSYNC_CMD
    15. fi
    16. done

    加入开机自动执行

    1. chmod +x /etc/rc.d/rc.local
    2. echo '/opt/inotify_rsync.sh' >> /etc/rc.d/rc.local

  • 相关阅读:
    【面向小白】深究模型大小和推理速度的关系!
    第十四届蓝桥杯模拟赛(第二场)题解·2022年·C/C++
    Open3d 使用marching cubes生成3D模型
    【从小白到大白05】c和c++内存管理
    基于R语言实现中介效应检验以及sobel检验代码
    【MyBatis】MyBatis项目结构的搭建
    django学习入门系列之第三点《案例 小米商城二级菜单》
    Nginx服务优化措施、网页安全与配置防盗链
    [附源码]计算机毕业设计JAVA校园期刊网络投稿系统
    SpringClouldAlibaba 之 Sentinel流控规则同步到nacos(并重新生成镜像)
  • 原文地址:https://blog.csdn.net/krb___/article/details/136710198