Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。Rsync软件适用于unix/linux/windows等多种操作系统平台。
下面是官方的英文简单描述:rsync - a fast, versatile, remote (and local) file-copying tool
来自:www.samba.org/ftp/rsync/rsync.html
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,rysnc3.x比对方法,一遍比对差异,一边对差异的部分进行同步。
Rsync的特性如下:
支持拷贝特殊文件如链接文件,设备等。
可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
可以做到爆出原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变-p
可实现增量同步,既能同步发生变化的数据,因此数据传输效率很高,tar -N
可以使用rcp,rsh,ssh等方式来配合传输文件(rsync本身不对数据加密)
可以通过socket(进程方式)传输文件和数据(服务端和客户端)*****
支持匿名的或认证(无需系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像。
两台服务器之间数据同步(cron+rsync)
生产场景集群架构服务器的备份方案cron+rsync
全网服务器数据备份解决方案提出及负责实施200x.03 - 200x.09
1)针对公司重要数据备份混乱状况和领导提出备份全网数据的解决方案。
2)通过本地打包备份,然后rsync结合inotify应用吧全网数据统一备份到一个固定存储服务器,存储服务器上通过脚本检查并报警管理员备份结果
3)定期将IDC机房的数据备份公司的内部服务器,防止机房地震及火灾问题导致数据丢失。
实时备份inotify(sersync)drbd,双写
一般来说,Rsync大致使用三种主要的传输数据的方式。分别是:
1)单个主机本地之间的数据传输(此时类似于cp命令的功能)
2)借助rcp,ssh等通道来传输数据(此时类似于scp命令的功能)
3)以守护进程(socket)的方式传输数据(这个是rsync自身的重要的功能)
以上的集中rsync的工作方式,我们可以通过man rsync帮助或者查看官方的手册。
Local: rsync [OPTION...] SRC... [DEST]
Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
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
Rsync本地传输模式的语法为:
rsync[OPTION...] SRC... [DEST]
语法说明:
1、Rsync为同步的命令
2、[OPTION..]为同步时的参数选项
3、SRC为源,即待拷的分区、文件或目录等、
4、[DEST]为目的分区、文件或目录等
直接本地同步:相当于cp
rsync、etc/hosts/tmp/
-v, --verbose详细模式输出,传输时的进度等信息
-z, --compress传输时进行压缩以提高传输效率,--compress-level=NUM可按级别压缩
-a, --archive归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rtopgDl
-r, --recursive对子目录以递归模式,即目录下的所有目录都同样传输,注意是写r
-t, --times保持文件时间信息
-o,--owner保持文件属主信息
-p,--perms保持文件权限
-g,--group保持文件属组信息
-P --progress显示同步的过程及传输时的进度等洗洗
-D --devices保持设备文件信息
-l, --links保持软链接
-e, --rsh=COMMAND使用的信道协议,指定rsh的shell程序。例如:ssh
--exclude=PATTERN指定排除不需要传输的文件模式
--exclude-from=file(文件名所在的目录文件)
--bwlimit=RATE linmit socket I/O bandwidth
--delete 让目标目录SRC和源目录数据DST一直。
保持同步目录及文件属性:
这里的-avzP相当于-vzrtopgDIP(还多了DI功能),生产环境常用的参数选项为-avzP或-vzrtopgP如果是放入脚本中,也可以把-v和-p去掉。这里的--progress可以用-P代替。
特别说明:以上参数为老男孩老师在多年的生产环境中常用的参数,对于初学读者掌握上面的内容已足够,刚开始学习要抓重点,相关的参数还有很多,需要时可以自行man rsync或者查看参考地址。
avz相当于vzrtopgDI
生产参数:-avz或者用-vzrtopg
更多参数:
1、https://www.samba.org/ftp/rsync/rsync.html
2、man rsync
特别提示:请注意一下量命令的差别:
1)rsync -avz /opt/ /tmp/
2)rsync -avz /opt /tmp/
1、查看rsync安装包
rpm -qa rsync
没有安装的话:yum installrsync -y
2、添加rsync服务的用户,管理本地目录的
useradd -s /sbin/nologin -M rsync
id rsync
3、生成rsyncd.conf配置文件
vi /etc/rsyncd.conf放入事先准备的配置。man rsyncd.conf去查
4、根据rsyncd.conf的auth users配置账户,远程连接的。
并根据secrets file参数生成密码文件
echo "rsync_backup:oldboy">/etc/rsync.password
cat /etc/rsync.password
5、为密码文件配置权限
chmod 600 /etc/rsync.password
ls -l /etc/rsync.password
6、创建共享的目录并授权rsync服务管理
mkdir /backup -p
chown R rsync.rsync /backup
如果没有/backup目录,就会chdir failed.
7、启动rsync服务并检查
rsync --daemon
ps -ef|grep rsync|grep -v grep
lsof -f :873
8、加入开机自启动
echo "/usr/bin/rsync --daemon">>/etc/rc.local
tail -l /etc/rc.local
(over)
排错:
1、输出
2、日志tail /var/log/rsyncd.log
1、生成连接服务器需要的密码文件
echo "oldboy">/etc/rsync.password
cat /etc/rsync.password
2、为面文件配置权限
chmod 600 /etc/rsync.password
ls -l /etc/rsync.password
3、同步文件
推送:
rsync -avz /backup/ [email protected]::backup
--password-file=/etc/rsync.password
rsync -avz /backup/ rsync://[email protected]::backup
--password-file=/etc/rsync.password
拉:
rsync -avz rsync [email protected]::backup/backup/
--password-file=/etc/rsync.password
rsync -avz rsync://[email protected]::backup /backup/
--password-file=/etc/rsync.password
通过远程shell进行数据传输(remote shell mode)
通过远程shell(rcp、ssh等)传输可以分为两种情况,其语法分别为:
拉取Pull: rsync [OPTION...][USER@]HOST:SRC... [DEST]
推送Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
语法说明:
1)Rsync为同步的命令;
2)[OPTION...]为同步时的参数选项;
3)[USER@]HOST...为Rsync同步的远程的连接用户和主机地址
4)SRC为源,即待考的分区、文件或目录等,和HOST之间用一个冒号连接;
1、查看环境
[root@backup ~]# cat /etc/redhat-release
CentOS release 6.7 (Final)
[root@backup ~]# uname -m
x86_64
[root@backup ~]# uname -r
2.6.32-573.el6.x86_64
2、查看命令是否安装
[root@backup ~]# rpm -qa rsync
rsync-3.0.6-12.el6.x86_64
[root@backup ~]# yum list rsync#安装命令
3、daemon默认配置文件设置
[root@backup ~]# vim /etc/rsyncd.conf
#rsync_config______start
#created by wangtian 23:12 2016-4-11
#QQ 976199267
#rsyncd.conf start##
uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[backup]
path = /backup
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
#rsync_config______end
4、参数说明:
1#rsync_config______start
2 #createdby wangtian 23:12 2016-4-11
3 #QQ976199267
4#rsyncd.conf start##
5 uid = rsync :rsync使用的用户。初始uid为-2,通常为nobody。
6 gid =rsync :使用的组(用户所在的组)初始gid为-2,通常为nobody。
7 usechroot = no :如果为true,daemon会在给客户端传输文件前“chroot to the path”。这是rsync安全的一个配置,因为我们大多数都是在内网使用rsync,所以不配也可以。减少攻击的风险
8 maxconnections = 200 :最大连接数(最大客户端推拉数据)默认为0,意为无限制,负值为关闭这个模块
9 timeout =300 :超时的参数。默认为0意为no timeout,建议为300-600(5-10分钟)
10 pid file= /var/run/rsyncd.pid :进程号的文件。rsync daemon启动后将其进程PID写入次文件。如果这个文件已经存在,rsync进程不会覆盖该文件,而是会终止。
11 lock file= /var/run/rsync.lock :锁文件。指定lock文件来支持“max connections”参数,使得总连接数不会超过限制,默认为/car/run/rsyncd.lock
12 log file= /var/log/rsyncd.log :日志,包括错误的日志。不设或者设置错误,rsync会使用syslog输出相关日志信息。
13 [backup] :模块
14 path =/backup :共享的目录
15 ignoreerrors :忽略I/O错误。
16 read only= false :可写。是否允许客户端可以查看可用模块列表。默认为可以。
17 list =false :是否荀�客户端可以查看可用模块列表。默认为可以。
18 hostsallow = 176.16.1.0/24 :允许的网段。指定可以联系的客户端主机名或和IP地址或地址段,默认情况没有此参数,即都可以连接。
19 hostsdeny = 0.0.0.0/32 :拒绝的网段。指定不可以联系的客户端主机名或和IP地址或地址段,默认情况没有此参数,即都可以连接。
20 authusers = rsync_backup :连接的虚拟用户,非系统用户。指定以空格或逗号分隔的用户可以使用哪些模块,用户不需要在本地系统中存在。默认所有用户无密码访问(anonymous rsync)
21 secretsfile = /etc/rsync.password :虚拟用户账号和密码文件。指定用户名和密码存放的文件。格式:用户名:密码。
22#rsync_config______end
5、检查是否有rsync用户
[root@backup ~]# id rsync #检查
id: rsync: No such user
[root@backup ~]# useradd rsync -s/sbin/nologin -M #添加rsync用户
[root@backup ~]# id rsync #检查
uid=500(rsync) gid=500(rsync) groups=500(rsync)
[root@backup ~]# mkdir -p /backup #创建目录
[root@backup ~]# ls -ld /backup/
drwxr-xr-x. 2 root root 4096 Apr 1104:25 /backup/
[root@backup ~]# chown -R rsync.rsync/backup/ #修改属主属组
[root@backup ~]# ls -ld /backup/ #检查
drwxr-xr-x. 2 rsync rsync 4096 Apr 1104:25 /backup/
[root@backup ~]#
6、启动服务
[root@backup ~]# rsync --daemon #以daemon模式启动(守护进程)
[root@backup ~]# ps -ef|grep rsync|grep-v grep #查看daemon进程有没有
root 4122 1 0 04:30 ? 00:00:00 rsync --daemon
[root@backup ~]# netstat -lntup|greprsync #rsync监听的端口:873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 4122/rsync
tcp 0 0 :::873 :::* LISTEN 4122/rsync
[root@backup ~]# ss -lntup|greprsync #也可以用ss查看端口
tcp LISTEN 0 5 :::873 :::* users:(("rsync",4122,5))
tcp LISTEN 0 5 *:873 *:* users:(("rsync",4122,4))
[root@backup ~]#
提示:如果出现873就对了
7、tail /etc/rsyncd.conf文件
[root@backup ~]# tail /etc/rsyncd.conf
[backup]
path = /backup
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
#rsync_config______end
8、创建/etc/rsync.password文件。
[root@backup ~]# echo"rsync_backup:oldboy" >/etc/rsync.password
[root@backup ~]# cat /etc/rsync.password
rsync_backup:oldboy
相当于我们创建一个密码文件,这个文件是被配置文件使用的。格式:用户:密码
这个用户不是系统用户,只是配置文件里的虚拟用户。
9、为了系统安全,我们需要修改文件的权限
[root@backup ~]# chmod 600/etc/rsync.password
[root@backup ~]# ll /etc/rsync.password
-rw-------. 1 root root 20 Apr 11 04:38/etc/rsync.password
为什么使用600呢?因为600只有root可以看。
Rsync服务端配置完成
[root@nfs01 ~]# echo "oldboy">/etc/rsync.password #客户端仅需要密码
[root@nfs01 ~]# chmod 600/etc/rsync.password #修改权限
[root@nfs01 ~]# cat /etc/rsync.password #操作完检查
oldboy
[root@nfs01 ~]# ll /etc/rsync.password
-rw-------. 1 root root 7 Apr 11 04:45/etc/rsync.password
1、创建目录
[root@nfs01 ~]# mkdir /backup -p
[root@nfs01 ~]# ll /backup/
total 0
2、创建文件
[root@nfs01 ~]# cd /backup/
[root@nfs01 backup]# touch stu{1..100}
[root@nfs01 backup]# ls
stu1 stu18 stu27 stu36 stu45 stu54 stu63 stu72 stu81 stu90
stu10 stu19 stu28 stu37 stu46 stu55 stu64 stu73 stu82 stu91
stu100 stu2 stu29 stu38 stu47 stu56 stu65 stu74 stu83 stu92
stu11 stu20 stu3 stu39 stu48 stu57 stu66 stu75 stu84 stu93
stu12 stu21 stu30 stu4 stu49 stu58 stu67 stu76 stu85 stu94
stu13 stu22 stu31 stu40 stu5 stu59 stu68 stu77 stu86 stu95
stu14 stu23 stu32 stu41 stu50 stu6 stu69 stu78 stu87 stu96
stu15 stu24 stu33 stu42 stu51 stu60 stu7 stu79 stu88 stu97
stu16 stu25 stu34 stu43 stu52 stu61 stu70 stu8 stu89 stu98
stu17 stu26 stu35 stu44 stu53 stu62 stu71 stu80 stu9 stu99
daemon模式客户端命令也分为两种:
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
3、检查服务端有没有
[root@backup ~]# ls /backup/
[root@backup ~]#
4、在客户端进行推送
Push: rsync [OPTION...] SRC...[USER@]HOST::DEST
[root@nfs01 ~]# rsync -avz /backup/[email protected]::backup --password-file=/etc/rsync.password
rsync: failed toconnect to 172.16.1.41: No route to host (113)
rsync error: error insocket IO (code 10) at clientserver.c(124) [sender=3.0.6]
出现了报错的情况:网络没有连接通
5、关闭服务端的防火墙
[root@backup ~]#/etc/init.d/iptables off
Usage: iptables{start|stop|reload|restart|condrestart|status|panic|save}
[root@backup ~]# /etc/init.d/iptablesstop
iptables: Setting chains to policyACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
[root@backup ~]#
6、再到客户端进行推送就成功了
[root@nfs01 ~]# rsync -avz /backup/[email protected]::backup --password-file=/etc/rsync.password
sending incremental file list
./
stu1
stu10
stu100
stu11
stu12
...
stu95
stu96
stu97
stu98
stu99
sent 4419 bytes received 1911 bytes 602.86 bytes/sec
total size is 0 speedup is 0.00
7、服务端检查
[root@backup ~]# ls /backup/
stu1 stu18 stu27 stu36 stu45 stu54 stu63 stu72 stu81 stu90
stu10 stu19 stu28 stu37 stu46 stu55 stu64 stu73 stu82 stu91
stu100 stu2 stu29 stu38 stu47 stu56 stu65 stu74 stu83 stu92
stu11 stu20 stu3 stu39 stu48 stu57 stu66 stu75 stu84 stu93
stu12 stu21 stu30 stu4 stu49 stu58 stu67 stu76 stu85 stu94
stu13 stu22 stu31 stu40 stu5 stu59 stu68 stu77 stu86 stu95
stu14 stu23 stu32 stu41 stu50 stu6 stu69 stu78 stu87 stu96
stu15 stu24 stu33 stu42 stu51 stu60 stu7 stu79 stu88 stu97
stu16 stu25 stu34 stu43 stu52 stu61 stu70 stu8 stu89 stu98
stu17 stu26 stu35 stu44 stu53 stu62 stu71 stu80 stu9 stu99
[root@backup ~]#
到这里,就推送成功了。
后面推拉示例:
推:
rsync -avz /backup/ [email protected]::backup
--password-file=/etc/rsync.password
rsync -avz /backup/ rsync://[email protected]::backup
--password-file=/etc/rsync.password
拉:
rsync -avz rsync [email protected]::backup/backup/
--password-file=/etc/rsync.password
rsync -avz rsync://[email protected]::backup /backup/
--password-file=/etc/rsync.password
感谢老男孩老师:http://oldboy.blog.51cto.com/
感谢张导指导:http://www.zyops.com/