Rsync文件同步

  1. 本章结构

  2. 关于rsync

1、一款增量备份工具,remote sync,远程同步,支持本地复制或者与其他SSH、rsync主机同步,官方网站:http://rsync.samba.org/。

Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也可以使用rsync同步本地硬盘中的不同目录。

Rsync是用户取代rcp的一个工具,Rsync使用所谓的"Rsync算法"来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快,可以参考How Rsync A Practical Overview进一步了解Rsync的运作机制。

Rsync支持大多数的类Unix系统,无论是linux、solaris还是BSD上都经过了良好的测试,此外,它在windows平台下也有相应的版本,比较知名的有cwRsync和Sync2NAS。

2、特点

能更新整个目录树和文件系统

有选择性的保持符号链接、硬链接、文件属于、权限、设备以及时间等

对于安装来说,无任何特殊权限要求

对于多个文件来说,内部流水线减少文件等待的延时

能用rsh、ssh或直接端口作为传输入端口

支持匿名rsync同步文件,是理想的镜像工具

3、同步源和发起源

Rsync同步源:指备份操作的远程服务器,也称为备份源,主要包括两种:rsync源、ssh源

4、文件格式

备份操作类型:

本地同步:rsync … 本地目录1 本地目录2

rsync+ssh同步:

rsync … ssh源 本地目录 (下行同步即下载)

rsync … 本地目录 ssh源 (上行同步即上传)

rsync+rsync同步:

rsync … rsync源 本地目录 (下行同步即下载)

rsync … 本地目录 rsync源 (上行同步即上传)

5、rsync命令的用法:

基本格式:rsync [选项] 原始位置 目录位置

常用选项:

-a:归档模式,递归并保留对象属性,等同于-rlptgoD

-v:显示同步过程的详细(verbose)信息

-z:在传输文件时进行压缩(compress)

-H:保留硬链接文件

-A:保留ACL属性信息

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

-r:递归模式,包含目录及子目录中所有文件

-l:对于符号链接文件仍然复制为符号链接文件

-p:保留文件的权限标记

-t:保留文件的时间标记

-g:保留文件的属组标记(仅超级用户使用)

-o:保留文件的属主标记(仅超级用户使用)

-D:保留设备文件及其他特殊文件

6、同步的优缺点

①定期同步的不足

执行备份的时间固定

当同步源长期不变化时,密集的定期任务是不必要的

②实时同步的优点

一旦出现源出现变化,立即启动备份

只要同步源无变化,则不执行备份

7、linux内核的inotify机制从版本2.6.13开始提供,可以监控文件系统的变动情况,并作出通知响应,辅助软件:inotify-tools

8、调整内核的参数

max_queue_events:监控队列大小

max_user_instances:最多监控实例数

max_user_watches:每个实例最多监控文件数

9、安装inotify-tools辅助工具

inotifywait:用于持续监控,实时输出结果

inotifywatch:用于短期监控,任务完成后再出结果

#inotifywait –mrq -e modify,create,move,delete /var/www/html

选项:-m (monitoring) 实时监控

-r (recursive) 递归

-q (quiet) 安静模式

三、案例1:rsync+ssh同步

试验准备:两台主机,A主机和B主机IP地址分别为192.168.131.130、192.168.131.136,共享目录/usr/local/nginx/html

A主机操作:

# useradd wdd

# passwd wdd

# setfacl -m u:wdd:rwx /usr/local/nginx/html/ #设置ACL权限

# setfacl -m d:wdd:rwx /usr/local/nginx/html/

主机B操作:

# mkdir /client

# rsync -avz wdd@192.168.131.130:/usr/local/nginx/html/* /client

上面操作只同步/usr/local/nginx/html/下的文件,如果写成/usr/local/nginx/html,则同步整个目录

  1. 案例2:rsync+rsync

    试验准备:A主机IP地址为192.168.131.130,B主机IP地址为192.168.131.136

    A主机作为同步源:

    # mkdir /server

    # cd /server/

    # chmod 777 /server/ #注意两边都要有相应的权限

    # touch server.txt

    # vim /etc/rsyncd.conf

    use chroot = yes

    address = 192.168.131.130

    port 873

    log file = /var/log/rsyncd.log

    pid file = /var/run/rsyncd.pid

    [share]

    comment = rsync server

    path = /server

    read only = no

    dont compress = *.gz #对后面格式不进行压缩


    auth users = wdd

    secrets file = /etc/rsyncd_users.db

    # vim /etc/rsyncd_users.db

    wdd:123456 #用户名和密码

    # chmod 600 /etc/rsyncd_users.db

    #注意一定要改这个权限,否则认证不通过

    # killall -9 rsync

    # rsync –daemon #只能这样启动rsync

    主机B客户端:

    进行下载操作

    # rsync -avz wdd@192.168.131.130::share /client

    也可以写成下面这样:

    # rsync -avz rsync://wdd@192.168.131.130/share/* /client/ /

    两种格式:

    rsync -avz xxx@服务器地址::共享名 本地目录

    rsync -avz rsync://xxx@服务器地址/共享名 本地目录

