您的位置:首页 > 其它

关于rsync的学习总结笔记

2015-01-29 12:34 519 查看
同步工具举例:
两台机器拷贝数据:scp NFS.SFTP,http,samba,rsync drdb(基于文件系统同步)介绍:开源,快速,多功能,可实现全量及增量的本地及远程数据同步备份的优秀工具,适用于linux,unix,windows系统平台。

Rsync基本功能介绍:

Scp 全量拷贝 加密的传输Rsync 可全量和增量 不加密的 可实现删除文件及目录的功能
Rsync仅仅同步大小或者最后修改时间发生变化的文件和目录,当然也可根据权限,属主等属性的变化同步,但是需要制定相应的参数,甚至可以实现制同步一个文件里有变化的部分。所以,可以快速同步备份数据。
一个rsync相当于scp,cp,rm 但是优于他们每一个命令。

(1)特性:

1、 支持拷贝链接、设备文件,属主,属组和权限
2、 排除指定文件或目录同步的功能,相当于打包命令tar的排除功能
3、 可以保证源文件的属性不改变
4、 可实现增量同步,即只同步发生变化的数据,因此传输效率高
5、 使用rcp,rsh,ssh等方式来配合传输文件
6、 通过socket传输文件或者数据(服务端和客户端)
7、 支持匿名或认证的进程传输模式,可方便安全的进行数据备份及镜像
(2)生产场景:(cron+rsync) 1、两台服务器之间的数据同步
2、把所有客户服务器数据同步到备份服务器(生产场景集群架构服务器备份方案)
3、rsync结合inotify的功能做实时的数据同步(rsync+inotify或者sersync+rsync)

rsync的工作方式

1、 单个主机本地之间的数据传输(此时类似cp命令的功能)
2、 借助rcp,ssh等通道来传输数据(此时类似scp命令的功能)
3、 以守护进程(socket)的方式传输数据(这个是rsync自身的重要的功能)

语法: Local: rsync [OPTION...]SRC... [DEST]
1、 rsync为同步的命令
2、 [OPTION……]为同步时的参数选项
3、 SRC为源,即待拷贝的分区、文件或目录等
4、 [DEST]为目的分区、文件或目录等
直接本地同步,相当于cp
例子:rsync /etc/hosts /tmp (cp)
Rsync –r –delete /null/ /data/ (rm)
前面的/null/目录有的,/data/目录必须有,前面的没有的,后面的也没有
Rsync /etc/hosts -e ‘ssh –p 22’ root@172.16.1.218:~
Rsync -avz -e ‘ssh’ /etc/hosts root@172.16.1.220:~(scp)

客户端详细参数

-v 详细模式输出,传输时的进度等信息
-z 压缩传输
-a 归档模式,以递归方式传输文件,保持文件的属性
-r 对子目录以递归模式,即目录下的所有目录都同样传输,小写r
-t 保持文件时间信息
-o 保持文件属主信息
-p 保持文件权限
-g 保持文件属组信息
-P 显示同步的过程及传输时的进度等信息
-e 使用的信道协议
一般生产环境中我们一般用参数 -avz

以守护进程的方式进行文件的传输(daemon)

服务器端配置文件:
#vim/etc/rsyncd.conf
#rsync_config_______________start
#created by oldboy 15:01 2007-6-5
#QQ 31333741 blog:http://oldboy.blog.51cto.com
##rsyncd.conf start##
uid = rsync 属主
gid = rsync 属组
use chroot = no 安全选项
max connections = 200 最大连接数
timeout = 300 超时时间s
pid file = /var/run/rsyncd.pid rsync的进程文件
lock file = /var/run/rsync.lock rsync的程序锁
log file = /var/log/rsyncd.log rsync的日志
[oldboy] 模块
path = /oldboy/ 需要同步下载的的目录
ignore errors 忽略错误
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 用户对应的密码文件
#rsync_config_______________end

