同步工具rsync

一、rsync的概述
rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync。rsync是Linux系统下的文件同步和数据传输工具,它采用“rsync”算法,可以将一个客户机和远程文件服务器之间的文件同步,也可以在本地系统中将数据从一个分区备份到另一个分区上。如果rsync在备份过程中出现了数据传输中断,恢复后可以继续传输不一致的部分。rsync可以执行完整备份或增量备份。它的主要特点有:
1.可以镜像保存整个目录树和文件系统;
2.可以很容易做到保持原来文件的权限、时间、软硬链接;无须特殊权限即可安装;
3.可以增量同步数据,文件传输效率高,因而同步时间短;
4.可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接;
5.支持匿名传输,以方便进行网站镜象等;
6.加密传输数据,保证了数据的安全性;
-v是“--verbose”,即详细模式输出; -z表示“--compress”,即传输时对数据进行压缩处理;
-r表示“--recursive”,即对子目录以递归的模式处理;-t是“--time”,即保持文件时间信息;
-o表示“owner”,用来保持文件属主信息;-p是“perms”,用来保持文件权限;
-g是“group”,用来保持文件的属组信息;
--progress用于显示数据镜像同步的过程;
--delete选项指定以rsync服务器端为基础进行数据镜像同步,也就是要保持rsync服务器端目录与客户端目录的完全一致;
--exclude选项用于排除不需要传输的文件类型;
rsync的优点与不足
与传统的cp、tar备份方式对比,rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如,定期地备份文件服务器数据到远端服务器,对本地磁盘定期进行数据镜像等。
但是随着系统规模的不断扩大,rsync的缺点逐渐被暴露了出来。首先,rsync做数据同步时,需要扫描所有文件后进行对比,然后进行差量传输。如果文件很大,扫面文件是非常耗时的,而且发生变化的文件往往是很少一部分,因此rsync是非常低效的方式。其次,rsync不能实时监测、同步数据,虽然它可以通过Linux守护进程的方式触发同步,但是两次触发动作一定会有时间差,可能导致服务器端和客户端数据出现不一致
在对rsync服务器配置结束以后,下一步就需要在客户端发出rsync命令来实现将服务器端的文件备份到客户端来。rsync是一个功能非常强大的工具,其命令也有很多功能特色选项,我们下面就对它的选项一一进行分析说明。
Rsync的命令格式可以为以下六种:
对应于以上六种命令格式,rsync有六种不同的工作模式:
  1)拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。如:rsync -a /data /backup
  2)使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。如:rsync -avz *.c foo:src
  3)使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。如:rsync -avz foo:src/bar /data
  4)从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。如:rsync -av root@172.16.78.192::www /databack
  5)从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。如:rsync -av /databack root@172.16.78.192::www
  6)列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。如:rsync -v rsync://172.16.78.192/www
从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。如:rsync -av /databack root@192.168.78.192::www
列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。如:rsync -v rsync://192.168.78.192/www
# rsync -auvz --progress --delete --bwlimit=1000 远程文件 本地文件 //限制为1000kBytes/s
# rsync -auvz --progress --delete --bwlimit=2048 远程文件 本地文件 //限制为2M/s
--------scp同步时的限流(-l参数)--------
# scp -l 1024 file root@192.168.1.100  //限制为1M Bytes/s

搭建rsync服务器

cd /usr/local
wget https://download.samba.org/pub/rsync/rsync-3.1.2.tar.gz
tar -zxvf rsync-3.1.2.tar.gz 
cd rsync-3.1.2
./configure --prefix=/usr/local/rsync --disable-ipv6
make
make install

ln -s /usr/local/rsync/bin/rsync /usr/local/bin/rsync
vim /usr/local/rsync/rsyncd.conf
1. pid file = /var/run/rsyncd.pid 
2. port = 873 
3. pid = root 
4. gid = root 
5. use chroot = no 
6. max connections = 200 
7. timeout 600 
8. lock file = /var/run/rsyncd.lock 
9. log file = /var/run/rsyncd.log 
10. secrets file = /usr/local/rsync/rsyncd.secrets 
11. motd file = /etc/rsyncd.motd 
12. 
13. [test] 
14. path = /test/ 
15. ignore errors 
16. read only = true 
17. list = false 
18. hosts allow = * 
19. #hosts deny = 0.0.0.0/32 
20. auth users root #该用户系统中存在且对后面指定的备份目录拥有权限 
21. comment = ocpyang test 
vi /usr/local/rsync/rsyncd.motd
1. ++++++++++++++++++++++++++++++++++++ 
2. Wlecome to ocpyang rsync services 
3. ++++++++++++++++++++++++++++++++++++ 
vi /usr/local/rsync/rsyncd.secrets (--指定rsync访问的密码,密码不需要和系统账号密码相同)
root:tiange1003
ln -s /usr/local/rsync/rsyncd.conf /etc/rsyncd.conf
ln -s /usr/local/rsync/rsyncd.motd /etc/rsyncd.motd
ln -s /usr/local/rsync/rsyncd.secrets /etc/rsyncd.secrets
chmod 600 /usr/local/rsync/rsyncd.secrets 
chown root:root /usr/local/rsync/rsyncd.secrets
/usr/bin/rsync --daemon --config=/etc/rsyncd.conf (启动rsync)

echo "/usr/bin/rsync --daemon --config=/etc/rsyncd.conf" >> /etc/rc.d/rc.local
cat /etc/rc.d/rc.local

至此服务器的配置已经完成,可以在服务器端的的根目录下创建test目录,并且在目录里面创建1.sh文件

客户端的配置,先编译安装好rsync
vim /etc/rsyncd.secrets (在这个目录下将刚才在服务器端创建的密码填写到这个里面)
tiange1003
chmod 600 /etc/rsyncd.secrets

rsync -vzrtopg --progress --delete root@192.168.40.129::test/2.sh /tmp/ (在客户端执行这个命令将服务器端/test目录下2.sh这个文件复制到客户端的/tmp目录下)
rsync -vzrtopg --progress --delete root@192.168.40.129::test /ocpyang/ --password-file=/etc/rsyncd.pwd

至此rsync服务器搭建成功,也验证成功
下来新建同步脚本

vim /rsync.sh
#!/bin/bash
rsync -vzrtopg --progress --delete root@192.168.40.129::test/2.sh /tmp/ 
rsync -vzrtopg --progress --delete root@192.168.40.129::test /ocpyang/ --password-file=/etc/rsyncd.pwd

手动同步

cd /
./rsync.sh

自动同步(每隔五分钟同步一次)

#crontab -e
0,5 * * * * /rsync.sh

 

posted @ 2017-09-22 21:34  小王同学-TT  阅读(144)  评论(0编辑  收藏  举报