一、什么是rsync
rsync,remote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。 rsync是用 “rsync 算法”提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件,这样其保密性也非常好,另外它还是免费的软件。
rsync 包括如下的一些特性:
能更新整个目录和树和文件系统;
有选择性的保持符号链链、硬链接、文件属于、权限、设备以及时间等;
对于安装来说,无任何特殊权限要求;
对于多个文件来说,内部流水线减少文件等待的延时;
能用rsh、ssh 或直接端口做为传输入端口;
支持匿名rsync 同步文件,是理想的镜像工具;
rsync实现网站的备份,文件的同步,不同系统的文件的同步,如果是windows的话,需要windows版本cwrsync
二、rsync工作方式
1.本地数据传输,类似cp命令
rsync [option] src dest
命令介绍: rsync [同步时的参数选项 ] [待拷贝的文件,目录,分区等] [目的文件,目录,分区等]
2.rcp,ssh等通道传输
rsync [option] 'ssh -p port ' user@host:src dest #把远程主机数据拉取到本地
rsync [option] 'ssh -p port ' dest user@host:src #将本地数据推送到远程服务器
例: rsync -vzrtop --progress -e 'ssh -p 22' /tmp [email protected]:/data
3. 以守护进程的方式传输
1)拉取:
rsync [option] user@host::src dest
rsync [option] rsync://user@host:port/src dest
2)推送:
rsync [option] src user@host::dest
rsync [option] src rsync://user@host:port/dest
*******************现在以守护进程的方式正式部署rsync服务端 *****************************
服务端的IP地址为: 192.168.1.104
1.配置rsyncd.conf
该配置默认是没有的,因此需要我们手动的去创建。rsyncd.conf是rsync服务的默认配置文件
[root@rsync ~]# vi /etc/rsyncd.conf #添加以下配置内容 #rsync config file uid=root gid=root max connections=200 use chroot=no timeout = 300 pid file=/var/run/rsyncd.pid lock file=/var/run/rsync.lock log file=/var/log/rsyncd.log ignore errors read only=false list=false hosts allow=192.168.1.10/24 hosts deny=0.0.0.0/32 auth users=rsyncUser secrets file=/etc/rsync.password [data] path=/data/ #详细参数介绍请参见本文最后 #如果需要多个目录进行数据同步的操作,则可以直接添加一个模块即可 [backup] path =/backup
2.模块目录的创建
根据上面配置中path=/data/目录,首页确定当前根目录下是否存在data目录,如果不存在,则手动创建,并查看当前目录的权限是否为第1步配置文件中uid对应的用户具有可读写权限,不然的话,数据是无法进行读写操作的。
[root@rsync data]# mkdir /data [root@rsync data]# ls -ld /data drwxr-xr-x 2 root root 4096 Nov 7 13:32 /data
3.配置密码文件
需要将第1步配置中,secrets file=/etc/rsync.password 的密码文件生成出来。
[root@rsync ~]# echo 'rsyncUser:123456' >/etc/rsync.password #rsyncUser 是auth users=rsyncUser已经配置好的帐号,123456为密码 #将/etc/rsync.password文件的权限设置为600 [root@rsync ~]# ll /etc/rsync.password -rw------- 1 root root 17 Nov 7 13:39 /etc/rsync.password
4.启动rsync服务
[root@rsync ~]# rsync --daemon #--daemon 表示以守护进程的方式启动服务 #--address 绑定IP地址提供服务 #--config 更改配置文件的路径,而不是默认的/etc/rsyncd.conf #--port 更改其他的端口提供服务,而不是缺省的873端口
5.设置rsync服务开机自启动
[root@rsync ~]# echo '/usr/bin/rsync --daemon' >>/etc/rc.local
###关于重启rsync的组合操作命令
[root@rsync ~]# pkill rsync #关闭rsync服务
[root@rsync ~]# rsync --daemon #启动rsync服务
[root@rsync ~]# ps -ef | grep rsync|grep -v grep #检查rsync是否启动成功
root 2169 1 0 13:53 ? 00:00:00 rsync --daemon
*******************现在以守护进程的方式正式部署rsync客户端 *****************************
客户端的IP地址为: 192.168.1.107 [root@rsync-client ~]# echo '123456' >/etc/rsync.password #在客户端只需要配置密码即可,密码是服务端/etc/rsync.password指定用户对应的密码 [root@rsync-client ~]# cat /etc/rsync.password 123456 [root@rsync-client ~]# ll /etc/rsync.password #检查/etc/rsync.password文件的权限,设置为600 -rw-r--r-- 1 root root 7 Nov 7 13:59 /etc/rsync.password [root@rsync-client ~]# chmod 600 /etc/rsync.password [root@rsync-client ~]# ll /etc/rsync.password -rw------- 1 root root 7 Nov 7 13:59 /etc/rsync.password
至此,客户端配置成功:)
*******************测试数据同步之推送数据与拉取数据 *****************************
1) 将客户端/tmp/www目录推送到服务端
[root@rsync-client ~]# rsync -avz -P /tmp/www [email protected]::data --password-file=/etc/rsync.password sending incremental file list www/ www/index.html 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/2) sent 92 bytes received 31 bytes 246.00 bytes/sec total size is 0 speedup is 0.00
2) 检查服务端是否有客户端推送过来的www整个目录数据
[root@rsync ~]# tree /data
/data
└── www
└── index.html
客户端推送成功:)
2)将服务端的/data数据拉取到客户端
#在服务端/data目录下创建一个testdir测试目录 [root@rsync data]# mkdir testdir [root@rsync data]# ls testdir www #在客户端进行拉取数据操作 [root@rsync-client www]# rsync -avz -P [email protected]::data /tmp/www --password-file=/etc/rsync.password receiving incremental file list ./ testdir/ www/ www/about.html 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=1/5) www/index.html 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=0/5) sent 108 bytes received 262 bytes 740.00 bytes/sec total size is 0 speedup is 0.00 [root@rsync-client www]# ls testdir www
此时testdir目录也被同步在客户端了。。。
*******************rsync中推送数据时--delete参数的使用*****************************
如果我们在执行 rsync -avz -P --delete [email protected]::data /tmp/www --password-file=/etc/rsync.password命令的时候,加上--delete会是什么结果呢?
首页我们把www测试目录里的数据清空,然后执行:
[root@rsync-client www]# rsync -zva -P --delete /tmp/www [email protected]::data/ --password-file=/etc/rsync.password #查看服务端的/data/www/目录下: [root@rsync www]# ll total 0
数据也被清空了,跟客户端的一样。。这是什么情况造成的?
这个主要是--delete参数的作用,它可以使本地的目录和rsync服务端的目录实现完全的同步,也就是说,本地有什么数据远端就有什么数据,本地没有什么数据,远端就必须删除。以确保两者间数据完全一致性。加上该参数会使远端丢失数据的现象,因此这个参数需要谨慎使用。
同样的,在拉取远端数据时加上了--delete参数,即远端有什么数据客户端就会有什么数据,远端没有的数据,在客户端就必须要删除这些数据。如果本地的目录是根目录,那么删除了根目录下的其他目录与文件可就非常危险了。。。
配置文件的参数介绍