zoukankan      html  css  js  c++  java
  • rsync 远程同步 实时同步备份 两种免交互的方式实现实时备份

    rsync 远程同步: 一款快速增量备份工具 Remote Sync,远程同步 支持本地复制,或者与其他SSH、rsync主机同步

    作用:做数据备份

    备份方式:

         完全备份

         增量备份

    rsync客户端 好处:

    优点:   第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。支持增量备份

             选择性的保持 : 符号链接,硬链接,文件属性,权限 及时间 等

                  传输前执行压缩。适用于异地备份 ,镜像服务器等应用 

                  安全,使用ssh做为传输端口。 sftp  ,ssh  

    rsync命令的基本用法:

    格式:rsync 【选项】 源文件 目标文件

    常见的选项:

    -a,--archive(存档) 归档模式,表示以递归的方式传输文件,并且保持文件属性,等同于加了参数-rlptgoD

    -r,–recursive 对子目录以递归模式处理

    -l,--links 表示拷贝链接文件

    -p , --perms 表示保持文件原有权限

    -t , --times 表示保持文件原有时间

    -g , --group 表示保持文件原有属用户组

    -o , --owner 表示保持文件原有属主

    -D , --devices 表示块设备文件信息

    -z , --compress 表示压缩传输

    -H 表示硬连接文件

    -A 保留ACL属性信息

    -P 显示传输进度

    --delete 删除那些目标位置有而原始位置没有的文件

    常见的选项:

    -a,--archive(存档) 归档模式,表示以递归的方式传输文件,并且保持文件属性,等同于加了参数-rlptgoD

    -z , --compress 表示压缩传输

    -P 显示传输进度

    --delete 删除那些目标位置有而原始位置没有的文件

    [root@DaMoWang ~]# rpm -q centos-release
    centos-release-7-5.1804.el7.centos.2.x86_64
    [root@DaMoWang ~]# rpm -q rsync
    rsync-3.1.2-4.el7.x86_64

    创建备份目录

    [root@DaMoWang ~]# mkdir -p /var/www/html/
    [root@DaMoWang ~]# rsync -azP --delete /var/www/html/  root@192.168.94.29:/backup #把本机的html下的文件备份备份服务器的/backup目录

    下面实现实时备份的两种方法

    你打算几点备份? 业务最不忙的时候? 

    3:00   人都休息。    找一个人最少的时间去备份?  

    每天晚上3点起来备份   敲密码???

    都不是 , 首先实现无交互 , 在无交互的基础上实现实时备份

    使用ssh密钥实现无交互备份

    [root@DaMoWang ~]# ssh-keygen    #生成密钥对
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa):     #一路回车
    Enter passphrase (empty for no passphrase):     #回车
    Enter same passphrase again:       #回车
    Your identification has been saved in /root/.ssh/id_rsa.
    Your public key has been saved in /root/.ssh/id_rsa.pub.
    The key fingerprint is:
    SHA256:+oFKlgZfDbR1PdvG+uq6wWutYQaOxWHUZU2wyRcaw0g root@DaMoWang.localdomain
    The key's randomart image is:
    +---[RSA 2048]----+
    |      . ooE=*+o  |
    |     . + .oo+*.. |
    |      o o   ==.  |
    |       = .  ..+  |
    |  .   . S    o   |
    |   o o * o  .    |
    |    * + o *. .   |
    |   + . . +.+. .  |
    |    .   ..==o.   |
    +----[SHA256]-----+

    查看生成的公钥和私钥:

    [root@DaMoWang ~]# ls /root/.ssh/
    authorized_keys  id_rsa  id_rsa.pub  known_hosts  #id_rsa(私钥)  id_rsa.pub(公钥)

    将公钥上传到备份服务器上:

    [root@DaMoWang ~]# ssh-copy-id root@192.168.94.29
    root@192.168.94.29's password:   #最后一次输入密码 Now try logging into the machine, with "ssh 'root@192.168.94.29'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting.

    现在已经是无交互免密了 

    测试

    [root@DaMoWang html]# touch {1..5}.txt  #创建测试文件
    [root@DaMoWang html]# ls
    1.txt  2.txt  3.txt  4.txt  5.txt  
    [root@DaMoWang ~]#  rsync -azP --delete /var/www/html/  root@192.168.94.29:/backup  #推送到备份服务器
    sending incremental file list
    ./
    1.txt
                  0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=5/6)
    2.txt
                  0 100%    0.00kB/s    0:00:00 (xfr#2, to-chk=4/6)
    3.txt
                  0 100%    0.00kB/s    0:00:00 (xfr#3, to-chk=3/6)
    4.txt
                  0 100%    0.00kB/s    0:00:00 (xfr#4, to-chk=2/6)
    5.txt
                  0 100%    0.00kB/s    0:00:00 (xfr#5, to-chk=1/6)

    切换到备份服务器查看

    [root@DaMoWang html]# ssh root@192.168.94.29  #切换到备份服务器
    [root@DaMoWang ~]# ip a   #已经切换到备份服务器
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:7d:b5:99 brd ff:ff:ff:ff:ff:ff
        inet 192.168.94.29/24 brd 192.168.94.255 scope global noprefixroute ens33  
           valid_lft forever preferred_lft forever
        inet6 fe80::a1f6:1d30:fbb2:f090/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
    [root@DaMoWang ~]# cd /backup/  
    [root@DaMoWang backup]# ls    #查看备份目录下是否成功备份 
    1.txt  2.txt  3.txt  4.txt  5.txt

     [root@DaMoWang backup]# exit
     登出
     Connection to 192.168.94.29 closed.

    创建密码文件实现无交互备份

    配置备份服务器的rsync配置文件

    [root@DaMoWang ~]# vim /etc/rsyncd.conf     #修改rsync的配置文件

    # 用户
    uid = rsync
    # 组
    gid = rsync
    # 程序安全设置
    use chroot = no
    # 客户端连接数
    max connections = 200
    # 超时时间
    timeout = 300
    # 本机ip
    address = 192.168.94.29

    # 监听端口
    port 873
    # 进程号文件位置
    pid file = /var/run/rsyncd.pid
    # 进程锁
    lock file = /var/run/rsync.lock
    # 日志文件位置
    log file = /var/log/rsyncd.log
    # 共享模块名称
    [backup]
    # 使用目录
    path = /backup/
    # 有错误时忽略
    ignore errors
    # 可读可写
    read only = false
    # 阻止访问远程列表
    list = false
    # 允许IP
    hosts allow = 192.168.94.0/24
    # 禁止IP
    hosts deny = 0.0.0.0/32
    # 虚拟用户
    auth users = rsync_backup
    # 存放用户和密码的文件
    secrets file = /etc/rsync.password
    # 排除的压缩类型
    dont compress = .gz .bz2 .tgz .zip .rar .z
    # 共享模块名称
    [nfsbackup]
    # 使用目录
    path = /data/
    # 有错误时忽略
    ignore errors
    # 可读可写(true或false)
    read only = no
    # 阻止远程列表(不让通过远程方式看服务端有什么)
    list = false
    # 允许IP
    hosts allow = 192.168.94.0/24
    # 禁止IP
    hosts deny = 0.0.0.0/32
    # 虚拟用户
    auth users = rsync_backup
    # 存放用户和密码的文件
    secrets file = /etc/rsync.password

    #保存退出
    #把密码文件的权限改成600
    [root@DaMoWang ~]# chmod 600 /etc/rsync.password
    [root@DaMoWang ~]# echo “rsync_backup:475541270” > /etc/tc/rsync.password    #设置密码到密码文件中
    [root@DaMoWang ~]# useradd -M -s /sbin/nologin rsync  
    [root@DamOWang ~]# chmod +R rsync /backup
      

    服务器端配置完成 , 下面把客户端里添加密码文件即可实现面交互

    [root@DaMoWang ~]# echo "475541270" > /etc/rsync.password
    [root@DaMoWang ~]# mkdir /backup #创建共享目录
    [root@DaMoWang ~]# cd /backup
    [root@DaMoWang backup]# touch {1..5}.txt  #创建测试文件
    [root@DaMoWang backup]# rsync -azp /backup/ rsync_backup@192.168.94.29::backup --password-file=/et
    c/rsync.password  #推送数据到备份服务器
    sending incremental file list
    ./
    1.txt
                  0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=5/6)
    2.txt
                  0 100%    0.00kB/s    0:00:00 (xfr#2, to-chk=4/6)
    3.txt
                  0 100%    0.00kB/s    0:00:00 (xfr#3, to-chk=3/6)
    4.txt
                  0 100%    0.00kB/s    0:00:00 (xfr#4, to-chk=2/6)
    5.txt
                  0 100%    0.00kB/s    0:00:00 (xfr#5, to-chk=1/6)

    切换到备份服务器查看是否备份成功

    [root@DaMoWang backup]# ssh root@192.168.94.29  #切换到备份服务器
    Last login: Sat Jul 21 02:37:28 2018 from 192.168.94.100  #本机ip 192.168.94.100
    [root@DaMoWang ~]# ip a   #已经切换到备份服务器
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:7d:b5:99 brd ff:ff:ff:ff:ff:ff
        inet 192.168.94.29/24 brd 192.168.94.255 scope global noprefixroute ens33  
           valid_lft forever preferred_lft forever
        inet6 fe80::a1f6:1d30:fbb2:f090/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
    [root@DaMoWang ~]# cd /backup/  
    [root@DaMoWang backup]# ls    #查看备份目录下是否成功备份 
    1.txt  2.txt  3.txt  4.txt  5.txt
    [root@DaMoWang backup]# exit
    登出
    Connection to 192.168.94.29 closed.

    配置rsync+inotify实现实时同步

    inotify概述:

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

    使用rsync工具与inotify机制相结合,可以实现触发式备份(实时同步),只要原始位置的文档发生变化,则立即启动增量备份操作,否则处于静态等侍状态,这样一来,就避免了按固定周期备份存在的延迟性、周期过密等问题

    #使用网络yum源或者源码安装inotify工具
    [root@DaMoWang ~]# yum -y install inotify-tools
    [root@DaMoWang ~]# inotifywait -h     #查看选项 参数

    常用参数:
    -e 用来指定要监控哪些事件
    这些事件包括: create创建,move移动,delete删除,modify修改文件内容,attrib属性更改
    -m 表示持续监控
    -r 表示递归整个目录
    -q 表示简化输出信息

    [root@DaMoWang ~]# inotifywait -mrq -e create,close_write,move,delete,modify /var/www/html/    #输入命令后会监控目录变化 , 打开另一个终端来测试

    在另一个终端登录,在/var/www/html目录进行相关的操作,然后,回到原来的终端查看监控变化情况

    [root@DaMoWang ~]# echo aaa > /var/www/html/a.html
    [root@DaMoWang ~]# mkdir /var/www/html/test
    [root@DaMoWang ~]# cp /etc/passwd /var/www/html/test/
    [root@DaMoWang ~]# rm -rf /var/www/html/test/passwd

    查看变化:

    /var/www/html/ CREATE a.html
    /var/www/html/ MODIFY a.html
    /var/www/html/ CREATE,ISDIR test
    /var/www/html/test/ CREATE passwd
    /var/www/html/test/ MODIFY passwd
    /var/www/html/test/ DELETE passwd
    #使用inotifywait输出的监控结果中,每行记录中依次包括目录、事件、文件。据此可以识别变动情况

    编写触发式同步脚本

    只要使用inotifywait检测到事件时,自动执行rsync进行同步操作即可

    #!/bin/bash
    inotifywait -mrq -e create,close_write,move,delete,modify /var/www/html/  | while read a b c
    do     
    rsync -azP --delete /var/www/html/ root@192.168.94.29:/backup(或者rsync -azp /backup/ rsync_backup@192.168.94.29::backup --password-file=/et
    c/rsync.password)

    done

    加上执行权限并在后台运行即可

    --求知若饥 虚心若愚
  • 相关阅读:
    zt:HttpUrlConnection使用详解
    使用HttpUrlConnection访问www.163.com遇到503问题,用设置代理加以解决
    『TensorFlow』第十弹_队列&多线程_道路多坎坷
    『TensorFlow』项目资源分享
    『Python』socket网络编程
    『TensorFlow』第九弹_图像预处理_不爱红妆爱武装
    『TensorFlow』迁移学习
    『TensorFlow』函数查询列表_神经网络相关
    『TensorFlow』函数查询列表_张量属性调整
    『TensorFlow』函数查询列表_数值计算
  • 原文地址:https://www.cnblogs.com/bigdevilking/p/9344983.html
Copyright © 2011-2022 走看看