Rsync文件同步工具
一、概念
rsync是类unix系统下的数据镜像备份工具——remote sync。一款快速增量备份工具 Remote Sync,远程同步 支持本地复制,或者与其他SSH、rsync主机同步。
特点:
1、可以镜像保存整个目录树和文件系统。
2、可以很容易做到保持原来文件的权限、时间、软硬链接等等。
3、无须特殊权限即可安装。
4、优化的流程,文件传输效率高。
5、可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
6、支持匿名传输。
1. 原理
Rsync 使用所谓的“Rsync 演算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。Rsync server 会打开一个873的服务通道(port),等待对方 Rsync 连接。连接时,Rsync server 会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份。
2. Rsync两种工作方式
1) 传输本地文件
2)传输服服务端和客户端之间的数据
3. 安装配置服务器端(服务器与客户端)
1. yum install rsync(yum安装)
2. 更改rsync的配
3. 置文件vi /etc/rsyncd.conf(如果rsync.conf不存在,则自己创建)
#全局参数
*uid = root #该选项指定当该模块传输文件时守护进程应该具有的uid,配合gid选项使用可以确定哪些可以访问怎么样的文件权限,默认值是“nobody”
*gid = root #该选项指定当该模块传输文件时守护进程应该具有的gid,默认值是“nobody”
log file = /var/log/rsyncd.log #指定 rsync 守护进程的日志文件,而不将日志发送给 syslog。
*use chroot = no
*max connections = 4
*lock file = /var/run/rsync.lock #指定支持 max connections 参数的锁文件。
pid file = /var/run/rsyncd.pid #rsync 的守护进程将其 PID 写入指定的文件。
#模块参数
[test]
comment = this is test #给模块指定一个描述,该描述连同模块名在客户连接得到模块列表时显示给客户
path = /rsync #指定当前模块在rsync服务器上的同步路径,该参数是必须指定的。
ignore errors = yes # 指定 在 rsync 服务器上运行 delete 操作时是否忽略 I/O 错误。一般来说 rsync 在出现 I/O 错误时将将跳过 –delete 操作,以防止因为暂时的资源不足或其它 I/O 错误导致的严重问题。
read only = no #指定是否允许客户上传文件。若为 true 则不允许上传;若为 false 并且服务器目录也具有读写权限则允许上传。
list = yes #指定当客户请求列出可以使用的模块列表时,该模块是否应该被列出。如果设置该选项为 false,可以创建隐藏的模块。
auth users = root # 认证的用户名,rsync的用户
secrets file = /etc/rsyncd.secrets # 密码存放文件(与上面的用户名匹配)
hosts allow=192.168.1.24 # 允许哪些主机访问 *表示都可以 (hosts deny = * # 禁止哪些主机访问)
参数说明(易懂):http://blog.chinaunix.net/uid-20794164-id-1840726.html
参数、命令(易懂):http://blog.sina.com.cn/s/blog_4128ae07010113r5.html
参数、命令说明(全面):http://www.cnblogs.com/hbycool/articles/2159392.html
配置好rsyncd.conf,要创建认证的用户名:密码文件rsyncd.secrets
格式(用户名:密码 例如 root:666)
chmod 600 /etc/rsyncd.secrets(要将权限改为600,不然报错)
启动rsync
rsync -–daemon –config=/etc/rsyncd.conf
可能报错(failed to create pid file /var/run/rsyncd.pid: File exists):这是个认证pid的文件,因为要写入,可能是冲突了,所以删除重建
删除这个文件:rm -rf /var/run/rsyncd.pid
然后再次启动
查看进程:
ps -ef | grep rsync
root 3387 0.0 0.0 114640 552 ? Ss 17:12 0:00 /usr/bin/rsync --daemon
root 3423 0.0 0.0 112656 980 pts/0 S+ 17:14 0:00 grep --color=auto rsync
这就是启动了,然后设置客户端
4. 客户端(服务器与客户端)
1. 安装rsync
2. 同样要创建一个认证密码文件,同样要修改为600权限,内容格式为: password,只需要写密码就可以
3. rsync -vzrtopg --progress --delete --password-file=/etc/rsyncd.secrets root@192.168.1.101::test /rsync(从服务端拉取文件)
4. rsync -vzrtopg --progress --password-file=/etc/rsyncd.secrets /rsync/* root@192.168.1.101::test(向服务器上传文件)
-v表示verbose(详细)
-z表示zip(压缩)
-r表示recursive(递归目录)
-topg是保持文件原有属性如o=owner(属主)、t=times(时间)、p=perms(权限)、 g=group(组)的参数
-H表示保持硬连接
-l:保留软链结
-u:表示只更新源文件比目标时间新的文件
--progress是指显示出详细的进度情况
--delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致。
--password-file :认证密码的文件
root@192.168.1.101::test我的认证用户为root,192.168.1.101是我的服务端ip,test是我服务器配置的模块
/rsync 这是我将服务器上共享的内容,放在客户端的这个文件
-这就完成了基本的文件共享
这是我出现的错误:
1. 前用的服务器与Linux配置的,但是总是报错不成功,最后改为两个虚拟机
2. @ERROR: auth failed on test 这是rsync的test模块配置出问题了,我是认证用户名出错了
3. @ERROR: access denied to test from unknown (192.168.1.24) 是连接的出错了
4. rsync: failed to connect to 192.168.1.42 (192.168.1.42): No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(122) [sender=3.0.9]
需要关闭防火墙或者让防火墙允许,不然报错
5. 还有给文件权限
5. 服务端与客户端双向时时同步
一、原理:
Rsync 是基于rsync算法校验源(SRC)与目标(DEST)之间的差异实现数据同步的。也就是说,当使用rsync工具同步数据时候,只复制源(SRC)发生改变的文件,到目标(DEST),这类似于增量备份。所以rsync同步数据的速度是很快的。但是rsync的传输性能有点差,在海量小文件需要同步时,表现很差劲。因为rsync是基于文件同步的(不是块级别的),在传输之前还要进行校验。
Rsync的工作模式有多中,使用rsync的服务模式来构建:主/从服务器的数据同步。此时rsync工作为守护进程监听在:TCP/873, 能接收客户端的数据同步请求。
二、配置与实现方法:
1、http://blog.csdn.net/adparking/article/details/7636617
2、http://9528du.blog.51cto.com/8979089/1545880/
3、http://blog.sina.com.cn/s/blog_9f4962b10102vqua.html