启动:rsync --daemon--config=/etc/rsyncd.conf 指定位置文件启动
#mkdir /oldboy -p#useradd rsync –s /sbin/nologin#chown –Rrsync.rsync /oldboy#echo “rsync_backup:oldboy” > /etc/rsync.password#chmod 600 /etc/rsync.password#iptables –F #setenforce 0
客户端配置:
保证有rsync软件即可
#echo“oldboy”> /etc/rsync.password
#chmod 600 /etc/rsync.password
语法:
拉:方法
1、#rsync -avz rsync_backup@10.0.0.7::oldboy /data1 -–password-file=/etc/rsync.password 拉,指定密码文件,无需密码
2、# rsync -avz rsync://rsync_backup@10.0.0.7::oldboy /data1 -–password-file=/etc/rsync.password
推:两种方法
1、#rsync –avz/data1/ rsync_backup@10.0.0.7::oldboy-- password-file=/etc/rsync.password 推,需要调换目录位置
2、#rsync –avz/data1/ rsync://rsync_backup@10.0.0.7::oldboy-- password-file=/etc/rsync.password

实战排错讲解:

问题一:@ERROR: chroot failedrsync error: error startingclient-server protocol (code 5) at main.c(1522) [receiver=3.0.3]原因:服务器端的目录不存在或无权限。创建目录并修正权限可解决问题。 问题二:@ERROR: auth failed on module teersync error: error startingclient-server protocol (code 5) at main.c(1522) [receiver=3.0.3]原因:服务器端该模块(tee)需要验证用户名密码,但客户端没有提供正确的用户名密码,认证失败。提供正确的用户名密码解决此问题。 问题三:@ERROR: Unknown module ‘tee_nonexists’rsync error: error startingclient-server protocol (code 5) at main.c(1522) [receiver=3.0.3]原因:服务器不存在指定模块。提供正确的模块名或在服务器端修改成你要的模块以解决问题。 问题四:password file must not beother-accessiblecontinuing without password filePassword:原因:这是因为rsyncd.pwdrsyncd.secrets的权限不对,应该设置为600。如:chmod600 rsyncd.pwd 问题五:rsync: failed to connect to218.107.243.2: No route to host (113)rsync error: error in socket IO(code 10) at clientserver.c(104) [receiver=2.6.9]原因:对方没开机、防火墙阻挡、通过的网络上有防火墙阻挡,都有可能。关闭防火墙,其实就是把tcp udp的873端口打开。 问题六:rsync error: error startingclient-server protocol (code 5) at main.c(1524) [Receiver=3.0.7]原因:/etc/rsyncd.conf配置文件内容有错误。请正确核对配置文件。 问题七:rsync: chown "" failed:Invalid argument (22)原因:权限无法复制。去掉同步权限的参数即可。(这种情况多见于Linux向Windows的时候) 问题八:@ERROR: daemon security issue --contact admin
rsync error: error starting client-server protocol (code 5) at main.c(1530)[sender=3.0.6]原因:同步的目录里面有软连接文件,需要服务器端的/etc/rsyncd.conf打开use chroot = yes。掠过软连接文件。 总的配置流程及排错实战
---rsyncserver----1.vi /etc/rsyncd.conf(用户,目录,模块,虚拟用户及密码文件)2.创建共享目录 /oldboy3.创建rsync用户,并且授权访问/oldboy4、创建密码文件,复制配置文件里的路径,然后添加密码内容。内容虚拟用户名:密码5、 密码文件的权限6006、 #rsync –daemon然后放入/etc/rc.local7、 如果出错,查看日志 tail /var/log/rsyncd.log------rsyncclient------(多个)1、 密码文件和服务端没有任何关系。命令时--/etc/rsync.password 内容:密码 和服务器端密码一样2、/etc/rsync.password6003、同步:拉:方法
1、#rsync -avz rsync_backup@10.0.0.7::oldboy /data1 -–password-file=/etc/rsync.password 拉,指定密码文件,无需密码
2、# rsync -avz rsync://rsync_backup@10.0.0.7::oldboy /data1 -–password-file=/etc/rsync.password
推:两种方法
1、#rsync –avz/data1/ rsync_backup@10.0.0.7::oldboy-- password-file=/etc/rsync.password 推,需要调换目录位置
2、#rsync –avz/data1/ rsync://rsync_backup@10.0.0.7::oldboy-- password-file=/etc/rsync.password