进行上传操作:

# cd /client/

# touch client.txt

# rsync -avz /client/client.txt rsync://wdd@192.168.131.130/share/

  1. 案例3:rsync+inotify实现文件实时同步

    试验准备:主机A的IP地址为192.168.131.130,主机B的IP地址为192.168.131.136,主机A作为同步源

    1、主机A操作:

    同案例2操作

2、主机B操作:

# tar xf inotify-tools-3.14.tar.gz

# cd inotify-tools-3.14

# ./configure

# make

# make install

安装工具后需更改内核参数:vi /etc/sysctl.conf

fs.inotify.max_queue_events=16384 监控队列大小fs.inotify.max_user_instances=1024 最多监控实例数fs.inotify.max_user_watches=1048576 每个实例最多监控文件数

# /usr/local/bin/inotifywait -mrq -e delete,create,modify,move /client/ #对/client目录进行实时监控

可以将上面的命令写成一个shell脚本,只要/client文件夹下面的文件发生修改,立即用rsync同步文件,脚本如下所示:

# vim inotify_check.sh

#!/bin/bash

SRCCMD=" /usr/local/bin/inotifywait -mrq -e delete,create,modify,move /client/"

DESTCMD="rsync -avz /client/* rsync://wdd@192.168.131.130/share/"

${SRCCMD}|while read DIRECTORY EVENTS FILE

do

${DESTCMD}

Done

# chmod +x inotify_check.sh

# export RSYNC_PASSWORD=123456

#将上面变量RSYNC_PASSWORD声明为全局变量,这样就不用每次运行上面脚本输入密码了

# ./inotify_check.sh #运行脚本

打开另外一个窗口,作如下操作:

# cd /client/

# touch 1.txt

只要主机B下的/client文件夹下面的文件发生修改、创建、删除、移动都会被检测到,并·被同步到主机A下的/server下

  1. 案例4:rsync+inotify+unison实现双机互相同步

    实验准备:两台主机,A主机地址为192.168.131.130,主机B的IP地址为192.168.131.136

    1. 操作主机A
      1. 配置SSH

        # ssh-keygen -t rsa

        # ssh-copy-id 192.168.131.136

        # ssh root@192.168.131.136#测试是否登录主机B不需要输入密码

      2. 安装inotify

        # tar xf inotify-tools-3.14.tar.gz

        # cd inotify-tools-3.14

        # ./configure

        # make && make install

      3. 安装unison

        # tar xf ocaml-3.10.1.tar.gz #先安装unison的底层依赖包

        # cd ocaml-3.10.1

        # ./configure

        # make world opt

        # make install

        # tar xf unison-2.13.16.tar.gz

        # cd unison-2.13.16

        # make UISTYLE=text STATIC=true THREADS=true

        # make install

        # cp unison /usr/local/bin/

      4. 创建同步目录

        # mkdir /backup1

      5. # vim intify_unison.sh

#!/bin/bash

IP="192.168.131.136"

SRC="/backup1"

DEST="/backup2"

/usr/local/bin/inotifywait -mrq -e modify,create,delete,move ${SRC}| while \

read DIRECTORY EVENTS FILE

do

/usr/local/bin/unison -batch ${SRC} ssh://${IP}/${DEST}

done

# chmod +x intify_unison.sh

  1. 操作主机B
    1. 配置SSH

      # ssh-keygen -t rsa

      # ssh-copy-id 192.168.131.130

      # ssh 192.168.131.130 #测试登录主机A是否需要登录密码

    2. 安装inotify

      # tar xf inotify-tools-3.14.tar.gz

      # cd inotify-tools-3.14

      # ./configure

      # make && make install

    3. 安装unison

      # tar xf ocaml-3.10.1.tar.gz #安装unision需要的底层依赖包

      # cd ocaml-3.10.1

      # ./configure

      # make world opt

      # make install

      # make UISTYLE=text THREADS=true STATIC=true

      # make install

      # cp unison /usr/local/bin/

    4. 创建同步目录

      # mkdir /backup2

    5. # vim intify_unison.sh

      #!/bin/bash

      IP="192.168.131.130"

      SRC="/backup2"

      DEST="/backup1"

      /usr/local/bin/inotifywait -mrq -e modify,create,delete,move ${SRC}| while \

      read DIRECTORY EVENTS FILE

      do

      /usr/local/bin/unison -batch ${SRC} ssh://${IP}/${DEST}

      done

