Rsync简介

  • Rsync英文全称Remote synchronization,从软件的名称就可以看出来,Rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像,远程备份的功能,这个功能类似ssh带的scp命令,但又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。当然,Rsync还可以在本地主机的不同分区或目录之间全量及增量的复制数据,这又类似cp命令,但同样也优于cp命令,cp每次都是全量拷贝,而rsync可以增量拷贝。

小提示:利用Rsync还可以实现删除文件和目录的功能,这又相当于rm命令!

  • 一个rsync相当于scp,cp,rm,但是还优于他们每一个命令。

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

提示:传统的cp,scp工具拷贝每次均为完整的拷贝,而rsync除了可以完整拷贝外,还具备增量拷贝的功能,因此,从同步数据的性能及效率上,Rsync工具更胜一筹。

  • CentOS5,rsync2.x比对方法,把所有的文件比对一遍,然后进行同步。

  • CentOS6,rsync3.x比对方法,一边比对差异,一边对差异的部分进行同步。

rsync 命令常用参数选项说明:

-v,--verbose 详细模式输出,传输时的进度等信息
-z,--compress 传输时进行压缩以提高传输效率,--compress-level=NUM可按级别压缩。
-a,--archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rtopgD1(字母1)
-r,--recursive 对子目录以递归模式,即目录下的所有目录都同样传输,注意是小写r
-t,--times 保持文件时间信息
-o,--owner 保持文件属主信息
-p,--perms 保持文件权限
-g,--group 保持文件属组信息
-P,--progress 显示同步的过程及传输时的进度等信息
-D,--devices 保持设备文件信息
-l,--links 保留软链接
-e,--rsh=COMMAND 使用的信道协议(remote shell),指定替代rsh的shell程序。例如:ssh --exclude=PATTERN 指定排除不需要传输的文件模式(和tar参数一样)
--bwlimit=RATE limit socket I/O bandwidth
--delete 让源目录SRC和目标目录数据DST一致

例:

    rsync -avz dbfile 10.0.0.41:/backup #没有给带宽做限制
rsync -avz --bwlimit= dbfile 172.16.1.41:/backup #限定了带宽

借助ssh通道在不同主机之间传输数据

示例1:推送:将当前主机内容推送到远程主机

rsync -avzP -e 'ssh -p 22'/etc/ root@192.168.197.129:/tmp/
#命令说明
-e 'ssh -p 22' 表示以ssh的方式通过22端口推送,如果不写默认22端口

示例2:将远程主机内容拉取到当前主机

rsync -avzP -e 'ssh -p 22' root@192.168.197.129:/opt /tmp
关键语法说明:
)-avz相当于-vzrtopgDI,表示同步时文件和目录属性不变。
)-P显示同步的过程,可以用--progress替换。
)-e ‘ssh -p ’表示通过ssh通道传输数据,可省略
)root@chensiqi2:/opt 远程主机系统用户,地址,路径
)/tmp本地的路径
可以去掉 -e ‘ssh -p ’(默认22端口)
rsync -avzP root@192.168.197.129:/opt /tmp/

以守护进程(socket)的方式传输数据(重点)

A-Server:192.168.50.129服务端

B-Server:192.168.50.128客户端

开始部署rsync服务--Rsync服务端A-Server

首先安装:
yum -y install rsync
然后创建rsyncd.conf文件,并添加如下内容(文件默认不存在)
vim /etc/rsyncd.conf
#rsync_config_____start
#created by chensiqi : --
##blog:http://www.cnblogs.com/chensiqiqi/
##rsyncd.conf start##
# 用户
uid = rsync
# 组
gid = rsync
# 程序安全设置
fake super = yes
use chroot = no
# 客户端连接数
max connections =
# 超时时间
timeout =
# 进程号文件位置
pid file = /var/run/rsyncd.pid
# 进程锁
lock file = /var/run/rsync.lock
# 日志文件位置
log file = /var/log/rsyncd.log
##########################################
[backup]
# 使用目录
path = /backup/
# 有错误时忽略
ignore errors
# 可读可写(true或false)
read only = false
# 阻止远程列表(不让通过远程方式看服务端有啥)
list=false
# 允许IP
hosts allow = 192.168.50.0/
# 禁止IP
hosts deny = 0.0.0.0/
# 虚拟用户
auth users = rsync_backup
# 存放用户和密码的文件
secrets file = /etc/rsync.password
##rsync_config______end##
useradd -M -s /sbin/nologin rsync  #创建rsync用户
mkdir /backup #创建共享目录
#启动服务:rsync --daemon
rsync --daemon
netstat -antup | grep rsync tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 1803/rsync
tcp6 0 0 :::873 :::* LISTEN 1803/rsync
将A-Server上的/backup文件夹更改属主rsync
chown -R rsync /backup 创建rsync虚拟账户名和密码
echo "rsync_backup:123456" >/etc/rsync.password 将账户密码文件的权限设置为600(必须否则失败)
chmod /etc/rsync.password 加入开机启动
echo "rsync --daemon" >> /etc/rc.local

