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. 递归模式学习(recursion)

    所谓递归,就是方法调用自身.对于递归模式来说,要有一个出口来让递归结束,避免出现死循环. 实例全排列: 从n中拿出m个元素进行排列,当n==m时为全排列. 利用递归就是:把n个元素轮流放入第一个位置, ...

  2. Linux下查看文件和文件夹大小的df和du命令

        转自:http://www.yayu.org/look.php?id=162 当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择. df可以查看一级文件夹大小.使用比 ...

  3. 读写锁:ReadWriteLock

    http://my.oschina.net/20076678/blog/173165   一.在JDK文档中关于读写锁的相关说明 ReadWriteLock 维护了一对相关的 锁 ,一个用于只读操作, ...

  4. 第二章TP-Link 703N OpenWrt刷回原厂固件

    (TP官网)首先原厂固件下载 用终端,使用cat /proc/mtd查看路由支持的升级命令,我的是root@OpenWrt:~# cat /proc/mtd dev:    size   erases ...

  5. javaScript hook

    今天在网上搜索了不少资料,基本概念如下: 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的.当消息到 ...

  6. 手游产品经理初探(六)粗糙的logo会给产品致命一击

    假设你的游戏产品从logo的设计開始就不注重细节的话,那么你的产品将不会走多远! 我们把图片放大看: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1 ...

  7. java 正则表达式学习

    一. Java正则表达式 在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂. 因此,学习及使用正则表达式,便成了解决这一矛盾的主要手段. 正则表达式是一种可 ...

  8. C++异常

    相对于C语言,C++增加了异常机制.考虑,异常解决了什么问题,又带来了什么问题. 异常解决了什么问题: 1.问题检测与问题处理相分离. 2.C语言只是返回一个整数,而异常带有上下文信息,方便找出问题. ...

  9. Swift学习笔记十二

    方法 方法就是和某种特定类型相关联的函数.类.结构体.枚举都可以定义实例方法和类型方法.类型方法和OC中的类方法类似. 结构体和枚举也可以定义方法是Swift与C/OC之间很大的一个区别,在OC中,只 ...

  10. CodeForces 164A Variable, or There and Back Again 搜索

    Variable, or There and Back Again 题目连接: http://codeforces.com/problemset/problem/164/A Description L ...