rsync实现远程同步

一、rsync简介

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

二、rsync同步源

在远程同步任务中,负责发起rsync司步操作的客户机称为发起端,而负责响应来自客户机的rsync同步操作的服务器称为同步源(备份源)。在同步过程中,同步源负责提供文件的原始位置,发起端应对该位置具有读取权限。
例:
A服务器同步B服务器的数据,B服务器就是备份源
反过来,B服务器同步A服务器的数据,那么A服务器就是备份源

在这里插入图片描述

三、配置rsync源

1、基本思路

· 建立rsyncd.conf配置文件、独立的rsunc账号文件
· 配置文件rsyncd.conf
· 需手动配置,语法类似于Samba配置
· 认证配置auth users、secrets file,不加则为匿名
· rsync账号文件
· 采用“用户名:密码”的格式记录,每行一个用户记录
· 独立的账号数据,不依赖系统账号
· 启用rsync服务
· 通过 --daemon独自提供服务:rsync --daemon
· 可以通过执行kill $(cat /var/run/rsyncd.pid)关闭服务

2、rsync命令

#命令的用法
rsync [选项] 原始位置 目标位置
#----------常用选项--------------------------
-r:递归模式,包含目录及子目录中的所有文件。
-l:对于符号链接文件仍然复制为符号链接文件。
-v:显示同步过程的详细(verbose)信息。
-z:在传输文件时进行压缩(compress)。
-a:归档模式,保留文件的权限、属性等信息,等同于组合选项“-rlptgoD”。
-p:保留文件的权限标记。
-t:保留文件的时间标记。
-g:保留文件的属组标记(仅超级用户使用)。
-o:保留文件的属主标记(仅超级用户使用)。
-H:保留硬连接文件。
-A:保留 ACL 属性信息。
-D:保留设备文件及其他特殊文件。
--delete:删除目标位置有而原始位置没有的文件,即删除差异文件,保留一致性。
--checksum:根据校验和(而不是文件大小、修改时间)来决定是否跳过文件。
--password-file=file:从file中得到密码,用于免交互处理,file文件的权限要是600

   
   

    3、配置源的两种表达方式

    将指定的资源下载到本地/root 目录下进行备份。
    格式一:

    用户名@主机地址::共享模块名
    例如:
    backuper@192.168.37.20::wwwroot /opt
    
     
     

      格式二:

      rsync://用户名@主机地址/共享模块名
      例如:
      rsync://backuper@192.168.37.20/wwwroot /opt
      
       
       

        4、免交互格式

        echo "密码" > /etc/密码文件
        chmod 600 /etc/密码文件
        #设置周期性任务
        crontab -e
        30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/密码文件 backuper@192.168.37.20::wwwroot /opt
        systemctl restart crond
        systemctl enable crond
        
         
         

          四、inotify简介

          Inotify 是一个 Linux内核的特性,可以监控文件系统的变动情况,并做出通知响应,辅助软件:inotify-tools
          在这里插入图片描述

          1、调整inotify内核参数(优化)

          ·/etc/sysctl.conf(内核参数配置文件),需要配置
          ·max_queue_events : 监控事件队列大小
          ·max_user_instances : 最多监控实例
          ·max_user_watches : 每个实例最多监控文件数
          **·**配置的监控数量应该大于监控目标的总文件数

          例如:
          vim /etc/sysctl.conf
          max_queue_events = 16384
          max_user_instances = 1024
          max_user_watches = 1048576
          
           
           

            2、使用inotify-tools辅助工具

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

            例:
            inotifywait -mrq -e modify,create,attrib,move,delete 文件或目录
            #---------参数解释------------
            -m	持续进行监控
            -r	递归监控所有子对象
            -q	简化输出信息
            -e	指定要监控哪些事件类型
            modify	修改
            create	创建
            attrib  属性更改
            move	移动
            deletc	删除
            
             
             

              3、编写同步脚本

              编写思路:
              (1)先设置两个变量:监控和执行备份
              (2)使用while 、read持续获取监控结果
              (3)根据结果判断,执行不同的操作

              vim /opt/inotify_rsynx.sh
              #!/bin/bash
              #定义两个变量:监控文件,执行备份
              INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete 需要监控的目录或文件"
              RSYNC_CMD="rsync -azH --delete --password-file=/etc/密码文件 刚才监控的目录或文件 用户名@主机地址::共享模块名"
                #while read获取监控结果
              $INOTIFY_CMD | while read DIRECTORY EVENT FILE
              do 
                  #如果rsync没有运行,执行rsync进行备份操作
                  if [ $(pgrep rsync | wc -l) -eq 0 ] ; then
                      $RSYNC_CMD
              	fi
              done
              
               
               

                五、配置rsync下行同步

                环境配置

                主机	     操作系统   IP地址	          安装包
                Master	CentOS7	192.168.37.20	rsync
                Slave	CentOS7	192.168.37.30	rsync / inotify-tools-3.14.tar.gz
                
                 
                 

                  1、Master(192.168.37.20)

                  (1)关防火墙、安装相应的软件

                  systemctl stop firewalld.service 
                  setenforce 0
                  #检查是否安装,一般系统已默认安装rsync
                  rpm -q rsync
                  yum -y install rsync
                  
                   
                   

                    在这里插入图片描述

                    (2)建立/etc/rsyncd.conf 配置文件
                    如采用匿名的方式,只要将下面配置中的“auth users”和“secrets file”配置项去掉即可。

                    vim /etc/rsyncd.conf
                    uid = root
                    gid = root
                    use chroot = yes
                    address = 192.168.37.20
                    port 873
                    log file = /var/log/rsyncd.log
                    pid file = /var/run/rsyncd.pid
                    hosts allow = 192.168.37.0/24
                    [wwwroot]
                    path = /var/www/html
                    comment = Document Root of www.test.com
                    read only = yes
                    dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z
                    auth users = backuper lisi
                    secrets file = /etc/rsyncd_users.db
                    #---------配置解释----------------------------------------------
                    uid = root					     
                    gid = root					    
                    use chroot = yes					#禁锢在源目录
                    address = 192.168.37.20			#监听地址,监听本机地址
                    port 873						    #监听端口 tcp/udp 873,可通过cat /etc/services | grep rsync查看
                    log file = /var/log/rsyncd.log		#日志文件位置
                    pid file = /var/run/rsyncd.pid		#存放进程 ID 的文件位置
                    hosts allow = 192.168.37.0/24		#允许同步的客户机网段
                    [wwwroot]					        #共享模块名称
                    path = /var/www/html				#源目录的实际路径(同步的目录)
                    comment = Document Root of www.test.com
                    read only = yes					    #是否为只读
                    dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z  #同步时不再压缩的文件类型
                    auth users = backuper lisi			#授权账户,多个账号以空格分隔
                    secrets file = /etc/rsyncd_users.db			      #存放账户信息的数据文件
                    
                     
                     

                      在这里插入图片描述

                      (3)为备份账户创建数据文件
                      无须建立同名系统用户

                      vim /etc/rsyncd_users.db
                      lisi:123456
                      chmod 600 /etc/rsyncd_users.db
                      

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

                        (4)保证所有用户对源目录/var/www/html(需要备份的文件目录)都有读取权限

                        yum -y install httpd
                        chmod +r /var/www/html
                        ls -ld /var/www/html
                        
                         
                         

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

                          (5)启动 rsync 服务程序
                          启动 rsync 服务,以独立监听服务的方式(守护进程)运行

                          rsync --daemon
                          netstat -natp | grep rsync
                          
                           
                           

                            在这里插入图片描述

                            关闭 rsync 服务

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

                              2、Slave(192.168.37.30)

                              systemctl stop firewalld.service
                              setenforce 0
                              yum -y install rsync
                              cd /opt
                              mkdir abc
                              chmod 777 abc
                              vim /etc/server.pass
                              123456
                              chmod 600 /etc/server.pass
                              
                               
                               

                                在这里插入图片描述

                                3、验证

                                ** Master(192.168.37.20 **

                                cd /var/www/html/
                                nkdir 1.html
                                
                                 
                                 

                                  在这里插入图片描述

                                  Slave(192.168.37.30)

                                  rsync -az --delete --password-file=/etc/server.pass lisi@192.168.37.20::wwwroot /opt/abc
                                  ls abc
                                  
                                   
                                   

                                    在这里插入图片描述

                                    企业中不可能手动执行,一般都要使用周期性任务

                                    #设置周期性任务
                                    crontab -e
                                    0 2 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass lisi@192.168.37.20::wwwroot /opt/abc
                                    systemctl restart crond
                                    systemctl enable crond
                                    
                                     
                                     

                                      六、rsync+inotify实时同步

                                      1、Master(192.168.37.20)

                                      修改rsync源服务器配置文件

                                      vim /etc/rsyncd.conf
                                      #关闭只读,上行同步需要可以写
                                      read only = no
                                      #重启服务
                                      kill `cat /var/run/rsyncd.pid`
                                      netstat -natp | grep rsync
                                      rsync --daemon
                                      netstat -natp | grep rsync
                                       chmod 777 /var/www/html
                                      
                                       
                                       

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

                                        2、Slave(192.168.37.30)

                                        (1)调整 inotify 内核参数
                                        · max_queue_events(监控事件队列,默认值为16384)
                                        · max_user_instances(最多监控实例数,默认值为128)
                                        · max_user_watches(每个实例最多监控文件数,默认值为8192)
                                        · 当要监控的目录、文件数量较多或者变化较频繁时,建议加大这三个参数的值。

                                        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 = 17000
                                        fs.inotify.max_user_instances = 1024
                                        fs.inotify.max_user_watches = 1048576
                                        sysctl -p
                                        
                                         
                                         

                                          在这里插入图片描述

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

                                          (2)安装 inotify-tools

                                          yum -y install gcc gcc-c++ make
                                          #放入安装包
                                          tar zxvf inotify-tools-3.14.tar.gz -C /opt
                                          cd /opt/inotify-tools-3.14/
                                          ./configure && make && make install
                                          
                                           
                                           

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

                                            (3)编写触发式同步脚本

                                            vim /opt/inotify_rsync.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/ lisi@192.168.37.20.::wwwroot"
                                            $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_rsync.sh
                                            . /opt/inotify_rsync.sh &
                                            #加入开机自动执行
                                            chmod +x /etc/rc.d/rc.local
                                            echo '/opt/inotify_rsync.sh' >> /etc/rc.d/rc.local
                                            
                                             
                                             

                                              在这里插入图片描述

                                              在这里插入图片描述

                                              3、验证

                                              Slave(192.168.37.30)

                                              cd /opt/abc
                                              touch test.html
                                              ls
                                              rm -rf test.html
                                              ls
                                              
                                               
                                               

                                                Master(192.168.37.20)

                                                cd /var/www/html
                                                ls
                                                
                                                 
                                                 

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

                                                  总结:

                                                  在这里插入图片描述
                                                  如果验证时创建文件时出现上面报错时,可能是进程问题,可以用pgrep inotify查看进程 出现多个进程造成冲突了,用命令kill 【进程号】删除多余即可解决。

                                                  • 0
                                                    点赞
                                                  • 2
                                                    收藏
                                                    觉得还不错? 一键收藏
                                                  • 1
                                                    评论

                                                  “相关推荐”对你有帮助么?

                                                  • 非常没帮助
                                                  • 没帮助
                                                  • 一般
                                                  • 有帮助
                                                  • 非常有帮助
                                                  提交
                                                  评论 1
                                                  添加红包

                                                  请填写红包祝福语或标题

                                                  红包个数最小为10个

                                                  红包金额最低5元

                                                  当前余额3.43前往充值 >
                                                  需支付:10.00
                                                  成就一亿技术人!
                                                  领取后你会自动成为博主和红包主的粉丝 规则
                                                  hope_wisdom
                                                  发出的红包
                                                  实付
                                                  使用余额支付
                                                  点击重新获取
                                                  扫码支付
                                                  钱包余额 0

                                                  抵扣说明:

                                                  1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
                                                  2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

                                                  余额充值