如何重启rsync服务

pkill rsync #关闭rsync服务
rsync --daemon #启动rsync服务

开始部署rsync服务--Rsync客户端B-Server

只需要创建密码文件

只需要创建密码文件
yum -y install rsync
echo "" > /etc/rsync.password
将密码文件的权限设置为600(必须否则失败)
chmod /etc/rsync.password
至此rsync客户端B-Server配置完毕。

Rsync同步测试

推送1:将客户端B指定目录内容推送到服务器端A的rsync指定目录下。

rsync -avz /backup/ rsync_backup@192.168.50.129::backup --password-file=/etc/rsync.password
命令说明:
-avz:保持稳健各项属性不变,-v显示同步信息 -P显示具体同步过程
/backup/:要推送的内容所在目录
rsync_backup:服务器端rsync服务的同步的用户名(非Linux用户)
192.168.50.128:rsync服务器IP地址
backup:rsync服务器配置文件里的模块名
--password-file=/etc/rsync.password:免密码的操作,指定密码文件位置,如果不写,则会要求用户交互式输入密码。(如果想挂定时任务,必须得非交互式)

推送2:将客户端B任意目录推送到rsync服务器A端指定目录下

    rsync -avzP /tmp/ rsync_backup@192.168.50.129::backup --password-file=/etc/rsync.password

拉取1:将rsync服务器A端指定目录全部内容同步到客户端B

    rsync -avzP rsync_backup@192.168.50.129::backup /backup/ --password-file=/etc/rsync.password
命令说明:
和推送相比,只是两个目录换了个位置。

拉取2:将rsync服务器端A指定目录下的指定内容同步到客户端B

    rsync -avzP rsync_backup@192.168.50.129::backup/opt.tar.gz /backup/ --password-file=/etc/rsync.password

拉取3: 将rsync服务器端指定目录下的全部内容排除某目录或文件后,同步到客户端

方法一:通过命令行实现排除

ls
a b c chen d e ls chen 说明:
a,b,c,d,e为文件,chen是目录。目录下有1,,,,5文件 rsync -avz --exclude=a --exclude=chen/ --exclude=chen/ rsync_backup@192.168.50.129::backup /backup/ --password-file=/etc/rsync.password
命令说明:
--exlude=文件名 :排除的文件

方法二:通过列表文件实现排除

创建排除列表文件
cat /root/exclude.txt b
e

测试命令:

    rsync -avz --exclude-from=/root/exclude.txt rsync_backup@192.168.50.129::backup /backup/ --password-file=/etc/rsync.password
命令说明:
--exclude-from=文件的绝对路径 :引用一个排除列表,列表里只需要输入排除的文件名即可

rsync同步拉取测试:让rsync客户端指定目录内容始终和rsync服务器共享目录内容保持一致

1.和rsync服务器目录内容始终保持一致:始终保持一致的意思是说,当Rsync服务器共享目录增加文件,那么客户端指定目录也增加,服务器端共享目录删除文件,那么客户端指定目录也删除文件

    rsync -avz --delete rsync_backup@192.168.50.129::backup /backup/ --password-file=/etc/rsync.password
命令说明:
--delete :表示同步增,删,改(文件内容出现变化,也会同步的)

2.排除某文件后,再和服务器进行同步.

    rsync -avz --delete --exclude=c rsync_backup@192.168.50.129::backup /backup/ --password-file=/etc/rsync.password
命令说明:
--exclude=c:同步时不考虑文件名为c的文件

rsync同步推送测试:让Rsync服务器端共享目录始终和rsync客户端指定目录内容一致。

1)和rsync客户端目录内容始终保持一致

始终保持一致的意思是说,当Rsync客户端指定目录增加文件,那么服务器端共享目录也增加,客户端指定目录删除文件,那么服务器端共享目录也删除文件

