• rsync数据同步备份


    一、rsync简介

    (1)rsync是什么?

    • rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。

    (2)rsync作用比较

    • 远程拷贝:有点类似ssh的scp命令
    • 本地拷贝:cp
    • 删除:rm
    • rsync可以是一个网络服务(port,socket)

    (3)rsync工作原理

    在同步备份数据时,rsync通过其独特的“quick cheek”算法,仅同步大小或者修改时间发生变化的文件或目录,当然也可以根据权限,属主等属性的变化同步,但需要指定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所以,可以实现快速同步备份数据

    (4)rsync特性:

    • 支持拷贝特殊文件如链接文件,设备等。
    • 可以排除指定文件或目录同步的功能,相当于打包命令tar的排除功能
    • 可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变
    • 可实现增量同步,即只同步发生变化的数据,因此数据传输效率很高
    • 可以使用rcp,rsh,ssh等方式来配合传输文件(rsync本身不对数据加密)

    二、rsync在企业工作场景

    • 两台服务器之间数据同步cron+rsync,不是实时同步
    • rsync结合inotify的功能做实时的数据同步rsync+inotify或sersync

    第一种工作模式:

    rsync客户端命令:

    rsync -avz /etc/hosts /tmp/等价于 cp -a /etc/hosts/tmp/

    -a 保持文件原来的属性

    rsync -avz --delete /null/ /tmp/等价于rm

    第二种工作模式:

    push:rsync -avzP -e 'ssh -p 21987' /etc/passwd hongpeng01@10.69.112.134:/tmp/

    pull:rsync -avzP -e 'ssh -p 21987' hongpeng01@10.69.112.134:/tmp/ /tmp/

    第三种工作模式:

    需要存放备份文件的机器(10.69.112.77)

    1、配置文件

    vim/etc/rsyncd.conf

    #工作中指定用户(需要指定用户)
    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
    #模块开始
    #这个模块对应的是推送目录
    #模块名称随便起
    [backup]
    #需要同步的目录
    path = /backup/
    #表示出现错误忽略错误
    ignore errors
    #表示网络权限可写(本地控制真正可写)
    read only = false
    #这里设置IP或让不让同步
    list = false
    #指定允许的网段
    hosts allow = 10.69.112.0/24
    #拒绝链接的地址,一下表示没有拒绝的链接。
    hosts deny = 0.0.0.0/32
    #不要动的东西(默认情况)
    #虚拟用户
    auth users = rsync_backup
    #虚拟用户的密码文件
    secrets file = /etc/rsync.password

    2、创建rsync用户,及共享目录/backup

    useradd rsync -s /sbin/nologin

    mkdir /backup

    chown -R rsync /backup

    3、创建用户密码

    echo "rsync_backup:hongpeng" > /etc/rsync.password

    chmod 600 /etc/rsync.password

    4、启动

    rsync --daemon

    netstat -tunlp | grep rsync

    5、加入开机自启动

    echo "rsync --daemon" >>/etc/rc.local

    修改完配置文件

    pkill rsync

    rsync --daemon

    需要推送备份文件的机器(10.69.112.133)

    1.echo "hongpeng" > /etc/rsync.password #推送备份文件只需密码,不需用户

    chmod 600 /etc/rsync.password

    2.rsync -avz /data/text.txt rsync_backup@10.69.112.77::backup --password-file=/etc/rsync.password

    三、rsync优缺点:

    优:

    • 增量备份同步 支持socket 集中备份

    缺:

    • 大量小文件备份时,时间比较长,有时进程停止。解决:打包同步 drbd(文件系统同步复制block)
    • 同步大文件,10G文件有时有问题,中断。未完成同步前,是隐藏文件。

     四、生产环境cron+rsync实现svn配置文件同步

    10.69.213.12备份服务器

    [SVN_repos]
    uid = root
    gid = root
    path = /home/svn
    read only = no
    hosts allow = 10.69.213.11

    10.69.213.11主服务器

    cron执行脚本

    #!/bin/bash
    time1=`date +%s`
    time /usr/bin/rsync -avzP --delete --progress /home/svn/SVN_repos  root@10.69.213.12::SVN_repos
    time2=`date +%s`
    
    echo $time1
    echo $time2
    
    a=`echo  ${time2}-${time1}|bc`
    b=`expr ${a} % 60`
    c=`echo ${a}/60|bc`
    backup_Ymd=`date +%Y-%m-%d-%H`
    echo "${c}m ${b}s"
    
    d=`echo "${c}m-${b}s"`
    echo ${d} > /var/log/svn/${backup_Ymd}-$d.txt

    五、inotify+rsync实现文件实时备份

    需要备份的机器10.69.112.133

    vim backup.sh

    #!/bin/bash
    inotify=/usr/local/inotify/bin/inotifywait
    $inotify -mrq --format '%w%f' -e create,close_write,delete /data | while read file
    do
    cd / && rsync -az ./data --delete rsync_backup@10.69.112.77::backup/ --password-file=/etc/rsync.password
    done

    for i in `seq 100`;do touch stu$i;done#在需要备份的目录下创建100个文件

    /bin/bash /usr/local/scripts/backup.sh &#后台执行

    加入rc.local开机自启

    存储备份的机器10.69.112.77

    在/data/data目录下能看到133上创建的100个文件

    /proc/sys/fs/inotify目录下有三个文件,对inotify机制有一定的限制

    • max_user_watches:设置inotifywait或inotifywatch命令可以监控的文件数量
    • max_user_instances:设置每个用户可以运行的inotifywait或inotifywatch命令的进程数
    • max_queued_events:设置inotify实例事件队列可容纳的事件数量

    优化

    echo “50000000” > /proc/sys/fs/inotify/max_user_watches

    echo “50000000” > /proc/sys/fs/inotify/max_queued_events

    sersync功能:

    • 配置文件
    • 真正的守护进程socket
    • 可以对失败文件定时重传
    • 第三方的HTTP接口
    • 默认多线程同步

     10.69.112.78(推送端)sersync

    一.下载sersync源码包

    wget http://sersync.googlecode.com/files/sersync2.5.4_64bit_binary_stable_final.tar.gz

    二.创建sersync目录结构

    # mkdir /usr/local/sersync

    # mkdir /usr/local/sersync/conf

    # mkdir /usr/local/sersync/bin

    # mkdir /usr/local/sersync/log

    # tar zxvf sersync2.5_32bit_binary_stable_final.tar.gz

    # cd GNU-Linux-x86/

    # cp confxml.xml /usr/local/sersync/conf

    # cp sersync2 /usr/local/sersync/bin

    三.配置sersync

     1.首先创建连接rsyncd的密码文件

    # echo "hongpeng" >/etc/rsync.password

    # chmod 600 /etc/rsync.password

     2.配置confxml.xml

    # cd /usr/local/sersync/conf

    # vim confxml.xml

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <head version="2.5">
        <host hostip="localhost" port="8008"></host>
        <debug start="false"/>
        <fileSystem xfs="false"/>
        <filter start="false">
        <exclude expression="(.*).svn"></exclude>
        <exclude expression="(.*).gz"></exclude>
        <exclude expression="^info/*"></exclude>
        <exclude expression="^static/*"></exclude>
        </filter>
        <inotify>
        <delete start="true"/>
        <createFolder start="true"/>
        <createFile start="false"/>
        <closeWrite start="true"/>
        <moveFrom start="true"/>
        <moveTo start="true"/>
        <attrib start="false"/>
        <modify start="false"/>
        </inotify>
    
        <sersync>
        <localpath watch="/data/">
            <remote ip="10.69.112.77" name="backup"/>
            <!--<remote ip="192.168.8.39" name="tongbu"/>-->
            <!--<remote ip="192.168.8.40" name="tongbu"/>-->
        </localpath>
        <rsync>
            <commonParams params="-artuz"/>
            <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/>
            <userDefinedPort start="false" port="874"/><!-- port=874 -->
            <timeout start="false" time="100"/><!-- timeout=100 -->
            <ssh start="false"/>
        </rsync>
        <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
        <crontab start="false" schedule="600"><!--600mins-->
            <crontabfilter start="false">
            <exclude expression="*.php"></exclude>
            <exclude expression="info/*"></exclude>
            </crontabfilter>
        </crontab>
        <plugin start="false" name="command"/>
        </sersync>
    
        <plugin name="command">
        <param prefix="/bin/sh" suffix="" ignoreError="true"/>    <!--prefix /opt/tongbu/mmm.sh suffix-->
        <filter start="false">
            <include expression="(.*).php"/>
            <include expression="(.*).sh"/>
        </filter>
        </plugin>
    
        <plugin name="socket">
        <localpath watch="/opt/tongbu">
            <deshost ip="192.168.138.20" port="8009"/>
        </localpath>
        </plugin>
        <plugin name="refreshCDN">
        <localpath watch="/data0/htdocs/cms.xoyo.com/site/">
            <cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
            <sendurl base="http://pic.xoyo.com/cms"/>
            <regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
        </localpath>
        </plugin>
    </head>

    3.创建推送端sersync同步目录

    # mkdir /data

    4.设置环境变量:

    # echo "export PATH=$PATH:/usr/local/sersync/bin/" >> /etc/profile

    # source /etc/profile

    5.启动sersync

    # sersync2 -r -d -o /usr/local/sersync/conf/confxml.xml

    注:重启操作如下:

    # killall sersync2 && sersync2 -r -d -o /usr/local/sersync/conf/confxml.xml

    6.设置开机启动

    # echo "sersync2 -r -d -o /usr/local/sersync/conf/confxml.xml" >> /etc/rc.local

    这里面有个坑,备份服务器(10.69.112.77)上/data目录的属主属组一定得和/etc/rsyncd.conf里面的uid、gid一样,否则不能同步。

    http://liubao0312.blog.51cto.com/2213529/1677586

  • 相关阅读:
    U8 UAP 存储过程未提供该参数
    SQL exec 报错 找不到存储过程 'select * from TEMP_byhktb20191213104416697'
    U8修改存货扩展自定义项
    插入临时表时报在将 nvarchar 值 'config_category.metadata_item.popedom' 转换成数据类型 int 时失败
    拼接字符串发生的错误
    js 三种提取部分字符串的方法的 区别: slice(start, end) substring(start, end) substr(start, length)
    sqlserver 保留位数
    1月转01月
    焦点图插件-06
    通栏自适应通栏焦点图-05
  • 原文地址:https://www.cnblogs.com/hongpeng0209/p/5944891.html
Copyright © 2020-2023  润新知