• 学习rsync


    一、rsync介绍

    1.sync同步:刷新文件系统缓存,强制将修改过的数据块写入磁盘,并且更新超级块。
    2.async异步:将数据先放到缓冲区,再周期性的去同步到磁盘。
    3.rsync远程同步。

    二、rsync的特点

    1.可以镜像保存整个目录树和文件系统。
    2.可以保留原有的权限(permission,mode)、owner、group、时间(修改时间,modify time)、软硬链接、文件acl、文件属性(attributes)信息等。
    3.传输效率高,使用同步算法,只比较变化的(增量备份)。
    4.支持匿名传输,方便网站镜像;也可以做验证,加强安全。

    rsync与scp的区别:支持增量备份;数据同步时保持文件的原有属性。

    三、本地文件同步

    [root@localhost /]# rsync -av /dir1/ /dir2/   #将目录dir1里面的文件同步到目录dir2
    [root@localhost /]# rsync -av /dir1 /dir2     #将目录dir1同步到目录dir2下面
    [root@localhost /]# rsync -avR /dir1/ /dir3/  #保留相对路径
    [root@localhost /]# rsync -av --delete /dir1/ /dir2   #dir1里面有两个文件file1和file2,dir2里面有三个文件file1、file2和file3,同步以后dir2里面会删除掉file3
    
    • 1
    • 2
    • 3
    • 4

    四、远程文件同步

    [root@localhost ~]# rsync -av linux.txt root@192.168.68.182:/root/  #同步文件linux.txt到远程服务器的root目录下
    [root@localhost ~]# rsync -avR test/ root@192.168.68.182:/root   #同步目录test到远程服务器的root下
    [root@localhost ~]# rsync -av root@192.168.68.182:/root/linux.txt ./  #拉取远程服务器文件linux.txt到本地当前目录
    [root@localhost ~]# rsync -av root@192.168.68.182:/root/test ./  #拉取远程服务器目录test到本地当前目录
    
    • 1
    • 2
    • 3
    • 4

    五、免密文件同步和更改端口后的文件同步

    1.做ssh免密以后rsync同步时就不用输入密码。
    2.修改端口后用rsync同步要加-e参数运行shell

    [root@localhost ~]# rsync -e "ssh -p 2222" -av rsync.txt root@192.168.68.183:/root
    
    • 1

    六、rsync作为系统服务

    1.CentOS7直接有rsync服务
    2.CentOS6需要创建配置文件再启动
    如果rsync作为服务单独运行,底层就不需要ssh服务了

    [root@localhost ~]# touch /etc/rsyncd.conf
    [root@localhost ~]# rsync --daemon
    
    • 1
    • 2

    七、应用举例

    有代码服务器和备份服务器各一台,实现定时将代码服务器中的代码对备份服务器进行同步。
    1.(代码服务器)创建测试用的文件

    [root@localhost ~]# mkdir -p /app/java_project
    [root@localhost ~]# mkdir /app/java_project/abc{1..3}
    [root@localhost ~]# touch /app/java_project/file{1..10}.java
    
    • 1
    • 2
    • 3

    2.(代码服务器)修改配置文件将rsync作为系统服务运行

    [root@localhost ~]# vim /etc/rsyncd.conf
    #添加文件内容
    [app]
    path=/app/java_project
    log file=/var/log/rsync.log
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.(备份服务器)创建备份目录并测试是否可以连接到rsync服务

    [root@localhost ~]# mkdir -p /backup/app1_java
    [root@localhost ~]# rsync -a root@192.168.68.182::
    app       
    
    • 1
    • 2
    • 3

    4.利用定时任务和脚本文件进行定时同步
    编写脚本

    [root@localhost ~]# vim /root/rsync_java.sh
    #!/bin/bash
    rsync -av root@192.168.68.182::app /backup/app1_java &>/dev/null
    [root@localhost ~]# chmod +x /root/rsync_java.sh
    
    • 1
    • 2
    • 3
    • 4

    编写计划任务

    [root@localhost ~]# crontab -e
    46 4 * * * /root/rsync_java.sh
    
    • 1
    • 2

    七、给rsync服务添加密码

    1.(代码服务器)修改配置文件

    [root@localhost ~]# vim /etc/rsyncd.conf
    [app]
    path=/app/java_project
    log file=/var/log/rsync.log
    auth users=user1,user2
    secrets file=/etc/rsyncd.secrets
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.(代码服务器)创建密码文件并修改权限

    [root@localhost ~]# vim /etc/rsyncd.secrets
    user1:123
    user2:123
    [root@localhost ~]# chmod 600 /etc/rsyncd.secrets
    
    • 1
    • 2
    • 3
    • 4

    3.(备份服务器)同步
    在这里插入图片描述

    八、rsync搭配inotify进行实时同步

    1.(代码服务器)安装inotify-tools,进入到inotify-tools解压的文件编译安装

    [root@localhost inotify-tools-3.13]# ./configure && make && make install
    
    • 1

    2.(代码服务器)编写脚本来进行同步

    [root@localhost java_project]# vim /root/inotify.sh
    #!/bin/bash
    /usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib,move /app/java_project |while read events
    do
          rsync -av --delete /app/java_project root@192.168.68.183:/backup/app1_java
          echo "`date +%F\ %T`出现事件$events" >> /var/log/rsync.log 2>&1
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3.(代码服务器)添加可执行权限

    [root@localhost java_project]# chmod +x /root/inotify.sh
    
    • 1

    4.(代码服务器)让脚本在后台执行
    如果要结束后台运行的进程,先jobs查看,然后kill %编号

    [root@localhost java_project]# nohup /root/inotify.sh &
    
    • 1

    九、xinetd托管rsyncd服务

    1.安装xinetd

    [root@localhost ~]# yum install -y xinetd
    [root@localhost ~]# rpm -ql xinetd	
    
    • 1
    • 2

    2.编写xinetd的配置文件
    常用参数

    only_from 只允许访问
    no_access 拒绝访问
    access_times 控制访问服务的时间段
    log_type 指定日志类型
    interface 并发连接数
    per_source 每个IP的最大连接数
    includedir /etc/xinetd.d 子配置文件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    编写子配置文件(新添加的服务一般在子配置文件下面创建相应的文件)

    vim /etc/xinetd.d/rsync
    service rsync
    {
            disable         = no
            flags           = IPv6
            socket_type     = stream
            wait            = no
            user            = root
            server          = /usr/bin/rsync
            server_args     = --daemon
            log_on_failure  += USERID
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    3.重启xinetd服务

    [root@localhost ~]# systemctl restart xinetd
    [root@localhost ~]# ss -tlunp|grep 873
    
    • 1
    • 2
  • 相关阅读:
    SpringCloud整合Nacos
    数学建模(一):插值
    国庆作业day1
    JavaWeb在线问题.分析实例
    工业设计:为什么要把消费放在如此高位?
    数仓建模理论(一)
    4个工作学习必备的工具,请不要错过
    基于GATK流程化进行SNP calling
    json序列化时案例总结
    注解、自定义注解、处理自定义注解
  • 原文地址:https://blog.csdn.net/qq_48440248/article/details/132954271