rsync -avz --delete /backup/ rsync_backup@192.168.50.129::backup --password-file=/etc/rsync.password
命令说明:
--delete :表示同步增,删,改(文件内容出现变化,也会同步的)
与同步拉取相比:只是客户端目录放在了服务器端的前边

Rsync企业应用之风险提示

特别说明:

执行--delete参数从rsync服务器端往rsync客户端拉取数据时,一定要小心,最好不用,它比从rsync客户端带--delete参数往rsync服务端推送危险的多。客户端带--delete参数往服务端推送仅删除服务端模块下的数据,而前者有能力删除rsync客户端本地的所有数据包括跟下的所有目录。

rsync推送企业工作场景:
1)备份 --delete 风险
本地有啥,远端就有啥,本地没有的远端有也要删除。服务器端的目录数据可能丢失。

rsync拉取企业工作场景:
1)代码发布,下载。--delete风险
远端有啥,本地(客户端)就有啥,远端没有的本地有也要删除。本地的目录数据可能丢失

rsync优点:

1,增量备份,支持socket(daemon),集中备份(支持推拉,都是以客户端为参照物)。
2,远程SHELL通道模式还可以加密(SSH)传输,socket(daemon)需要加密传输,可以利用vpn服务或ipsec服务

rsync缺点:

1,大量小文件时候同步的时候,比对时间较长,有的时候,同步过程中,rsync进程可能会停止,僵死了。
2,同步大文件,10G这样的大文件有时也会出问题,中断。未完整同步前,是隐藏文件,可以通过续传(--partial)等参数实现传输
3,一次性远程拷贝可以用scp,大量小文件要打成一个包再拷贝。(重要)

rsyncd.conf配置文件常用参数说明:

rsyncd.conf参数 参数说明
uid=rsync rsync使用的用户。
gid=rsync rsync使用的用户组(用户所在的组)
use chroot=no 如果为true,daemon会在客户端传输文件前“chroot to the path”。这是一种安全配置,因为我们大多数都在内网,所以不配也没关系
max connections=200 设置最大连接数,默认0,意思无限制,负值为关闭这个模块
timeout=400 默认为0,表示no timeout,建议300-600(5-10分钟)
pid file rsync daemon启动后将其进程pid写入此文件。如果这个文件存在,rsync不会覆盖该文件,而是会终止
lock file 指定lock文件用来支持“max connections”参数,使得总连接数不会超过限制
log file 不设或者设置错误,rsync会使用rsyslog输出相关日志信息
ignore errors 忽略I/O错误
read only=false 指定客户端是否可以上传文件,默认对所有模块为true
list=false 是否允许客户端可以查看可用模块列表,默认为可以
hosts allow 指定可以联系的客户端主机名或和ip地址或地址段,默认情况没有此参数,即都可以连接
hosts deny 指定不可以联系的客户端主机名或ip地址或地址段,默认情况没有此参数,即都可以连接
auth users 指定以空格或逗号分隔的用户可以使用哪些模块,用户不需要在本地系统中存在。默认为所有用户无密码访问
secrets file 指定用户名和密码存放的文件,格式;用户名;密码,密码不超过8位
[backup] 这里就是模块名称,需用中括号扩起来,起名称没有特殊要求,但最好是有意义的名称,便于以后维护
path 这个模块中,daemon使用的文件系统或目录,目录的权限要注意和配置文件中的权限一致,否则会遇到读写的问题

特别说明
1)模块中的参数项可以拿到全局配置中使用
2)以上配置文件中的参数,为生产中经常使用的参数,初学者掌握这些足够了。
3)以上配置文件中没有提到的参数请参考man rsyncd.conf查看

开发rsync服务启动脚本

    #!/bin/bash
#author:wk
# chkconfig:
# description:This is Rsync service management shell script
# Source function library
. /etc/rc.d/init.d/functions
start(){
rsync --daemon
if [ $? -eq -a `ps -ef|grep -v grep|grep rsync|wc -l` -gt ];then
action "Starting Rsync:" /bin/true
sleep
else
action "Starting Rsync:" /bin/false
sleep
fi
}
stop(){
pkill rsync;sleep ;pkill rsync
if [ `ps -ef|grep -v grep|grep "rsync --daemon"|wc -l` -lt ];then
action "Stopping Rsync: " /bin/true
sleep
else
action "Stopping Rsync:" /bin/true
sleep
fi
}
case "$1" in
start)
start;
;;
stop)
stop;
;;
restart|reload)
stop;
start;
;;
*)
echo $"Usage: $0 {start|stop|restart|reload}"
;;
esac

