• rsync 远程同步


    一、rsync

    1.1 、关于rsync

    • 一款快速增量备份工具

    • Remote Sync,远程同步
      支持本地复制,或者与其他SSH、rsync主机同步

    • 在远程同步任务中,负责发起rsync同步操作的客户机称为发起端,而负责响应来自客户机的rsync同步操作的服务器称为同步源。在同步过程中,同步源负责提供文件的原始位置,发起端应对该位置具有读取权限。
      可以镜像保存整个目录树和文件系统;

    1.2、rsync 的特点

    • 可以很容易做到保持原来文件的权限、时间、软硬链接等;

    • 无须特殊权限即可安装;

    • 优化的流程,文件传输效率高;

    • 可以使用 rcp、ssh 等方式来传输文件,当然也可以通过直接的 socket 连接;

    • 支持匿名传输。

    1.3、 工作原理

    在这里插入图片描述

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

    • 首先服务器B(发起源)向服务器A(同步源)进行数据备份,将自己的数据备份到服务器A中。

    • 当服务器B中的数据遭到损失或者增量的时候,都会从服务器A中进行数据同步。

    • 服务器B数据丢失则从服务器A中同步数据丢失的部分。

    • 当服务器B数据增多了,就会再次向服务器A进行数据备份,但是备份的不是完整备份,而是增量备份,即备份同步源中没有的数据。

    二、配置rsync源服务器

    2.1、 基本格式和常用选项

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

    2.2、 启动和关闭rsync服务

    启动服务
    
    • 1
    #启动 rsync 服务,以独立监听服务的方式(守护进程)运行 
    rsync --daemon				
    
    
    • 1
    • 2
    • 3
     关闭服务
    
    • 1
    #关闭 rsync 服务
    kill $(cat /var/run/rsyncd.pid)
    rm -rf /var/run/rsyncd.pid
    
    
    • 1
    • 2
    • 3
    • 4

    2.3、 下行同步基本格式

    从源服务器拉数据
    rsync [选项] 源服务器位置 本地位置
    
    
    ##举个例子#
    #格式一
    rsync -avz test@192.168.11.16::message /opt/					
    
    #格式二
    rsync -avz rsync://test@192.168.11.16/message /opt/
    
    #test为配置文件中的授权账户
    #IP地址为同步源地址
    #message 为配置文件中定义的共享模块
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    2.4、 上行同步基本格式

    推数据到源服务器
    rsync [选项] 本地位置 源服务器位置
    
    
    • 1
    • 2
    • 3

    2.4、 免交互

    2.4.1、 指定密码文件

    echo "abc123" > /etc/server.pass
    chmod 600 /etc/server.pass
    
    
    • 1
    • 2
    • 3

    2.4.2、rsync-daemon方式

    rsync -avz --delete --password-file=/opt/userlist yiliangchen@192.168.11.17::wwwky31  /opt/data/          #rsync-daemon方式
    
    
    • 1
    • 2

    2.4.3、 rsync-ssh方式

    rsync -avz --delete -e 'sshpass -p abc1234 ssh -p 22' /etc/yum.repos.d root@192.168.11.18:/opt/data       #rsync-ssh方式
    
    
    • 1
    • 2

    2.5、 定期同步

    结合crontab计划任务,可以实现定期同步。

    #举个例子 
    crontab -e
    30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass backuper@192.168.80.10::wwwroot /opt/
    #为了在同步过程中不用输入密码,需要创建一个密码文件,保存 backuper 用户的密码,如 /etc/server.pass。
    #在执行 rsync 同步时使用选项 “--password-file=/etc/server.pass” 指定即可。
    
    systemctl restart crond
    systemctl enable crond
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    三、部署rsync下行同步

    3.1、配置环境

    主机		        IP地址	        主要软件
    Master	CentOS7	192.168.11.16	 rsync
    Slave	CentOS7	192.168.11.17	 rsync 
    
    • 1
    • 2
    • 3

    3.2、将 Master 服务器数据备份到 Slave 服务器

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

    在这里插入图片描述

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

    在这里插入图片描述

    编辑rsync配置文件
    
    • 1

    在这里插入图片描述

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

    在这里插入图片描述

    官方要求,最好只是赋权600
    
    • 1

    在这里插入图片描述

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

    在这里插入图片描述

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

    在这里插入图片描述

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

    在这里插入图片描述

    安装rsync
    
    • 1

    在这里插入图片描述

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

    在这里插入图片描述

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

    在这里插入图片描述

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

    在这里插入图片描述

    给密钥文件赋权600
    
    • 1

    在这里插入图片描述

    四、inotify

    可以监控文件系统的变动情况,并做出通知响应
    
    • 1
    #调整inotify内核参数(优化)
    letc/ sysctl.conf(内核参数配置文件)
    inotifywait:    #用于持续监控,实时输出结果
    inotifywatch:   #用于短期监控,任务完成后再输出结果
    max_queue_events   #监控事件队列大小
    max_user instances      #最多监控实例数,可以看成最多可以监控多少个实例
    max_user_watches        #每个实例最多监控文件数
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    inotifywait格式参数
    常见参数    说明
    -m          持续进行监控
    -r          递归监控所有子对象
    -q          简化输出信息
    -e          指定要监控哪些事件类型(*)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    五、配置Rsync+Inotify 实时同步

    • 使用inotify通知接口,可以用来监控文件系统的各种变化情况,如文件存取、删除、移动、修改等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。

    • 将inotify机制与rsync工具相结合,可以实现触发式备份(实时同步),即只要原始位置的文档发生变化,则立即启动增量备份操作;否则处于静默等待状态。

    • 因为 inotify 通知机制由 Linux 内核提供,因此主要做本机监控,在触发式备份中应用时更适合上行同步

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

    在这里插入图片描述

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

    在这里插入图片描述

    检查一下服务是否已被终止
    
    • 1

    在这里插入图片描述

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

    在这里插入图片描述

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

    在这里插入图片描述

     加大每个参数
    
    • 1

    在这里插入图片描述

    刷新
    
    • 1

    在这里插入图片描述

    客户端(192.168.11.17):编译安装 inotify-tools
    
    • 1
    yum install -y gcc gcc-c++ 
    #安装gcc gcc-c++ 
    
    cd /opt
    #切换至/opt上传inotify-tools安装包
    
    tar zxf inotify-tools-3.14.tar.gz 
    #解压
    
    cd /opt/inotify-tools-3.14/
    ./configure
    make -j 4 && make install
    #编译安装
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    安装gcc gcc-c++
    
    • 1

    在这里插入图片描述

    切换至/opt上传inotify-tools安装包,解压
    
    • 1

    在这里插入图片描述

    编译安装
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

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

    在这里插入图片描述

    给脚本赋权
    
    • 1

    在这里插入图片描述

     设置开机自启动
    
    • 1

    在这里插入图片描述

    执行脚本
    
    • 1

    在这里插入图片描述

    实时同步效果测试
    
    • 1
    #触发式上行同步的验证过程
    1)在本机运行 /opt/inotify.sh 脚本程序;
    
    2)切换到本机的 /data 目录,执行增加、删除、修改文件等操作;
    
    3)查看远端服务器中的 message 目录下的变化情况。
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    HTML八大特性
    2024携程校招面试真题汇总及其解答(一)
    提高排名的 15 个基本 SEO 技巧
    循环神经网络的主要特点,循环神经网络应用举例
    《Java8实战》读书笔记09:用 Optional 处理值为 null 的情况
    递归与回溯法
    CV复习:常用优化器总结
    git clone:SSL: no alternative certificate subject name matches target host name
    Linux中_Ubuntu上_安装Windows软件_微信_企业微信_等
    哦麦艾斯!AI设计的丑衣服将引领时尚?数据结构与算法代码面试题;将文件藏在图片里的隐写工具;蒙古语语音合成语料库
  • 原文地址:https://blog.csdn.net/fyb012811/article/details/133638070