zoukankan      html  css  js  c++  java
  • rsync实现数据同步

    希望两台机器指定目录的数据保持一致

    192.168.19.252(master)                 192.168.19.251(slave)

    /cache

    拉复制            推复制

    rsync的工作模式

    C/S    client/server   

    B/S    browse/server

    拉复制

    从服务器定期去主服务器获取数据

    crontab+rsync

    工作过程

    1   从服务器发起连接                   ip  port

    2   主服务器                           固定ip  开放port(开服务)

    3   需要授权                           user password

    制作rsync服务

    服务器端:

    1、编辑配置文件

    mkdir /etc/rsyncd

    vim /etc/rsyncd/rsyncd.conf

    uid=root

    gid=root

    port=873

    max connections=0

    log file=/var/log/rsyncd.log

    pid file=/var/run/rsyncd.pid

    lock file=/var/run/rsyncd.lock

    motd file=/etc/rsyncd/rsyncd.motd

    read only=yes

    hosts allow=192.168.19.0/24

    hosts deny=*

    [www]

    path=/cache

    list=yes

    ignore errors

    auth users=danny

    secrets file=/etc/rsyncd/rsyncd.secrets

    ##如果没有生成日志文件,加上下面几行

    transfer logging=yes

    log format=%t %a %m %f %b

    syslog facility=local3

    2、创建所需文件

    1)欢迎页面

    Vim /etc/rsyncd/rsyncd.motd

    ###########

    ##welcome##

    ###########

    2)创建共享目录

    Mkdir /cache

    3)创建密码文件并修改其权限(否则客户端无法完成验证)

    vim /etc/rsyncd/rsyncd.secrets

    chmod 600 /etc/rsyncd/rsyncd.secrets

    danny:123456

    3、启动rsync服务

        rsync --daemon --config=/etc/rsyncd/rsyncd.conf

    4、查看服务有没有运行

        lsof -i:873

     

    客户端操作:

    1、创建接收目录

    Mkdir  /cache

    2、拉取数据

    语法:rsync –avzP –delete –password-file=/path/filename username@Server::共享资源名称 /cache

    rsync -avzP --delete --password-file=/etc/rsyncd.pw danny@192.168.19.252::www /cache

           -a参数,相当于-rlptgoD,-r 是递归 -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件

    -z,传输时压缩

                  -P,传输进度,782448  “63%  110.64kB/s    0:00:04”

                  -v,传输时显示传输的文件名及其简要信息

                  --delete  在目标文件中删除额外的文件。

    这里需要注意别忘了去创建密码文件并修改权限(必须设为600)

    Vim /etc/rsyncd.pw

    123456

    Chmod 600 /etc/rsyncd.pw

    3、结合crontab定时拉取数据

    Crontab –e

    * * * * * rsync -avzP --delete --password-file=/etc/rsyncd.pw danny@192.168.19.252::www /cache

    配置过程中容易发生的错误:

        服务器和客户端的密码文件没有被设置为600

    拉复制的特点:

        服务器端定义共享什么目录、共享资源名、认证用户、认证密码等

        客户端定义间隔多长时间拉取服务器指定目录的数据,如果间隔时间为毫秒级时,同步小文件没有问题,但同步大文件时可能会造成数据不一致,且两端系统资源的消耗可能会比较大。

    说明rsync在毫秒级同步时传输大文件会导致数据不一致的情况:

        1、客户端编辑脚本如下:

        Vim pull.sh

        #!/bin/bash

        While :

           Do

           Rsync –avzP –delete –password-file=/etc/rsyncd.pw cjk@192.168.19.252::www /cache

           Sleep 0.001  #太快了,可以改为0.01

        Done

        2、给脚本加执行权限

        3、结合周期性计划任务执行脚本

        4、在服务器端/cache目录中使用dd创建一个2G的大文件

        5、文件传输后通过md5sum filename对比两文件的MD5值,会发现不同

    推复制

    监测到指定目录数据变化,即同步给远程主机。

    配置:

        本机安装配置监测软件;远程主机上配置rsync服务。

    实验环境:rhel6.7

    目的:监测到19.252上/cache目录发生变化后同步给19.251的/cache目录

    操作:

    192.168.19.252上:(服务器端)

        1、将配置文件远程拷贝到19.251上(推复制本机不需要配置rsync服务,只需要一个密码文件即可)

           Scp  -r /etc/rsyncd root@192.168.19.251:/etc/

        2、解压监测软件

           Tar –xf sersync…..tar –C /usr/src

           解压之后有两个文件,confxml.xml(配置文件)和sersync2(执行文件)

        3、配置检测软件的配置文件:

    <sersync>

            <localpath watch="/cache">

                <remote ip="192.168.19.251" name="www"/>

                <!--<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="danny" passwordfile="/etc/rsyncd.pw"/>

                <userDefinedPort start="false" port="874"/><!-- port=874 -->

                <timeout start="false" time="100"/><!-- timeout=100 -->

                <ssh start="false"/>

            </rsync>

        4、创建配置文件中指定的密码文件,并将权限修改为600  

           vim /etc/rsyncd.pw

           123456

           chmod 600 /etc/rsyncd.pw

        5、运行检测软件

            cd /usr/src/GUN-linux-x86

           ./sersync2 –r &    ##-r可以看到启动过程,第一次启动时将被监控目录所有数据整体同步到rsync server上

       

    192.168.19.251上:(客户端)

        1、删除原先本机上存在的密码文件:

           Rm –fr /etc/rsyncd.pw

        2、修改rsync配置文件(仅一行):

           Read only=no  开放可写的权限      

        3、保证已存在/cache目录

           mkdir –p /cache 

        4、保证密码文件权限是600

           chmod 600 /etc/rsyncd/rsyncd.secrets

        5、运行rsync服务

           rsync –daemon –config=/etc/rsyncd/rsyncd.conf

    测试:

           在252上的/cache目录中创建大文件,并生成md5校验码,251上会通不过去且MD5码相同

           在252上的/cache目录中创建1000个小文件,会发现251上同步的比较慢

                 

                  

     

        在对rsync服务器配置结束以后,下一步就需要在客户端发出rsync命令来实现将服务器端的文件备份到客户端来。rsync是一个功能非常强大的工具,其命令也有很多功能特色选项,我们下面就对它的选项一一进行分析说明。

    Rsync的命令格式可以为以下六种

      rsync [OPTION]... SRC DEST

      rsync [OPTION]... SRC [USER@]HOST:DEST

      rsync [OPTION]... [USER@]HOST:SRC DEST

      rsync [OPTION]... [USER@]HOST::SRC DEST

      rsync [OPTION]... SRC [USER@]HOST::DEST

      rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

      

    对应于以上六种命令格式,rsync有六种不同的工作模式:

      1)拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。如:rsync -a /data /backup

      2)使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。如:rsync -avz *.c foo:src

      3)使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。如:rsync -avz foo:src/bar /data

      4)从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。如:rsync -av root@172.16.78.192::www /databack

      5)从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。如:rsync -av /databack root@172.16.78.192::www

      6)列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。如:rsync -v rsync://172.16.78.192/www

  • 相关阅读:
    django学习笔记
    linux安装tree命令
    SecureCRT卡死的问题
    vim常用快捷键记录
    项目经理应具备的9种能力
    regsvr32命令
    通知栏构建和取消的基本认识
    AlertDialog 对话框 5种
    异步任务——AsyncTask的初步认识
    BaseAdapter的使用与优化
  • 原文地址:https://www.cnblogs.com/dannylinux/p/7988248.html
Copyright © 2011-2022 走看看