sersync  需要配置在rsync客户端

sersync需要依赖inotify和rsync,所以需要安装对应软件

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
yum -y install inotify-tools #之前rsync装过了只需装inotify

安装sersync

cd /usr/local/
wget https://raw.githubusercontent.com/wsgzao/sersync/master/sersync2.5.4_64bit_binary_stable_final.tar.gz
tar xf sersync2..4_64bit_binary_stable_final.tar.gz
mv GNU-Linux-x86/ /usr/local/sersync

配置sersync详解

vim /usr/local/sersync/confxml.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
<host hostip="localhost" port=""></host><!--本地主机地址-->
<debug start="false"/><!--是否打开调试信息-->
<fileSystem xfs="false"/><!--文件系统是否支持xfs文件系统-->
<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="true"/>
<!--监控创建文件-->
<closeWrite start="true"/>
<!--文件或目录封闭,写模式-->
<moveFrom start="true"/>
<!--监控移动进来的文件-->
<moveTo start="true"/>
<!--监控移动出去的文件-->
<attrib start="false"/>
<!--监控文件或目录属性被改变-->
<modify start="false"/>
<!--监控文件或目录内容被修改-->
</inotify>
<sersync><!--本地需要监视的目录-->
<localpath watch="/www"><!--本地监视/www目录-->
<remote ip="192.168.50.179" name="backup"/><!--rsync服务端的IP及模块名-->
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync> <!--sersync调用rsync时的参数配置段-->
<commonParams params="-az"/><!-- rsync使用az参数 -->
<!--开启虚拟用户密码认证 用户名 密码存放位置-->
<auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/>
<userDefinedPort start="false" port=""/><!--port=--><!--指定rsync服务端的端口 默认874-->
<timeout start="ture" time=""/><!--timeout= --><!-- 超时时间-->
<ssh start="false"/>
</rsync>
<!--指定如果同步失败,记录到哪个文件,以便在60分钟后尝试重传-->
<failLog path="/tmp/rsync_fail_log.sh" timeToExecute=""/><!--default every 60mins execute once-->
<!--指定多长时间间隔执行一次完整同步-->
<crontab start="false" schedule=""><!--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=""/>
</localpath>
</plugin>
<plugin name="refreshCDN">
<localpath watch="/data0/htdocs/cms.xoyo.com/site/">
<cdninfo domainname="ccms.chinacache.com" port="" 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>

启动sersync

/usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml

set the system param
execute:echo > /proc/sys/fs/inotify/max_user_watches
execute:echo > /proc/sys/fs/inotify/max_queued_events
parse the command param
option: -d run as a daemon
option: -r rsync all the local files to the remote servers before the sersync work
option: -o config xml name: /usr/local/sersync/confxml.xml
daemon thread num:
parse xml config file
host ip : localhost host port:
will ignore the inotify createFile event
daemon start,sersync run behind the console
use rsync password-file :
user is rsync_backup
passwordfile is /etc/rsync.password
config xml parse success
please set /etc/rsyncd.conf max connections= Manually
sersync working thread = (primary thread) + (fail retry thread) + (daemon sub threads)
Max threads numbers is: = (Thread pool nums) + (Sub threads)
please according your cpu ,use -n param to adjust the cpu rate
------------------------------------------
rsync the directory recursivly to the remote servers once
working please wait...
execute command: cd /www && rsync -az -R --delete ./ rsync_backup@192.168.50.179::backup --password-file=/etc/rsync.password >/dev/null >&
run the sersync:
watch path is: /www

测试是否成功

cd /www && rsync -az -R --delete ./ rsync_backup@192.168.50.179::backup --password-file=/etc/rsync.password
#如果不报错 基本成功
[root@wk media]# >
[root@wk media]# ls [root@wk backup]# ls

 

