CentOS 7搭建Rsync

  1. 什么是Rsync

    • Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。Rsync软件适用于Unix/Linux/Windows等多种操作系统平台。

    • Rsync是一个快速和非常通用的文件复制工具。它能本地复制,远程复制,或者远程守护进程方式复制。它提供了大量的参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制。它以其delta-transfer算法闻名。减少通过网络数据发送数量,利用只发送源文件和目标文件之间的差异信息,从而实现数据的增量同步复制。

    • Rsync被广泛使用在备份和镜像,以及作为一种改进后的复制命令用于日常应用。

    提示信息:

    官方链接资料:http://www.samba.org/ftp/rsync/rsync.html

    官方手册资料:man rsync/man rsync.conf


  1. Rsync的作用

    • Rsync英文全称为Remote Synchronization,从软件的名称就可以看出来,Rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能类似SSH的scp命令,但又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。当然,Rsync还可以在本地主机的不同分区或目录之间全量及增量的复制数据,这又类似cp命令,但同样也优于cp命令,cp每次都是全量拷贝,而raync可以增量拷贝。

    • Rsync命令除了作为本地和远程复制命令使用以外,还可以作为删除和查看命令被应用,在某种情况下类似于传统的rm和ls命令。

    • 通过上面文字的介绍,可以总结一下rsync命令的主要作用分为以下4种:

      • 实现本地数据同步复制(等价cp命令)

        cp -a /etc/hosts /temp/hosts_cp 
        # 使用rsync实现cp功能 
        rsync -a /etc/hosts /temp/hosts_rsync
        
        # 注意:当使用rsync同步目录时如果目录后面带/,则同步的是目录中内容 
        rsync -a /etc/ /temp/   # 同步的是/etc/下的所有文件到/temp/中 
        rsync -a /etc /temp/    # 这才是将/etc文件夹备份到/temp/中
        
      • 实现远程数据同步复制(等价scp命令)

        scp -rp /etc/hosts 192.168.1.100:/temp/hosts_scp 
        # 使用rsync实现scp功能 
        rsync -rp /etc/hosts 192.168.1.100:/temp/hosts_rsync
        
      • 实现数据信息删除功能(等价rm命令)

        rm -rf /temp/* 
        
        # 使用rsync实现rm功能 
        # 先创建一个空目录 
        mkdir null 
        # 在将空目录同步到要删除的目录 
        rsync -a --delete /null/ /temp/
        
      • 实现数据信息查看功能(等价ls命令)

        ls /etc 
        
        # 使用rsync实现ls功能 
        rsync /etc
        

  1. Rsync的特性

    • Rsync的特性如下(7个特性信息说明):

      • 支持拷贝普通文件与特殊文件,如链接文件,设备等;

      • 可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能;

        # 在打包/opt/data时排除 temp 命名的目录和文件 
        tar zcvf data_backup.tar.gz /opt/data
        
      • 可以做到保持原文件或目录的权限、时间、软硬连接、属主、组等所有属性均不改变(-p)。

      • 可以实现增量同步,即只同步发生变化的数据,因此数据传输效率很高(tar -N)。

        # 备份 /home 目录自2008-01-01 以来修改过的文件 
        tar -N 2008-01-01 -zcvf /backup/inc-backup_$(date + %F).tar.gz /home 
        # 备份 /home 目录昨天以来修改过的文件 
        tar -N $(date -d yesterday "+%F") -zcvf /backups/inc-backup_$(date + %F).tar.gz /home 
        # 将所有.gif的文件增加到all.tar的包中。-r表示增加文件的意思 
        tar -rf all.tar *.gif
        
      • 可以使用rcp、rsh、ssh等方式来配合进行隧道加密传输文件(rsync本身不对数据加密);

      • 可以通过socket(进程方式)传输文件和数据(服务端和客户端);

      • 支持匿名的或认证(无需系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像。


  1. Rsync的复制原理介绍

    • 在同步备份数据时,默认情况下,Rsync通过其独特的“Quick Check”算法,它仅同步大小或者修改时间发生变化的文件或目录,当然,也可以根据权限、属主等属性的变化同步,但需要指定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所以可以实现快速的同步备份数据,即采用增量复制方法对数据信息进行同步,与传统的cp、scp拷贝命令的全量拷贝复制截然不同,增量同步复制数据,在效率上远远高于全量复制。

  1. Rsync的使用方法

    • 一般来说,Rsync大致使用三种主要的传输数据方式。

      • 本地数据传输模式:采用此种方式进行数据同步复制,类似于上文中所提到的cp本地复制命令功能。采用本地数据传输模式的语法格式信息为:

        rsync [OPTION...] SRC... [DEST] 
        # rsync          ---数据备份命令 
        # [OPTION...]    ---命令参数信息 
        # SRC...         ---要进行同步备份的源文件或目录信息 
        # [DEST]         ---将数据备份同步到本地系统中的目的路径
        
    • 远程Shell数据传输模式

      • 采用此种方式进行数据同步复制,类似于上文中所提到的scp远程复制命令功能。采用远程数据传输模式语法格式信息为:

        # Pull(拉) 
        rsync [OPTION...] [USER@]HOST:SRC... [DEST] 
        # rsync          ---数据备份命令 
        # [OPTION...]    ---命令参数信息 
        # [USER@]        ---以什么用户身份将数据拉取 
        # HOST:SRC       ---从哪个远程主机上,将指定的数据进行备份 
        # [DEST]         ---将远程主机拉取过来的数据保存到本机的什么路径 
        
        # Push(推) 
        rsync [OPTION...] SRC... [USER@]HOST:DEST 
        # rsync          ---数据备份命令 
        # [OPTION...]    ---命令参数信息 
        # [USER@]        ---以什么用户身份将数据推送 
        # SRC            ---指定本地要推送给备份的数据信息 
        # HOST:DEST      ---将数据信息推送到指定主机相应的目录中
        
    • 守护进程传输模式


  1. Rsync守护进程服务部署

    • 服务端部署

      • 第一步:确认软件服务是否安装(客户端也要安装)

        # 检查rsync是否安装 
        rpm -qa rsync 
        # 安装rsync 
        yum install -y rsync
        
      • 第二步:编写备份文件配置服务

        # 默认没有配置文件,需手动编写 
        vi /etc/rsyncd.conf 
        # 以下是rsyncd.conf中编写的内容 
        #rsync_config 
        #created by HuangChao at 2020 
        ##rsyncd.conf start## 
        # -------------------------全局配置(影响所有模块)------------------------- # 
        #指定rsync服务运行的时候,向磁盘进行读写操作的用户 
        uid = rsync 
        #指定用户组 
        gid = rsync 
        #安全相关参数 
        use chroot = no 
        #最大连接数 max connections = 200 
        #超时时间 timeout = 300 
        #进程对应的进程号文件,用于存放服务运行时进程的ID号(PID) 
        pid file = /var/run/rsyncd.pid 
        #进程的锁文件 
        lock file = /var/run/rsync.lock 
        #程序运行的日志文件 
        log file = /var/log/rsyncd.log 
        # -------------------------局部配置(影响本模块)------------------------- # 
        [backup]      #模块名称 
        #注释信息 
        comment = "Backup Dir By HuangChao" 
        #模块对应的位置(路径) 
        path = /backup 
        #忽略错误程序 
        ignore errors 
        #是否只读 
        read only = false 
        #是否可以列表 
        list = false 
        #允许访问rsync服务器的IP地址(白名单) 
        hosts allow = 192.168.1.0/24 
        #禁止访问rsync服务器的IP地址(黑名单) 
        hosts deny = 0.0.0.0/32 
        #认证用户,这些用户操作系统中不存在,仅用于认证 
        auth users = rsync_backup,rsync_user 
        #设置进行连接认证的密钥文件,不存在的用户进行认证时的密钥文件 
        secrets file = /etc/rsync.password
        
      • 第三步:创建一个备份目录的管理用户(虚拟用户)

        # 创建一个备份目录的管理用户 
        useradd -M -s /sbin/nologin rsync 
        # 查看是否创建成功 
        id rsync
        
      • 第四步:创建备份目录

        # 在/目录下创建名为backup的备份目录,-p代表命令可以重复执行 
        mkdir -p /backup 
        # 将备份目录的属主和属组改成rsync用户 
        chown -R rsync.rsync /backup
        
      • 第五步:创建认证用户密码文件

        # 将 sync_backup:123456 追加到 /etc/rsync.password 文件的末尾 
        echo "sync_bckup:123456" >> /etc/rsync.password 
        # 更改文件权限 
        chmod 600 /etc/rsync.password
        
      • 第六步:启动rsync备份服务守护进程

        # 启动rsync守护进程 
        rsync --daemon 
        # 检查rsync是否启动 
        ps -ef|grep rsync 
        # 查看服务端口,rsync服务端口默认为873 
        netstat -lntup|grep rsync
        
    • 客户端部署

      • Pull(拉):从备份服务器上将数据拉取到本地,主要用于数据恢复

        rsync [OPTION...] [USER@]HOST::SRC... [DEST] 
        # rsync          ---数据备份命令 
        # [OPTION...]    ---命令参数信息 
        # [USER@]        ---指定进行数据传输的认证用户 
        # HOST::         ---指定备份服务器的IP地址或主机名称 
        # SRC...         ---指定备份服务器上模块名称 
        # [DEST]         ---将数据同步到本地主机的指定路径
        
      • Push(推):从本机将数据推送到备份服务器,主要用于数据备份

        rsync [OPTION...] SRC... [USER@]HOST::DEST 
        # rsync          ---数据备份命令 # [OPTION...]    ---命令参数信息 
        # SRC...         ---指定本地主机上需要备份的数据 
        # [USER@]        ---指定进行数据传输的认证用户 
        # HOST::         ---指定备份服务器的IP地址或主机名称 
        # DEST           ---指定备份服务器上模块名称 
        
        # 示例 
        # 在本机创建用户认证的密码文件 
        echo "123456" >> /etc/rsync.password 
        # 修改文件权限,必须修改,如果权限不是600,rsync服务则不读密码文件 
        chmod 600 /etc/rsync.password 
        # 将/etc/中的hosts文件备份到192.168.1.100服务器的默认备份目录下 
        rsync -avzP /etc/hosts rsync_backup@192.168.1.100::backup --password-file=/etc/rsync.password 
        # --password-file=/etc/rsync.password    ---自动传输密码,用于定时任务的免交互
        

  1. Rsync命令参数

    • Rsync常用的同步命令参数如下:
命令参数 参数说明
-v(verbose) 详细模式,输出进度等信息
-z(compress) 传输时进行压缩以提高传输效率,--compress-level=NUM可按级别压缩。局域网中一般不压缩。
-a(archive) 归档模式,表示以递归方式传输文件,并保持所有文件属性
-r(recursive)(归类于-a) 子目录递归传输模式
-t(times)(归类于-a) 保持文件时间(文件修改时间)信息
-o(owner)(归类于-a) 保持文件属主信息
-p(perms)(归类于-a) 保持文件权限
-g(group)(归类于-a) 保持文件属组信息
-l(links)(归类于-a) 保留软连接
-D(devices)(归类于-a) 保持设备文件信息
-P(progress) 显示同步的过程及传输时的进度等信息
-e(rsh=COMMOND) 指定使用哪种信道协议,例如:SSH
--exclude=PATTERN 指定排除不需要传输的文件信息
--exclude-from=file 文件名所在的目录文件,既可以排除多个文件
--bwlimit=RATE 传输数据时进行限速
--delete 使目标目录和源目录数据一致,即无差异同步数据
  1. Rsync守护进程模式的应用场景

    • 采用定时任务方式+Rsync服务进行数据备份

      应用场景:主要用于企业内部人员产生的数据备份

    • 采用实时同步方式+Rsync服务进行数据备份(推荐)

      应用场景:主要应用于用户产生的数据备份


  1. Rsync守护进程企业中的实际应用

    • 守护进程多模块功能配置

      • 第一步:编写配置文件,添加多模块配置信息

        # 默认没有配置文件,需手动编写 
        vi /etc/rsyncd.conf 
        # 以下是rsyncd.conf中编写的内容 
        #rsync_config 
        #created by HuangChao at 2020 
        ##rsyncd.conf start## 
        uid = rsync 
        gid = rsync 
        use chroot = no 
        max connections = 200 
        timeout = 300 pid 
        file = /var/run/rsyncd.pid lock 
        file = /var/run/rsync.lock log 
        file = /var/log/rsyncd.log 
        ignore errors 
        read only = false 
        list = false hosts 
        allow = 192.168.1.0/24 
        hosts deny = 0.0.0.0/32 
        auth users = rsync_backup,rsync_user 
        secrets file = /etc/rsync.password 
        [nfs_backup]      #模块 
        comment = "Backup Dir By NFS" 
        path = /backup/nfs_backup [mysql_backup]       
        #添加的模块 
        comment = "Backup Dir By MySQL" 
        path = /backup/mysql_backup
        
      • 第二步:创建备份目录

        mkdir -p /backup/mysql_backup 
        chown -R rsync.rsync /backup/mysql_backup
        
      • 第三步:重启服务

        # 停止服务 
        kill 'cat /var/run/rsyncd.pid' 
        # 启动服务 
        rsync --daemon
        

  1. Rsync守护进程排除功能实践

    • 排除指定文件

      # 同步/data_dir目录数据到备份服务器的/backup目录中,但/data_dir目录中的a,b目录不需要同步,d目录中的2.txt不需要同步 
      rsync -avzP /data_dir/ --exclude=a --exclude=b --exclude=d/2.txt rsync_backup@192.168.1.100::nfs_backup --password-file=/etc/rsync.password 
      # 同步/data_dir目录数据到备份服务器的/backup目录中,但/data_dir目录中的a,b,c目录不需要同步,d目录中的1.txt不需要同步 
      rsync -avzP /data_dir/ --exclude={a..c} --exclude=d/2.txt rsync_backup@192.168.1.100::nfs_backup --password-file=/etc/rsync.password
      
    • 把多个排除的信息放在一个文件中

      # 同步/data_dir目录数据到备份服务器的/backup目录中,但/data_dir目录中的a,b,c目录不需要同步,d目录中的1.txt不需要同步 
      cd /data_dir/ 
      # 编写排除文件信息 
      vi exclude.txt
          a    
          b    
          c    
          d/1.txt    
          exclude.txt
          
      rsync -avzP /data_dir/ --exclude-from=/data_dir/exclude.txt rsync_backup@192.168.1.100::nfs_backup --password-file=/etc/rsync.password
      

  1. Rsync守护进程创建备份目录

    • 备份文件时可以创建相应的文件夹以分类

      # 将data_dir文件夹中的文件备份到192.168.1.100服务器中nsf_backup/20190620_backup文件夹中,注意:不能一次性创建多级目录! 
      rsync -avzP /data_dir/ rsync_backup@192.168.1.100::nfs_backup/20190620_backup --password-file=/etc/rsync.password
      

  1. Rsync守护进程的访问控制

    • Rsync配置文件中的访问控制分为三种情况:

      • 只有白名单(hosts allow)时,白名单流量允许通过,其余流量的默认规则是阻止;

      • 只有黑名单(hosts deny)时,黑名单流量阻止通过,其余流量的默认规则是允许;

      • 既有白名单,又有黑名单时,白名单流量允许通过,黑名单流量阻止通过,其余流量的默认规则时允许。

        注意:白名单优先级高于黑名单

    • 需求示例:

      • 内网网段用户(172.16.1.0/24)可以传输数据到backup目录中

      • 外网网段用户(10.0.0.0/24)不可以传输数据到backup目录中

        # 默认没有配置文件,需手动编写 
        vi /etc/rsyncd.conf 
        # 以下是rsyncd.conf中编写的内容 
        #rsync_config 
        #created by HuangChao at 2019 
        #email:huangchao@outlook.com 
        ##rsyncd.conf start## 
        uid = rsync 
        gid = rsync 
        use chroot = no 
        max connections = 200 
        timeout = 300 
        pid file = /var/run/rsyncd.pid 
        lock file = /var/run/rsync.lock 
        log file = /var/log/rsyncd.log 
        ignore errors 
        read only = false list = false 
        # ---------------------访问控制---------------------------------- # 
        hosts allow = 172.16.1.0/24 hosts deny = 10.0.0.0/24 
        #--------------------------------------------------------------- # 
        auth users = rsync_backup,rsync_user 
        secrets file = /etc/rsync.password 
        [nfs_backup] 
        comment = "Backup Dir By NFS" 
        path = /backup/nfs_backup 
        [mysql_backup] 
        comment = "Backup Dir By MySQL" 
        path = /backup/mysql_backup
        

  1. Rsync守护进程的无差异同步(在企业中慎用!)

    • 实现本地服务器和备份服务器上的数据信息高度一致,说白了,就是我有你也有,我没有你也不能有。除了实现文件夹内容无差异同步,还能实现文件内容的无差异同步

      rsync -avzP --delete /data_dir/ rsync_backup@192.168.1.100::nfs_backup --password-file=/etc/rsync.password
      

  1. Rsync守护进程的列表功能

    • syncd.conf配置文件中的 list = true 的作用是让客户端可以通过命令获悉服务端的全部模块信息。(建议将list = false)

      rsync rsync_backup@192.168.1.100::
      

  1. Rsync软件的深入学习方法

官方链接资料:http://www.samba.org/ftp/rsync/rsync.html

官方手册资料:man rsync/man rsync.conf

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,265评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,274评论 1 288
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,087评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,479评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,782评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,218评论 1 207
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,594评论 2 309
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,316评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,955评论 1 237
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,274评论 2 240
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,803评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,177评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,732评论 3 229
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,953评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,687评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,263评论 2 267
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,189评论 2 258