Linux下的Rsync数据同步服务
Rsync简介:
Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。Rsync使用所谓的“Rsync算法”来使本地和远 程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快
Rsync支持大多数的类Unix系统,无论是Linux、Solaris还是BSD上都经过了良好的测试Rsync英文全称Remote synchronization,从软件的名称就可以看出来,Rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像,远程备份的功能。从同步数据的性能及效率上,Rsync工具更胜一筹。
此外,它在windows平台下也有相应的版本,如cwRsync和Sync2NAS等工具
- 一个rsync想当于scp,cp,rm,但还是优于他们每个命令.传统的scp工具拷贝命令,每次都是完整的拷贝,而rsync除了完整拷贝外,还可以进行增量拷贝.
- 在同步备份数据时,默认情况下,rsync通过独特算法,
- 它仅同步大小或最后修改时间发生变化的文件或目录.
- 也可以根据权限,属主等变化同步,但需要指定相应的参数.
- 甚至可以实现只同步一个文件里有变化的内容部分.
- rsync+crontab来实现定时增量传输保持文件一致。
原理:
Rsync本来是用于替代rcp的一个工具,目前由rsync.samba.org维护,所以rsync.conf文件的格式类似于samba的主配 置文件;Rsync可以通过rsh或ssh使用,也能以daemon模式去运行
rsync采用多种算法:
- 分块Checksum算法: 通过该算法快速鉴别文件的不同
- 传输算法: 同步目标端会把fileDst的一个checksum列表传给同步源,这个列表里包括了三个东西,rolling checksum(32bits),md5 checksume(128bits),文件块编号。同步源机器拿到了这个列表后,会对fileSrc做同样的checksum,然后和fileDst的checksum做对比,这样就知道哪些文件块改变了
- checksum查找算法
- 比对算法
在以daemon方式运行时Rsync server会打开一个873 端口,等待客户端去连接。连接时,Rsync server会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,以后则就只需进行增量备份
功能:
类似于 cp 命令 -- 实现本地备份传输数据
类似于scp 命令 -- 远程备份传输数据
类似于 rm 命令 -- 实现无差异同步备份
类似于 ls 命令 -- 本地文件信息查看
Linux下rsync(以守护进程的socke方式传输数据)的安装搭建
- 使用yum安装该软件:命令: yum -y install rsync (前提yum和网络良好),服务器端和客户端都需要安装,
- 检验安装是否成功,使用: rpm -qa |grep rsync;(可以看到安装的rpm包)
- 首先对服务器端进行配置,修改配置文件,在/etc/rsyncd.conf
- 个参数意义:
# 用户 uid = root # 组 gid = root # 程序安全设置 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 ########################################## 创建共享目录及添加rsync程序用户: 启动服务:rsync --daemon 将A-Server上的/backup文件夹更改属主rsync 创建rsync虚拟账户名和密码 将账户密码文件的权限设置为600(必须否则失败) [backup] # 使用目录 path = /backup/ # 有错误时忽略 ignore errors # 可读可写(true或false) read only = false # 阻止远程列表(不让通过远程方式看服务端有啥) list=false # 允许IP hosts allow = 192.168.197.0/24 # 禁止IP hosts deny = 0.0.0.0/32 # 虚拟用户 auth users = rsync_backup # 存放用户和密码的文件 secrets file = /etc/rsync.password |
6.创建rsync用户,使用命令: useradd -s /sbin/nologin -M rsync
创数据备份存储目录,目录属主,属组修改rsync用户.: chown -R rsync:rsync /backup/
7. 创建认证用户密码文件: echo “rsync_backup:123456” >>/etc/rsync.password
修改权限为600: chmod 600 /etc/rsync.password.
- 启动rsync服务.使用: rsync-daemon命令 (关闭命令是pkill rsync)至此服务器端配置结束.
- 以下配置客户端:
- 安装软件,创建认证文件,客户端的认证文件只需要有密码就可以
- echo “123456” >> /etc/rsync.password; chmod 600 /etc/rsync.password.然后就可以实现数据的传输,
- 实现传输: #将client端的指定目录内容推送到server端
这里可能会报错,:
rsync: failed to connect No route to host
rsync: failed to connect to 192.168.1.10: No route to host (113) rsync error: error in socket IO (code 10) at clientserver.c(104) [receiver=3.0.6]
- 一般是因为防火墙没有设置,需要将873端口开放:
- 在iptables 中开放该端口,语句如下:iptables -I INPUT -p tcp –dport 873 -j ACCEPT
- rsync默认端口873,其实就是把tcp udp的873端口打开。
- 或者:报错如下:.
- 这个是配置文件里面没有加fake super = yes 在以前的版本里面不需要,现在版本需要,在/etc/rsyncd.conf 文件里面添加即可解决。需要重启服务端的服务
- 然后重新测试,出现如上图的成功发送回显,则配置成功.
- 附上常见错误原因: