码迷,mamicode.com
首页 > 其他好文 > 详细

Rsync介绍及配置

时间:2016-07-11 19:36:12      阅读:289      评论:0      收藏:0      [点我收藏+]

标签:rsync   linux   


一、什么是rsync

rsyncremote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。 rsync是用 “rsync 算法提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件,这样其保密性也非常好,另外它还是免费的软件。

1.1rsync 包括如下的一些特性

能更新整个目录和树和文件系统;
  有选择性的保持符号链链、硬链接、文件属于、权限、设备以及时间等;
  对于安装来说,无任何特殊权限要求;
  对于多个文件来说,内部流水线减少文件等待的延时;
  能用rshssh 或直接端口做为传输入端口;
  支持匿名rsync 同步文件,是理想的镜像工具;

工作场景

2.1 两台服务器之间数据拷贝

2.2 定时备份

三种模式

3.1 1种方式

Local: rsync [OPTION...] SRC... [DEST]

rsync -avz/etc/hosts /tmp/                这种情况相当于cp

[root@NFS-SER~]# rsync -avz --delete /dev/null/ /tmp/       我有点你必须有,我没有的你必须没有相当于rm 命令

sending incremental file list

null

 

sent 34 bytes  received 15 bytes  98.00 bytes/sec

total size is 0  speedup is 0.00