Rsync数据同步工具及sersync同步工具的更多相关文章

  1. Linux实战教学笔记21:Rsync数据同步工具

    第二十一节 Rsync数据同步工具 标签(空格分隔): Linux实战教学笔记-陈思齐 ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品,允许转载,转载 ...

  2. Linux系统——Rsync数据同步工具

    Rsync的优点及缺点 优点:类似cp命令.scp命令,但rsync为增量复制工具 缺点:针对大文件,效率非常高(打包再比对),针对小文件,效率非常低. Rsync作用 (1)可使本地和远程两台主机之 ...

  3. rsync数据同步工具的配置

    rsync数据同步工具的配置 1. rsync介绍 1.1.什么是rsync rsync是一款开源的快速的,多功能的,可实现全量及增量的本地或远程数据同步备份的优秀工具.Rsync软件适用于 unix ...

  4. 【集群实战】Rsync数据同步工具

    1. Rsync介绍 1.1 什么是Rsync? Rsync是一款开源的,快速的,多功能的,可实现全量及增量的本地或远程数据同步备份的优秀工具.Rsync软件适用于unix/linux/windows ...

  5. 【基础】:Rsync数据同步工具

    第二十一节 Rsync数据同步工具 1.1 Rsync介绍 1.1.1 什么是Rsync? 1.1.2 Rsync简介 1.3 Rsync的特性 1.1.4 Rsync的企业工作场景说明 1.2 Rs ...

  6. Rsync数据同步工具

                                        Rsync数据同步工具 什么是Rsync? Rsync是一款开源的.快速的.多功能的,可以实现全量及增量的本地或原程数据同步备份 ...

  7. rsync数据同步工具应用指南

    Rsync (Remote synchonization)  rsync是Unix下的一款应用软件,它能同步更新两处计算机的文件与目录,并适当利用差分编码以减少数据传输.rsync中一项与其他大部分类 ...

  8. 非常好用的sersync同步工具

    作者:邓聪聪 常用同步工具sync的进阶软件 服务端的配置: uid = rsync gid = rsync port = use chroot = on max connections = time ...

  9. Linux之rsync同步工具介绍+inotify同步

    1.rsync介绍 Rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份的优秀工具.Rsync软件适用于unix/linux/windows等多种操作平台. rsync, ...

随机推荐

  1. redis系列二: linux下安装redis

    下面介绍在Linux环境下,Redis的安装与配置 一. 安装 1.首先上官网下载Redis 压缩包,地址:http://redis.io/download 下载稳定版3.0即可. 2.通过远程管理工 ...

  2. Linux学习笔记(四)Linux常用命令:帮助命令

    一.帮助命令man [man] [命令] 例如: man ls man的级别 man -f [命令]  相当于  whereis [命令] 可查看该命令有几个等级,进而可以通过 man [等级数] [ ...

  3. Linux磁盘及文件系统管理4

    文件系统的使用: 首先要“挂载”:mount命令和umount命令 根据文件系统之外的其它文件系统要想能够被访问,都必须通过“关联”到根文件系统上的某个目录来实现,此关联操作即为“挂载”:此目录即为“ ...

  4. PAT Basic 1072 开学寄语 (20 分)

      下图是上海某校的新学期开学寄语:天将降大任于斯人也,必先删其微博,卸其 QQ,封其电脑,夺其手机,收其 ipad,断其 wifi,使其百无聊赖,然后,净面.理发.整衣,然后思过.读书.锻炼.明智. ...

  5. PAT Basic 1087 有多少不同的值 (20 分)

    当自然数 n 依次取 1.2.3.…….N 时,算式 ⌊ 有多少个不同的值?(注:⌊ 为取整函数,表示不超过 x 的最大自然数,即 x 的整数部分.) 输入格式: 输入给出一个正整数 N(2). 输出 ...

  6. iOS RAC使用补充

    1  延迟执行 [[RACScheduler mainThreadScheduler] afterDelay: schedule:^{ NSLog(@"延迟执行.."); }]; ...

  7. 前端小白页面开发注意事项及小工具(html\css\js)

    技术一直在向前发展.但是有一些是相通的,要找准重点,将80%的时间放在提升基础问题上,余下的20%再去学习框架,库和工具. HTML 1. HTML 属性应当按照以下给出的顺序依次排列,确保代码的易读 ...

  8. vue项目环境的搭建

    首先要明白Vue是基于node的,在公司要使用vue来开发项目的话肯定是要先安装node的,下面是搭建一个最简单的vue项目环境 一 安装node 这个可以去node的官网下载对应版本 安装好之后 c ...

  9. Oracle中dual表的用途

    dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录.我们可以用它来做很多事情,如下: 1.查看当前用户,可以在 SQL Plus中执行下面语句 sele ...

  10. triggerHandler(type, [data])

    triggerHandler(type, [data]) 概述 这个特别的方法将会触发指定的事件类型上所有绑定的处理函数.但不会执行浏览器默认动作,也不会产生事件冒泡. 大理石平台价格 这个方法的行为 ...