关于rsync的学习总结笔记

同步工具举例:

两台机器拷贝数据: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、把所有客户服务器数据同步到备份服务器(生产场景集群架构服务器备份方案)

    3rsync结合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’ [email protected]:~

Rsync  -avz  -e  ‘ssh’   /etc/hosts   [email protected]:~(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 [email protected]::oldboy  /data1 -password-file=/etc/rsync.password           拉,指定密码文件,无需密码

2、# rsync  -avz rsync://[email protected]::oldboy  /data1 -password-file=/etc/rsync.password          

推:两种方法

1、#rsync avz/data1/ [email protected]::oldboy-- password-file=/etc/rsync.password            推,需要调换目录位置

2、#rsync avz/data1/ rsync://[email protected]::oldboy-- password-file=/etc/rsync.password

 

  • 实战排错讲解:

问题一:

@ERROR: chroot failed

rsync error: error startingclient-server protocol (code 5) at main.c(1522) [receiver=3.0.3]

原因:

服务器端的目录不存在或无权限。创建目录并修正权限可解决问题。

 

问题二:

@ERROR: auth failed on module tee

rsync 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-accessible

continuing without password file

Password:

原因:

这是因为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.创建共享目录   /oldboy

3.创建rsync用户,并且授权访问/oldboy

4、创建密码文件,复制配置文件里的路径,然后添加密码内容。

内容虚拟用户名:密码

5、  密码文件的权限600

6、  #rsync –daemon然后放入/etc/rc.local

7、  如果出错,查看日志  tail /var/log/rsyncd.log

------rsyncclient------(多个)

1、  密码文件和服务端没有任何关系。命令时

--/etc/rsync.password  内容:密码     和服务器端密码一样

2/etc/rsync.password600

3、同步:

拉:方法

1、#rsync  -avz [email protected]::oldboy  /data1 -password-file=/etc/rsync.password           拉,指定密码文件,无需密码

2、# rsync  -avz rsync://[email protected]::oldboy  /data1 -password-file=/etc/rsync.password          

推:两种方法

1、#rsync avz/data1/ [email protected]::oldboy-- password-file=/etc/rsync.password            推,需要调换目录位置

2、#rsync avz/data1/ rsync://[email protected]::oldboy-- password-file=/etc/rsync.password

 

排错:

1、防火墙和selinux

2、/var/log/rsyncd.log

3、整个部署流程整体考虑排查。

4、操作习惯当做一个大事。

 

客户端rsync命令排除:

排除不需要同步的文件:

#rsync avz -exclude=a/data1/ [email protected]::oldboy-- password-file=/etc/rsync.password    从同步的目录中排除a文件

 

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

#rsync avz -exclude=a-exclude=b/data1/ [email protected]::oldboy-- password-file=/etc/rsync.password    从同步的目录中排除多个文件

 

#rsync avz -exclude=aexclude-from=paichu.log/data1/ [email protected]::oldboy-- password-file=/etc/rsync.password    从同步的目录中排除多个文件

 

服务端rsync命令排除:

#vim /etc/rsyncd.conf

在里面加入参数

*exclude=a b test/oldboy.txt               在服务器端加入忽略的文件参数

 

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

关于rsync的学习总结笔记

*rsync推送企业工作场景:

1、#rsync avz--delete /data1/ [email protected]::oldboy-- password-file=/etc/rsync.password               服务器推送

备份  --delete风险  一旦服务器端数据丢失,客户端数据也丢失,所以风险很大

本地有啥,远端就有啥,本地没有的远端也要删除。服务器端的目录数据可能丢失

 

*rsync拉取企业工作场景:

1、代码发布,下载。--delete风险

远端有啥,本地就有啥,远端没有的本地也要删除。本地端的目录数据可能丢失

#rsync avz delete[email protected]::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(物理的,逻辑的)

 



 

      本文转自陈继松 51CTO博客,原文链接:http://blog.51cto.com/chenjisong/1609532,如需转载请自行联系原作者