[[root@NFS-SER ~]# ll /tmp/

total 0

3.2 2种方式

Access via remote shell:

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

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

[root@LNMP ~]# ll /tmp/

total 0

-rw-------. 1 root root 0 Feb 21 17:28yum.log

[root@LNMP~]# rsync -avzP -e ‘ssh -p22‘ /tmp/ root@10.0.0.100:/tmp        把本地的推送到远端/tmp目录下,注意:如果/tmp后面没有/ 那么推送到只是tmp目录下面的内容,如果加上/变成/tmp/ 那么这个时候的推送就包含整个tmp目录了

The authenticity of host ‘10.0.0.100(10.0.0.100)‘ can‘t be established.

RSA key fingerprint isdb:ce:a8:5a:d6:2b:23:5f:15:70:68:ce:84:38:ef:ef.

Are you sureyou want to continue connecting (yes/no)? y          这里是确认

Please type‘yes‘ or ‘no‘: yes           这里要求输入远端账号的密码

Warning: Permanently added ‘10.0.0.100‘(RSA) to the list of known hosts.

reverse mapping checking getaddrinfo forbogon [10.0.0.100] failed - POSSIBLE BREAK-IN ATTEMPT!

root@10.0.0.100‘s password:

sending incremental file list

./

yum.log

           0 100%    0.00kB/s   0:00:00 (xfer#1, to-check=1/3)

.ICE-unix/

 

sent 114 bytes  received 38 bytes  16.00 bytes/sec

total size is 0  speedup is 0.00

把远端的数据拉回本地

[root@LNMP ~]#rsync -avzP -e ‘ssh -p 22‘root@10.0.0.100:/tmp/ /tmp/           从远端拉回来

reverse mapping checking getaddrinfo forbogon [10.0.0.100] failed - POSSIBLE BREAK-IN ATTEMPT!

root@10.0.0.100‘s password:

receiving incremental file list

./

pull.txt

           5 100%    4.88kB/s   0:00:00 (xfer#1, to-check=2/4)

 

sent 34 bytes  received 146 bytes  51.43 bytes/sec

total size is 5  speedup is 0.03

[root@LNMP ~]# ll /tmp/

total 4

-rw-r--r--. 1 root root 5 Mar  3 03:58 pull.txt

-rw-------. 1 root root 0 Feb 21 17:28yum.log

[root@LNMP ~]# cat /pull.txt

cat: /pull.txt: No such file ordirectory

[root@LNMP ~]# cat /tmp/pull.txt

Pull

3.3 3 种方式

Access via rsync daemon:

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

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

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

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

客户端常用参数

-v, --verbose 详细模式输出 

-q, --quiet 精简输出模式 
-c, --checksum
打开校验开关,强制对文件传输进行校验 
-a, --archive
归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD 
-r, --recursive
对子目录以递归模式处理 
-R, --relative
使用相对路径信息
rsync foo/bar/foo.c remote:/tmp/
Rsync
参数在/tmp目录下创建foo.c文件,而如果使用-R参数:
rsync -R foo/bar/foo.c remote:/tmp/
Rsync
参数会创建文件/tmp/foo/bar/foo.c,也就是会保持完全路径信息。
-b, --backup
创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。 
--backup-dir
将备份文件(~filename)存放在在目录下。 
-suffix=SUFFIX
定义备份文件前缀 
-u, --update
仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件
-l, --links
保留软链结 
-L, --copy-links
想对待常规文件一样处理软链结 
--copy-unsafe-links
仅仅拷贝指向SRC路径目录树以外的链结 
--safe-links
忽略指向SRC路径目录树以外的链结 
-H, --hard-links
保留硬链结 
-p,--perms
保持文件权限 
-o, --owner
保持文件属主信息 
-g, --group
保持文件属组信息 
-D, --devices
保持设备文件信息 
-t,--times
保持文件时间信息 
-S, --sparse
对稀疏文件进行特殊处理以节省DST的空间 
-n, --dry-run
现实哪些文件将被传输 
-W, --whole-file
拷贝文件,不进行增量检测 
-x, --one-file-system
不要跨越文件系统边界 
-B, --block-size=SIZE
检验算法使用的块尺寸,默认是700字节 
-e, --rsh=COMMAND
指定替代rshshell程序 
--rsync-path=PATH
指定远程服务器上的rsync命令所在路径信息 
-C, --cvs-exclude
使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件 
--existing
仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件 
--delete
删除那些DSTSRC没有的文件 
--delete-excluded
同样删除接收端那些被该选项指定排除的文件 
--delete-after
传输结束以后再删除 
--ignore-errors
及时出现IO错误也进行删除 
--max-delete=NUM
最多删除NUM个文件 
--partial
保留那些因故没有完全传输的文件,以是加快随后的再次传输 
--force
强制删除目录,即使不为空 
--numeric-ids
不将数字的用户和组ID匹配为用户名和组名 
--timeout=TIME IP
超时时间,单位为秒 
-I, --ignore-times
不跳过那些有同样的时间和长度的文件 
--size-only
当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间 
--modify-window=NUM
决定文件是否时间相同时使用的时间戳窗口,默认为
-T --temp-dir=DIR
DIR中创建临时文件 
--compare-dest=DIR
同样比较DIR中的文件来决定是否需要备份 
-P
等同于--partial 
--progress
显示备份过程 
-z, --compress
对备份的文件在传输时进行压缩处理 
--exclude=PATTERN
指定排除不需要传输的文件模式 
--include=PATTERN
指定不排除而需要传输的文件模式 
--exclude-from=FILE
排除FILE中指定模式的文件 
--include-from=FILE
不排除FILE指定模式匹配的文件 
--version
打印版本信息 
--address
绑定到特定的地址 
--config=FILE
指定其他的配置文件,不使用默认的rsyncd.conf文件 
--port=PORT
指定其他的rsync服务端口 
--blocking-io
对远程shell使用阻塞IO 
-stats
给出某些文件的传输状态 
--progress
在传输时现实传输过程 
--log-format=FORMAT
指定日志文件格式 
--password-file=FILE
FILE中得到密码 
--bwlimit=KBPS
限制I/O带宽,KBytes per second 
-h, --help
显示帮助信息

rsync配置

5.1 服务器配置

5.1.1建立配置文件

/etc/文件目录下创建一个rsyncd.conf的配置文件,然后写入配置信息:

#Rsyncserver

#Created by kirk

#rsync.conf start#

uid = rsync

gid = rsync

user chroot = no

maxconnections = 200                 并发连接数

timeout = 600                              超时数

pid file =/var/run/rsyncd.pid         进程号放在这个文件

lock file = /var/run/rsync.lock

log file =/var/log/rsyncd.log               日志文件,出问题就来这里看。

igore erros

read only =false                                 可读写

list = false

hosts allow = 10.0.0.0/24

hosts deny = 0.0.0.0/32

auth users = rsync_backup

secrets file = /etc/rsync.password

#######################################

[backup]

comment = www by kirk

path = /backup

5.1.2启动服务:

[root@BACKUP ~]# rsync --daemon

[root@BACKUP ~]# ps -ef|grep rsync|grep-v grep

root       1794     1  0 05:11 ?        00:00:00 rsync --daemon

[root@BACKUP ~]# netstat -lntup|greprsync

tcp        0     0 0.0.0.0:873                0.0.0.0:*                   LISTEN      1794/rsync         

tcp        0     0 :::873                     :::*                        LISTEN      1794/rsync         

[root@BACKUP ~]# lsof -i:873

COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

rsync  1794 root    3u  IPv4 15101      0t0  TCP *:rsync (LISTEN)

rsync  1794 root    5u  IPv6 15102      0t0  TCP *:rsync (LISTEN)

 

5.1.3服务器端配置

[root@BACKUP~]# useradd rsync -s /sbin/nologin -M              建立虚拟账号

[root@BACKUP~]# mkdir /backup       建立备份目录

[root@BACKUP~]# chown -R rsync /backup/          修改备份目录权限,客户端可以推送数据

技术分享技术分享[root@BACKUP ~]#echo "rsync_backup:oldboy" >>/etc/rsync.password 建立密码文件[K1] 

[root@BACKUP ~]# cat /etc/rsync.password

rsync_backup:oldboy  给用户auth users = rsync_backup设定的密码是oldboy

 

 

5.1.4权限修改:

[root@BACKUP~]# chmod 600 /etc/rsync.password                 其他人不可读写,安全

[root@BACKUP ~]# ll /etc/rsync.password

-rw-------. 1 root root 20 Mar  3 05:21 /etc/rsync.password

5.1.5图解:

技术分享

5.1.6加入开机自启动:

[root@BACKUP ~]# echo "rsync--daemon" >>/etc/rc.local

[root@BACKUP ~]# cat /etc/rc.local

#!/bin/sh

#

# This script will be executed *after*all the other init scripts.

# You can put your own initializationstuff in here if you don‘t

# want to do the full Sys V style initstuff.

 

touch /var/lock/subsys/local

>/etc/udev/rules.d/70-persistent-net.rules

rsync --daemon

rsync --daemon

[root@BACKUP ~]#

5.2 客户端配置

5.2.1 创建配置密码文件

[root@NFS-SER ~]# echo"oldboy" >/etc/rsync.password

[root@NFS-SER ~]# chmod 600/etc/rsync.password

5.2.1 测试推送

[root@NFS-SER ~]# rsync -avz /tmp/rsync_backup@10.0.0.88::backup --password-file=/etc/rsync.password

技术分享sendingincremental file list

./

pull.txt

yum.log

.ICE-unix/

 

sent 176 bytes  received 53 bytes  458.00 bytes/sec

total size is 5  speedup is 0.02

技术分享[root@NFS-SER ~]# rsync-aPz /tmp/ rsync_backup@10.0.0.88::backup--password-file=/etc/rsync.password 

sending incremental file list

 

sent 89 bytes  received 9 bytes  196.00 bytes/sec

total size is 5  speedup is 0.05

[root@NFS-SER ~]#

安全优化

6.1 绑定IP或者端口

rsync --daemon --address=10.0.0.100

排错

7.1 服务器端排除

 1、查看rsync服务配置文件路径是否正确,正常默认的路径是/etc/rsyncd.conf

 2、查看配置文件里面host allow ,host deny,允许的Ip网段是否是允许的客户端访问

 3、查看配置文件中的path参数里的路径是否存在,权限是否正确

 4、查看rsync服务是否启动,查看命令为:ps -ef|grep rsync,端口是否存在netstat -lnutp|grep 873 or lsof -i :873

 5、参考iptables防火墙和selinux是否开启允许rsync服务通过,也可以考虑关闭防火墙和selinux

 6、查看服务器rsync配置的文件是否为600的权限,文件格式是否是正确user:passwd,文件路径和配置文件里的secrectfiles参数对应

 7、如果是推送数据,要查看下,配置rsyncd.conf文件中用户是否对模块下有写的权限

 

7.2 客户端排除思路

 1、查看您客户端rysnc配置的密码文件是否一致,权限是否600,密码文件格式是否正确

 2、用Telnet连接rsync服务器ip地址873端口,查看服务是否启动egtelnet 10.0.0.100 873

 3、客户端执行命令是 rysnc -avzP rsync_backup@10.0.0.88::backup/ /test/--password-file=/etc/rsync.password

 

crontab+rsync

1、建立rysnc的密码文件

echo "oldboy">>/etc/rsync.password

cat /etc/rsync.password

ll /etc/rsync.password

chmod 600 /etc/rsync.password

ll /etc/rsync.password

2、创建将要备份的目录,我这里是创建了以ip和时间为目录名字的。

mkdir -p /backup/`ifconfig eth0|awk -F"[ :]+" ‘NR==2 {print $4}‘`_$(date +%F)

[root@LNMP scripts]# ll /backup/

total 4

drwxr-xr-x. 2root root 4096 Mar  4 09:41 10.0.0.101_2016-03-04            目录名字

3、我这里是要备份/cron/root /etc/rc.local。而且我复制他们后也用时间命名:

cp /var/spool/cron/root/backup/10.0.0.101_2016-03-04/cron_root_$(date +%F)

cp /etc/rc.local/backup/10.0.0.101_2016-03-04/rc.loacl_$(date +%F)

[root@LNMP scripts]# ll/backup/10.0.0.101_2016-03-04/

total 8

-rw-------. 1 root root 150 Mar  4 09:42 cron_rsync_2016-03-04

-rwxr-xr-x. 1 root root 315 Mar  4 09:42 rc.loacl_2016-03-04

4、复制上面的命令编写脚本文件:

[root@LNMP scripts]# cat cron_rsync.sh

#!/bin/sh

path=/backup

dir="`ifconfig eth0|awk -F "[:]+" ‘NR==2 {print $4}‘`_$(date +%F)"

mkdir $path/$dir -p &&\

/bin/cp /var/spool/cron/root$path/$dir/cron_rsync_$(date +%F) &&\

/bin/cp /etc/rc.local$path/$dir/rc.loacl_$(date +%F) &&\

rsync -az $path/rsync_backup@10.0.0.88::backup/ --password-file=/etc/rsync.password

5.测试脚本

[root@LAMP scripts]# sh cron_rsync.sh

6、服务器端查看测试命令

[root@BACKUP ~]# ll /backup/

total 16

drwxr-xr-x. 2 rsync rsync 4096 Mar  4 09:4110.0.0.101_2016-03-04

drwxr-xr-x. 2 rsync rsync 4096 Mar  3 16:06 10.0.0.102_2016-03-03

drwxr-xr-x. 2 rsync rsync 4096 Mar  4 10:26 10.0.0.102_2016-03-04

-rw-------. 1 rsync rsync  328 Mar 4 10:33 2016-03-04

7、创建定时任务

[root@LNMP scripts]# crontab -l

########rysnc+crontab#################

00 01 * * */bin/sh /server/scripts/cron_rsync.sh>/dev/null 2>&1           脚本放置路径

优缺点

优点:

1、增量备份、支持scoketdaemon),集中备份(支持推拉,都是以客户端为参照物)

2、远程SHELL通道模式还可以加密(SSH)传输,scoketdaemon)需要加密传输,可以利用vpn服务或ipsec服务

缺点:

1、大量小文件情况下同步,比对时间较长,有的时候,rsync进程可能会停止

2、同步打文件,10G这样的打文件有时也会有问题,出现:中断,未完整同步前,是隐藏文件

rsync长时间传输的限速参数:

--bwlimit=KBPS

 


 [K1]/etc/rsync.password 这个配置文件就是在/etc/rsyncd.conf配置文件中指定的那个密码文件和路径。rsync_backup是指定的用户auth users = rsync_backup

 [K2]这里是参数Pv的对比


本文出自 “系统天下” 博客,请务必保留此出处http://sgk2011.blog.51cto.com/1551358/1825320

Rsync介绍及配置

标签:rsync   linux   

原文地址:http://sgk2011.blog.51cto.com/1551358/1825320

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!