• rsync+inotify远程同步


    目录

    前言

    一、Rsync 远程同步

    1.1  rsync 介绍

    ​编辑

    1.2  rsync 同步方式

    1.3  rsync特性

    1.4  rsync与cp、scp对比

    1.5  rsync实时同步

    二、rsync 命令

    2.1  命令格式

    2.2   常用的参数

    2.3  rsync本地复制实例

    2.4  配置源的两种表示方法

    三、配置 Rsync 源服务器

    3.1  rsync  同步源

    3.2  配置 Rsync 下行同步

    3.2.1  配置环境

    3.2.2  将 server 服务器数据备份到 client  服务器

    3.2.3  客户端配置client :(192.168.111.40) 

    3.2.4  关闭rsync 服务

    3.3  --delect 用法

    四、 inotify简介

    4.1   inotifywait 命令

    4.2  配置Rsync+inotify 实时同步

    4.3   配置步骤

    4.3.1  server 服务端关闭只读模式并为共享目录赋权 

    4.3.2  优化 client 客户端 内核参数 

    4.3.3  客户端(192.168.111.40):编译安装 inotify-tools 

    4.3.4  客户端启动监听 

    4.3.5  编写触发同步脚本

    五、rsync的应用场景

    六、总结


    前言

    在系统管理员的工作中备份无疑是一个重要的部分。当没有完整备份或者良好规划的备份和实施时,就可能或早或晚不可挽回地丢失重要的数据。rsync 无疑是一个很好的选择,下面将介绍rsync的工作过程。

    一、Rsync 远程同步

    1.1  rsync 介绍

    rsync(Remote Sync,远程同步)一款开源的快速增量备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,并保持链接和权限,且采用优化的同步算法,传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。

    rsync软件支持跨平台,适用于unix/ linux/windows等多种操作系统平台

    rsync是一个快速和非常方便的文件复制工具。它能本地复制,远程复制,或者远程守护进程方式复制,它提供了大量的参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制

    以其delta-transfer算法闻名。

    rsync监听端口:873

    rsync运行模式:C/S

    官方网址:https://rsync.samba.org/

    1.2  rsync 同步方式

    1. 完整备份:每次备份都是从备份源将所有的文件或目录备份到目的地

    2. 差量备份:备份上次完全备份以后有变化的数据(它针对的上次的完全备份,备份过程中不清除存档属性)。

    3. 增量备份:备份上次备份以后所有变化的数据(它不管是哪种类型的备份,有变化的数据就备份,会清除存档属性)。

    1.3  rsync特性

    • 可以镜像保存整个目录和文件系统
    • 可以很容易做到保持原文件的权限、时间、软硬连接等
    • 无须特殊权限即可安装

    快速

    第一次同步时rsync会复制全部内容,但在下一次只传输修改过的文件
    rsync在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的宽带

    安全

    可以使用scp、ssh等方式来传输文件
    也可通过直接socket连接
    支持匿名传输,以方便进行网站镜像

    1.4  rsync与cp、scp对比

    • cp命令是一种典型的将文件完整的拷贝到一个位置。而rsync是,第一次拷贝,在目标位置没有的时候,rsync是全量拷贝过去,但是第二次拷贝的时候,只会对差异项进行同步拷贝。所有如果对同一个文件进行二次备份的话,rsync速度会相较于cp而言更快。
    • cp只支持本地,而rsync支持远程
    • scp是基于cp原理,也是属于完整性拷贝文件。假设rsync和scp拷贝的文件都是第一,目标地址都没有要同步的文件,此时,这两者的差异在于,第一个,这个要传输的文件大不大,第二个要看在传输的过程中,用的带宽大不大。如果文件不大的情况下,scp是把数据从磁盘中的块存储提取出来,封装一下,网络传过去,此时scp更快,如果是更大的文件,比如说40G,带宽只支持100M的带宽,scp想要传输,需要拆分数据,一段一段传输。而rsync会根据一个逻辑意义上的空间,把数据划分出来,把数据先压缩再传输,所以这种方式而言,带宽校,文件大,这个时候先压缩再传输会比较快。此时适合用rsync远程同步。

    1.5  rsync实时同步

    定期同步的不足:

    • 执行备份的时间固定,延迟明显、实时性差
    • 当同步源长期不变化时,密集的定期任务是不必要的

    实时同步的优点:

    • 一旦同步源出现变化,立即启动备份
    • 只要同步源无变化,则不执行备份

    二、rsync 命令

    2.1  命令格式

    rsync  [选项]    原始位置    目标位置  
    

    2.2   常用的参数

    常用选项

    解释

    -v,–verbose

    详细模式输出

    -q,–quiet

    精简输出模式

    -c,–checksum

    打开校验开关,强制对文件传输进行校验

    -a,–archive

    归档模式,表示以递归方式传输文件,并保持所有文件树形等同于-rlpt

    -z

    在传输文件时进行压缩

    -r,–recursive

    对子目录以递归模式处理,包含目录及子目录中的所有文件

    -H,–hard-links

    保留硬链接

    -l, --links

    保留软链接

    –delete

    删除目标位置有而原始位置没有的文件(一致性)

    –delete-after

    传输结束以后再删除

    -A

    保留ACL属性信息

            -D

    保留设备文件及其他特殊文件

    -checksum

    根据对象的校验和来决定是否跳过文件

           -o

    保留文件的属主标记(仅超级用户使用)

            -g

    保留文件的属组标记(仅超级用户使用)

              -t

    保留文件的时间标记

    注:常用的是-avz

    2.3  rsync本地复制实例

    以下两者区别是什么?

    • rsync -avz abc/ /opt/ :只会拷贝abc目录下面的文件,而不会拷贝abc这个目录

    • rsync -avz /abc /opt/:会连着目录一起拷贝到/opt下

    1. #如果是rsync -avz abc/ /opt/会是什么情况
    2. cd /opt
    3. mkdir /abc
    4. cd /abc/
    5. touch 1.txt 2.txt
    6. cd /
    7. rsync -avz abc/ /opt/
    8. cd /opt/
    9. ls
    10. #如果是rsync -avz /abc /opt/会是什么情况
    11. cd /opt/
    12. rm -rf *
    13. rsync -avz /abc /opt/
    14. ls

    #如果是rsync -avz abc/ /opt/会是什么情况

    #如果是rsync -avz /abc /opt/会是什么情况

    2.4  配置源的两种表示方法

    方法一:

    1. #用户名@主机地址: :共享模块名
    2. rsync -avz backuper@192.168.111.30::wwwroot /root
    3. #backuper指的是我在同步的时候用的哪个用户身份
    4. #wwwroot代表的是模块,模块下面会写同步的默认路径和一些特性,所以我们只需要写模块就好了
    5. #/root指的是本地节点

    方法二:

    1. #rsync:/用户名@主机地址/共享模块名
    2. rsync -avz rsync: //backuper@192.168.111.30/wwwroot /root
    3. URL:具体的位置点,例如:http://www.baidu.com./class1/men/id01.html
    4. URI:标识的是拥有同一类特性或类型的一个集合 ,例如http://www.baidu.com./class1/men

    三、配置 Rsync 源服务器

    3.1  rsync  同步源

    在远程同步任务中,负责发起 rsync 同步操作的客户机称为客户端,而负责响应来自客户端的 rsync 同步操作的服务器称为备份源**,也称之为同步源

    • 在下行同步(下载)中,同步源负责提供文档的原始位置,发起端应对该位置有读取权限
    • 在上行同步(上传)中,同步源负责提供文档的目标位置,发起端应对该位置具有写入权限

    3.2  配置 Rsync 下行同步

    3.2.1  配置环境

    主机操作系统IP 地址主要软件
    serverCentOS7192.168.111.30rsync
    clientCentOS7192.168.111.40rsync / inotify-tools-3.14.tar.gz

    3.2.2  将 server 服务器数据备份到 client  服务器

    1. systemctl stop firewalld
    2. systemctl disable firewalld
    3. setenforce 0
    4. #关闭防火墙及安装机制
    5. yum install -y httpd rsync
    6. #rsync系统一般已默认安装,安装httpd是为了生成/var/www/html目录(后续会用到作为共享目录)
    7. vim /etc/rsyncd.conf
    8. #编辑rsync配置文件
    9. uid = root
    10. gid = root
    11. use chroot = yes
    12. address = 192.168.111.30
    13. port 873
    14. log file = /var/log/rsyncd.log
    15. pid file = /var/run/rsyncd.pid
    16. hosts allow = 192.168.111.0/24
    17. [wwwroot]
    18. path = /var/www/html
    19. comment = Document Root of www.yxp.com
    20. read only = yes
    21. dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z
    22. auth users = backuper
    23. secrets file = /etc/rsyncd_users.db
    24. ----详解----
    25. uid = root #用户id,表示共享权限能执行的身份
    26. gid = root #组id
    27. use chroot = yes #开启,禁锢在源目录,表示允许在访问我备份的目录或文件的时候,使用的角色是root,同时你访问本地目录时拥有的也是root权限
    28. address = 192.168.111.30 #监听地址
    29. port 873 #默认端口号为873
    30. log file = /var/log/rsyncd.log #日志文件存放位置
    31. pid file = /var/run/rsyncd.pid #存放进程id的文件位置
    32. hosts allow = 192.168.111.0/24 #允许访问的主机网段,有点类似于黑白名单
    33. ###############以上是全局配置,以下是模块配################################################
    34. [wwwroot] #共享模块的名称,rsync默认调用该模块,默认我调用的路径是该模块指定的路径
    35. path = /var/www/html #源目录路径
    36. comment = Document Root of www.yxp.com #
    37. read only = yes #是否为只读
    38. dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z #同步时不再压缩的文件类型,因为同步时,-avz已经进行压缩
    39. auth users = backuper #授权用户,使用wwwroot模块的用户是哪个用户,多个账户以空格隔开
    40. secrets file = /etc/rsyncd_users.db #存放账号信息的数据文件,一行一个
    41. #小结
    42. 第一部分定义共享模块全局模块配置
    43. 第二部分:共享模块(可以为多个) 可以对应不同的“源目录” 和授权账号信息
    44. 第三部分,此配置文件是为rsync --daemon模式设置的
    45. #如采用匿名的方式,只要将其中的 “auth users” 和 “secrets file”配置项去掉即可
    46. ————————————————
    47. vim /etc/rsyncd_users.db
    48. backuper:123123
    49. #编辑用户账号文件,固定格式为[名称:密码],一行一个
    50. chmod 600 /etc/rsyncd_users.db
    51. #官方要求,最好只是赋权600!
    52. rsync --daemon
    53. #开启服务
    54. netstat -natp | grep rsync
    55. #检测端口号,确认服务是否成功开启
    56. cd /var/www/html
    57. #切换至共享目录下
    58. touch dog.html cat.html
    59. ls

    #关闭防火墙及安装机制

    #rsync系统一般已默认安装,安装httpd是为了生成/var/www/html目录(后续会用到作为共享目录)

    #编辑rsync配置文件

     #编辑用户账号文件,固定格式为[名称:密码],一行一个

    #官方要求,最好只是赋权600!

     #开启服务、检测端口号,确认服务是否成功开启

    #切换至共享目录下,创建文件

    3.2.3  客户端配置client :(192.168.111.40) 

    1. systemctl stop firewalld
    2. systemctl disable firewalld
    3. setenforce 0
    4. #关闭防火墙及安装机制
    5. yum install -y rsync
    6. #安装rsync
    7. mkdir /abc
    8. cd /abc/
    9. #创建一个目录/abc,用来同步
    10. rsync -avz backuper@192.168.111.30::wwwroot /abc
    11. #使用rsync同步备份源的同步文件
    12. ls
    13. #查看同步是否成功
    14. vim /etc/server.pass
    15. 123456
    16. #编辑免交互密钥文件,第一行为密码
    17. chmod 600 /etc/server.pass
    18. #给密钥文件赋权600
    19. rsync -az --delete --password-file=/etc/server.pass backuper@192.168.111.30::wwwroot /abc
    20. #rsync,使用密钥文件/etc/server/pass对应backuper用户,IP地址为192.168.111.30的共享模块文件进行压缩,并归档同步至当前服务器的/abc目录下,同时删除差异内容,如果原目标有的,会增加,原目标没有的,会删除。保持一致性。
    21. ls /abc
    22. #查看下行同步是否成功

    #关闭防火墙及安装机制

    #安装rsync

    #创建一个目录/abc,用来同步

    #使用rsync同步备份源的同步文件,并查看是否完成 

    #编辑免交互密钥文件,第一行为密码 

    #给密钥文件赋权600 

    再次同步验证是否需要密码

    3.2.4  关闭rsync 服务

    1. kill $(cat /var/run/rsyncd.pid)
    2. rm -rf /var/run/rsyncd.pid

    3.3  --delect 用法

    --delect 用法   #删除目标位置有而原始位置没有的文件
    

     将源rsync服务器的/var/www/html/ 目录下的文件删除,此时加上–delect,客户端的/abc/目录下的文件被删除,可以看出客户端是目标

    应用场景:批量删除

    四、 inotify简介

    可以监控文件系统的变动情况,并做出通知响应

    1. #调整inotify内核参数(优化)
    2. letc/ sysctl.conf(内核参数配置文件)
    3. inotifywait: #用于持续监控,实时输出结果
    4. inotifywatch: #用于短期监控,任务完成后再输出结果
    5. max_queue_events #监控事件队列大小
    6. max_user instances #最多监控实例数,可以看成最多可以监控多少个实例
    7. max_user_watches #每个实例最多监控文件数

    4.1   inotifywait 命令

    持续监控并实时输出监控结果的命令

    格式:inotifywait  [参数]
    

    参数:

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

    4.2  配置Rsync+inotify 实时同步

    1. 使用inotify通知接口,可以用来监控文件系统的各种变化情况如文件存取、删除、移动、修改等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。
    2. 将inotify机制与rsync工具相结合,可以实现触发式备份(实时同步),即只要原始位置的文档发生变化,则立即启动增量备份操作;否则处于静默等待状态。
    3. 因为 inotify 通知机制由 Linux 内核提供,因此主要做本机监控,在触发式备份中应用时更适合上行同步

    inotify-rsync实际应用原理图:

    4.3   配置步骤

    4.3.1  server 服务端关闭只读模式并为共享目录赋权 

    server   (192.168.111.30)

    1. vim /etc/rsyncd.conf
    2. read only = no
    3. #关闭只读模式,否则将不可写入
    4. kill `cat /var/run/rsyncd.pid`
    5. #修改完配置文件需要重启服务,这里采用直接杀掉进程号的方式
    6. netstat -natp | grep rsync
    7. #检查一下服务是否已被终止
    8. rsync --daemon
    9. netstat -natp | grep rsync
    10. #再次开启服务并检查端口号确认

    #关闭只读模式,否则将不可写入

    #修改完配置文件需要重启服务,这里采用直接杀掉进程号的方式

    再次开启服务并检查端口号确认

    4.3.2  优化 client 客户端 内核参数 

    client 客户端   :192.168.111.40

    1. cat /proc/sys/fs/inotify/max_queued_events #监控事件队列
    2. cat /proc/sys/fs/inotify/max_user_instances #最多监控实例数
    3. cat /proc/sys/fs/inotify/max_user_watches #每个实例最多监控文件数
    4. vim /etc/sysctl.conf #加大每个参数
    5. fs.inotify.max_queued_events = 16384
    6. fs.inotify.max_user_instances = 1024
    7. fs.inotify.max_user_watches = 1048576
    8. #当要监控的目录、文件数据量较多或者变化频繁时,建议加大参数值
    9. sysctl -p
    10. #刷新

    #查看参数

    #加大每个参数

    #刷新

    4.3.3  客户端(192.168.111.40):编译安装 inotify-tools 

    1. yum install -y gcc gcc-c++
    2. #安装gcc gcc-c++
    3. cd /opt
    4. #切换至/opt上传inotify-tools安装包
    5. tar zxf inotify-tools-3.14.tar.gz
    6. #解压
    7. cd /opt/inotify-tools-3.14/
    8. ./configure
    9. make -j 4 && make install
    10. #编译安装

    #安装gcc gcc-c++

    #切换至/opt上传inotify-tools安装包

    进行解压,编译安装

    4.3.4  客户端启动监听 

    1. #持续监听对/abc的modify,create,move,delete操作
    2. inotifywait -mrq -e modify,create,delete /abc

    它首先经历的2.txt还没被更改,所以现在交换分区中先复制一份到内存中,等修改后,落地到磁盘,删除虚拟内存、交换分区 

    4.3.5  编写触发同步脚本

    1. vim /opt/inotify.sh
    2. #!/bin/bash
    3. INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /abc/"
    4. RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /abc/ backuper@192.168.111.30::wwwroot/"
    5. $INOTIFY_CMD | while read DIRECTORY EVENT FILE
    6. do
    7. if [ $(pgrep rsync | wc -l) -le 0 ] ; then
    8. $RSYNC_CMD
    9. fi
    10. done
    11. ----详解----
    12. #!/bin/bash
    13. INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /abc/"
    14. #INOTIFY_CMD变量:持续监控 /opt/abc目录中的创建,删除,移动,修改,改变时间的操作
    15. RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /abc/ xixi@192.168.111.30::wwwroot"
    16. #RSYNC_CMD变量:使 xixi 用户,/etc/server.pass 密钥文件,将 /xcf1 目录下的文件进行压缩,归档,保留硬链接文件同步至 192.168.111.30 的共享模块定义的目录 /var/www/html 下,并删除差异性内容,保持一致性
    17. $INOTIFY_CMD | while read DIRECTORY EVENT FILE #持续监控...
    18. do
    19. if [ $(pgrep rsync | wc -l) -le 0 ] ; then #如果服务并未启动,则执行同步
    20. $RSYNC_CMD
    21. fi
    22. done
    23. ----
    24. cd /opt/
    25. chmod +x inotify.sh
    26. #给脚本赋权
    27. chmod +x /etc/rc.d/rc.local
    28. echo "/opt/inotify.sh" >> /etc/rc.d/rc.local
    29. #设置开机自启动
    30. sh -x ./inotify.sh
    31. #执行脚本
    32. cd /abc
    33. touch jingjing.html
    34. rm -rf jiang.html
    35. #创建一个新的html文件并删除之前的qwe
    36. ls
    37. #再次确认一下

    #编写脚本

     ##给脚本赋权

    #设置开机自启动

    #测试

    #执行脚本

     进行验证服务端查看文件

    五、rsync的应用场景

    1、增量同步

    2、备份/迁移:可以作为辅助工具(mysql 主从复制 rsync +inotify ——》趋于一致 双向同步——MM,但是只能在并发量不大的时候可以用)

    3、假设mysql 从主机A迁移到主机B(一主两从模式)

    一主两从模式迁移方案

    ①确定迁移的时间、业务线停止的时间、要写文档描述具体操作,要发邮件审批

    ②确认迁移后的节点的环境问题(资源环境 + 系统依赖环境 + mysql内部的格式环境 ------1)例如自增长,自增长可能会导致主从复制不一致的情况 2)版本迁移问题,比如说低版本向高版本迁移。两个版本中的差异比较大,数据迁移比较重要,需要和研发沟通,让研发开发一个工具,让低版本可以转成高版本工具格式,使用工具迁移)

    ③ 如果数据库是相同版本,可以用rsync + inotify持续同步

    ④ 测试、之前还要编写回滚方案

    ⑤ 提交检修申请 22:00 - 00:00
     

    六、总结

    rsync 是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,并保持链接和权限,且采用优化的同步算法,传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。

  • 相关阅读:
    bert ranking listwise demo
    第二十二章《记事本》第3节:项目完整代码
    国庆中秋特辑(五)MySQL如何性能调优?下篇
    python细节随笔
    python练习题集锦之一
    基于径向基函数 (RBF) 神经网络的麦基格拉斯时间序列预测(Matlab代码实现)
    Tiktok 网络、网络
    ElementPlus表格中的背景透明
    可搜索加密:保护隐私的搜索技术
    实践案例:平安健康的 Dubbo3 迁移历程总结
  • 原文地址:https://blog.csdn.net/WuDan_1112/article/details/125608918