# chmod +x intify_unison.sh

  1. 测试两主机是否互相同步数据
    1. 在主机A上操作:

      # ./intify_unison.sh

      打开另一个对话窗口,作如下操作:

      # cd /backup1/

      # touch 1.txt

      打开主机B发现了1.txt

    2. 在主机B上操作:

      # ./intify_unison.sh

      打开另一个对话窗口,作如下操作:

      # cd /backup2/

      # touch 2.txt

      打开主机A发现了2.txt

       

       

       

     

Rsync文件同步的更多相关文章

  1. CentOS系统rsync文件同步 安装配置

    rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync 它的特性如下: 可以镜像保存整个目录树和文件系统. 可以很容易做到保持原来文件的权限.时间.软硬 ...

  2. rsync 文件同步和备份

    rsync 是同步文件的利器,一般用于多个机器之间的文件同步与备份,同时也支持在本地的不同目录之间互相同步文件.在这种场景下,rsync 远比 cp 命令和 ftp 命令更加合适,它只会同步需要更新的 ...

  3. Rsync文件同步工具

    前段时间因公司需求,需要把备份的文件进行同步保存,后面就想到了我们大家都最熟悉的文件同步工作Rsync,于是就捣鼓了一下午时间,然后总结了下大概过程和参数详情. 首先了解了下rsync同步的大致原理: ...

  4. linux 下的 rsync 文件同步

    rsync是linux下的一款快速增量备份工具Remote Sync,是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限.时间.软硬链接等附加信息.rsync是用 “rsync ...

  5. inotify 与 rsync文件同步实现与问题

    首先分别介绍inotify 与 rsync的使用,然后用两者实现实时文件同步,最后说一下这样的系统存在什么样的问题. 1. inotify 这个具体使用网上很多,参考 inotify-tools 命令 ...

  6. rsync文件同步、Inotify-tools参数详解

    inotifywait用于等待文件或文件集上的一个待定事件,可以监控任何文件和目录设置,并且可以递归地监控整个目录树: inotifywatch用于收集被监控的文件系统计数据,包括每个inotify事 ...

  7. Rsync文件同步服务器配置

    rsync 是一个Unix/Linux系统下的文件同步和传输工具.rsync是用 “rsync 算法”提供了一个客户机和远程文件服务器的文件同步的快速方法.可以用来做备份或镜像.一.配置文件rsync ...

  8. [rsync]——rsync文件同步和备份

    实验环境 (1) Rsync服务器:10.0.10.158 (2) Rsync客户端:10.0.10.173 Rsync服务器端的配置 1. 安装xinetd和rsync # yum install ...

  9. Centos6.5下rsync文件同步安装配置及遇到的问题解决方法

    实验节点如下: 源节点:192.168.0.111 备份节点:192.168.0.112 ------------------------------以下部分在两个节点上执行1.防火墙开放873端口( ...

随机推荐

  1. PHP 根据类名和方法名已面向对象的方式执行函数。

    <?php echo 'testClass'; echo '<br><hr>'; $className = 'TestClass'; $methodName = 'c_o ...

  2. 27.怎样在Swift中声明typedef?

    在OC中,我们经常会用typedef关键字来声明Block,例如: /** * 通用的空闭包类型,无参数,无返回值 */ typedef void (^GofVoidBlock)(void); 在Sw ...

  3. GIT 中提示 please tell me who you are

    如果使用git过程中出现了,please tell me who you are ,需要设置一下使用者的身份. 1.git config user.name "username" ...

  4. 编写 Window 服务程序

    编写 Window 服务程序     一.直观认识Windows服务.        打开Windows“控制面板/管理工具/服务”,系统显示Windows服务列表.                  ...

  5. C++ Bit Fields

    http://msdn.microsoft.com/en-us/library/ewwyfdbe%28v=vs.71%29.aspx Note An unnamed bit field of widt ...

  6. mysql主从同步单个表实验记录

    问题的提出: 在CRM管理系统与运营基础数据平台之间需要有数据表进行交换,说是交换,其实是单向的,就是CRM里面的一些数据需要实时同步到运营基础数据平台中. 解决方案: A.采用时间戳的办法进行代码开 ...

  7. C# 如何编辑文件的摘要信息

    我的以前的测试报告程序需要在倒完测试数据报告后,在文件摘要中加上一些类似版权说明的文字等等. 因此需要对文件摘要信息进行编辑. 我的记忆中以前好像只有office文档才可以又摘要信息, 现在看来基本上 ...

  8. [AngularJS] Best Practise - Controller

    ControllerAs: Use thecontrollerAs syntax always as it aids in nested scoping and controller instance ...

  9. Understanding page frames and pages

    Memory in Linux is organized in the form of pages (typically 4 KB in size). Contiguous linear addres ...

  10. 使用Visual Studio创建简单的自己定义Web Part 部件属性

    使用Visual Studio创建简单的自己定义Web Part 部件属性 自己定义属性使用额外的选项和设置拓展你的Web part部件.本文主要解说怎样使用Visual Studio创建简单的自己定 ...