• rsync远程同步


    rsync远程同步

    一、什么是rsync

    ​ rsync是一款开源的可以实现全量及增量的本地或远程数据同步备份的有效工具,它能本地复制,远程复制或者远程守护进程方式复制,它提供了大量的参数控制其行为各个方面,并且允许非常灵活的方式来实现文件的传输复制,并且可以通过delta-transfer算法来实现文件对比,从而保证其增量备份。

    二、rsync本地复制

    ​ ①首先将源文件和目标位置的文件做比较,找出差异的部分

    ​ ②根据目的地的位置的文件和源文件差异的部分进行一致性同步

    三、rsync同步源

    ​ rsync同步源是指备份操作的远程服务器,也称备份源

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4rqTLMUB-1663755963377)(C:/Users/mogu/Downloads/%E6%9C%AA%E5%91%BD%E5%90%8D%E6%96%87%E4%BB%B6%20(4)].png)

    其实发起端和数据源是一个很容易混淆的概念,举个栗子,我将数据写给数据库,我就是数据源,虽然是我的主观目的发起的同步,但是我提供数据属于数据源,数据库需要发起请求我的数据,才能将我同步,当然,反过来说我想要数据库提供数据,数据库提供数据,而我需要数据库的数据我就是发起端。

    配置源的两种方式

    格式一

    rsync -avz backuper@192.168.226.121::wwwroot /root
    rsync -avz 用户名	 @指向的数据源的地址		  ::调用什么模块 将数据同步到那个目录
    
    • 1
    • 2

    格式二

    rsync -avz rsync://backuper@192.168.226.121/wwwroot /root
    rsync -avz rsync://用户名@指向的数据源的地址   /使用那个模块 让那个目录同步 将数据同步到那个目录
    
    • 1
    • 2

    数据源配置文件

    /var/log/rsync.pid
    
    • 1
    uid = root								#用户名
    gid = root								#用户组名
    use chroot = yes						#是否禁锢在源目录
    address = 192.168.226.121				#数据源地址
    port 873								#端口号
    log file = /var/log/rsync.log			#rsync日志地址
    pid file = /var/log/rsync.pid			#rsyncpid号地址
    hosts allow = 192.168.226.0 /24			#允许请求的地址
    [wwwroot]								#共享模块
    path = /aaa								#数据源地址
    read only = yes							#是否
    dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2	#对以下格式不压缩
    auth users = root						#授权账户
    secrets file = /etc/user.db				#存放账户信息的数据文件
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    配置密码

    vim  /etc/user.db
    root:2288
    
    chmod 600 /etc/user.db 	#设置权限
    
    • 1
    • 2
    • 3
    • 4

    杀死rsync进程

    kill $(cat /var/run/rsync.pid)
    
    • 1

    客户端免交互

    echo "2288" >/etc/server.pass
    chmod 600 /etc/server.pass
    
    rsync -avz --password-file=/etc/server.pass  root@192.168.226.121::wwwroot /aaa
    
    • 1
    • 2
    • 3
    • 4

    四、rsync命令用法

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

    本地同步

    rsync -avz /aaa/  /bbb/		#将aaa目录下的文件同步到bbb目录下面,只同步目录下的文件
    ls bbb目录
    a.txt  b.txt  c.txt  d.txt
    
    rsync -azv /aaa /bbb/		#将aaa目录同步到bbb目录,连同aaa目录本身,及在bbb目录里生成aaa的一个子目录
    ls bbb目录
    aaa
    ls /bbb/aaa 
    a.txt  b.txt  c.txt  d.txt
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    五、inotify

    ①inotifywait(持续监控并实时输出监控结果的命令)

    ​ 格式:inotifywait 【参数】

    常见参数说明
    -m持续监控
    -r递归监控所有子对象
    -q简化输出信息
    -e指定要监控那些时间类型

    六、rsync+inotif实现Mysql的主从复制

    主机ip角色
    master192.168.226.121数据源
    slave1192.168.226.122客户端

    ​ 流程:我们通过inotify持续监控数据库的data目录,如果有修改就会触发rsync同步

    ①对数据源inotify内核参数进行调整

    #客户端: inotify内核参数
    cat /proc/ sys/fs/inotify/max_queued_eventscat
    /proc/sys/ fs/inotify/max user instancescat
    /proc/sys/fs/inotify/max user watches
    vim /etc/ sysctl.conf
    fs.inotify.max_queued_events = 32768
    #监控时间队列,默认为16384
    fs.inotify.max_user _instances = 1024
    #最多监控实例数,默认为128
    fs.inotify.max user watches = 1048576
    #每个实例最多监控文件数,默认为8192
    #当要监控的目录、文件数据量较多或者变化频繁时,建议加大参数值                              
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    ②在需要同步端监控data目录下的变动

    解压inotify-tools安装

     tar zxvf inotify-tools-3.14.tar.gz 
    
    • 1
     cd inotify-tools-3.14/
     ./configure
     make && make install
    
    • 1
    • 2
    • 3
    inotifywait -mrq -e create,delete,modify /usr/local/mysql/
    
    • 1

    ③在被同步端配置数据源配置文件

    ④通过脚本实时监控并触发同步

    vim /opt/inotify.sh
    
    #!/bin/bash
    #定义监控命令变量
    INOTIFY_CMD="inotifywait -mrq -e create,delete,modify /usr/local/mysql/"
    #定义同步命令变量
    RSYNC_CMD="rsync -avzH --delete  --password-file=/etc/server.pass  /usr/local/mysql/data/ root@192.168.226.122::wwwroot"
    #while read DIRECTORY EVENT FILE 循环捕捉时间文件的变化,如果变化进入循环
    $INOTIFY_CMD | while read DIRECTORY EVENT FILE	
    do
            if [ $(pgrep rsync | wc -l) -le 0 ] ;
                    then
                            $RSYNC_CMD
                    fi
    done
    
    chmod +x  /opt/inotify.sh	#给予脚本执行权限
    chmod +x  /etc/rc.d/rc.local 
    echo "/opt/inotify.sh" >/etc/rc.d/rc.local
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TCX5Pxoh-1663755963379)(C:/Users/mogu/AppData/Roaming/Typora/typora-user-images/image-20220824121208423.png)]
    $RSYNC_CMD
    fi
    done

    chmod +x /opt/inotify.sh #给予脚本执行权限
    chmod +x /etc/rc.d/rc.local
    echo “/opt/inotify.sh” >/etc/rc.d/rc.local

    
    
    
    [外链图片转存中...(img-TCX5Pxoh-1663755963379)]
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    信号完整性分析基础知识之有损传输线、上升时间衰减和材料特性(五):有损传输线的特性阻抗和信号传输速度
    【Android中RecyclerView刷新导致源数据被刷新】
    Qt+树莓派4B 手动设置系统日期和时间
    Spark 3.0 - 7.LR 多分类实现影评预测电影评分与指标评测
    修炼k8s+flink+hdfs+dlink(三:安装dlink)
    【HTML5高级第二篇】WebWorker多线程、EventSource事件推送、History历史操作
    前端 不同屏幕宽度 自适应布局 解决方案
    2.08_python+Django+mysql实现pdf转word项目_项目开发-创建视图
    Vue3中使用富文本编辑器
    表单制作软件有哪些?最火的8款表格制作软件?
  • 原文地址:https://blog.csdn.net/weixin_52190986/article/details/126978217