排错:
1、防火墙和selinux
2、/var/log/rsyncd.log
3、整个部署流程整体考虑排查。
4、操作习惯当做一个大事。
客户端rsync命令排除:
排除不需要同步的文件:
#rsync –avz -–exclude=a/data1/ rsync_backup@10.0.0.7::oldboy-- password-file=/etc/rsync.password 从同步的目录中排除a文件

#rsync –avz -–exclude={a,b}/data1/ rsync_backup@10.0.0.7::oldboy-- password-file=/etc/rsync.password 从同步的目录中排除多个文件
#rsync –avz -–exclude=a-–exclude=b/data1/ rsync_backup@10.0.0.7::oldboy-- password-file=/etc/rsync.password 从同步的目录中排除多个文件

#rsync –avz -–exclude=a–exclude-from=paichu.log/data1/ rsync_backup@10.0.0.7::oldboy-- password-file=/etc/rsync.password 从同步的目录中排除多个文件

服务端rsync命令排除:
#vim /etc/rsyncd.conf
在里面加入参数
*exclude=a b test/oldboy.txt 在服务器端加入忽略的文件参数

无差异同步:--delete 实时同步



*rsync推送企业工作场景:
1、#rsync –avz--delete /data1/ rsync_backup@10.0.0.7::oldboy-- password-file=/etc/rsync.password 服务器推送
备份 --delete风险 一旦服务器端数据丢失,客户端数据也丢失,所以风险很大
本地有啥,远端就有啥,本地没有的远端也要删除。服务器端的目录数据可能丢失

*rsync拉取企业工作场景:
1、代码发布,下载。--delete风险
远端有啥,本地就有啥,远端没有的本地也要删除。本地端的目录数据可能丢失
#rsync –avz –deletersync_backup@10.0.0.7::oldboy/tmp/ --password-file=/etc/rsync.password 客户端拉取

Rsync相关参考资料
http://rsync.samba.org/
man rsync
man rsyncd.conf
http://www.samba.org/ftp/rsync/rsync.html
http://www.samba.org/ftp/rsync/rsync.conf.html

服务器端和客户端参数回顾
服务器端:/etc/rsyncd.conf
*timeout = 300
客户端:
命令格式 rsync [option…]SRC… [DEST]
常用参数:
-v 传输进度显示输出
-z 传输时压缩以提高传输效率 --compress-level=NUM 按照级别压缩
-a 归档模式
-r 对子目录以递归模式
-t 保持文件时间信息
-o 保持文件属主信息
-p 保持文件权限
-g 保持文件属组信息
-P 显示同步的过程及传输时的进度等信息
-D 保持设备文件信息
-l 保留软链接
-e 使用的信道协议

共享多个目录如何实现
在服务器端的/etc/rsyncd.conf文件中增加模块和目录即可

排错必备思想:
1、部署流程熟练
2、原理理解
3、学会看日志,命令行输出,日志输出/var/log/rsyncd.log.
排错能力练习:
1、学会模拟错误,重视日常错误。
2、服务端无共享目录错误 chdir failed
3、取消共享权限 Operation not permitted Permission denied(13)
4、防火墙开启 No route to host(113)
5、服务端密码文件权限放大 auth failed on module data
老男孩推荐工具:http://oldboy.blog.51cto.com/2561410/775056
http://oldboy.blog.51cto.com/2561410/1240412
回顾同步方法:
#scp,NFS,sftp,http,samba,rsync,drbd(基于文件系统的同步)
数据库自身同步机制:
Mysql replication 第三方drbd
Oracle dataguard(物理的,逻辑的)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  同步 rsync