标签:rsync
1.1 Rsync介绍
1.1.1 什么是Rsync?
Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步及备份的优秀工具。Rsync软件使用与Unix/Linux/windows等多种操作系统平台。
1.2 Rsync简介
Rsync全称为Remote Rynchronization,从软件的名称就可以看出来,Rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能类似SSH自带的SCP命令,但又优于SCP命令的功能,SCP每次都是全量拷贝,而Rsync可以增量拷贝(但,SCP是加密的)。当然,Rsync还可以在本地主机的不同分区或目录之间全量及增量的复制数据,这又类似cp命令,但同样也由于cp命令,cp每次都是全量拷贝,而rsync可以增量拷贝。利用Rsync还可以实现删除文件和目录的功能,这又相当于rm命令!
在同步备份数据时,默认情况下,Rsync通过其独特的“quick check”算法,它仅同步大小或者最后修改时间发生变化的文件或目录,当然也可根据权限,属主等属性的变化同步,但需要指定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所以,可以实现快速的同步备份数据。
1.1.3 Rsync的特性
支持拷贝特殊文件,如链接文件,设备文件等
可以排除指定文件或目录同步的功能,相当于打包命令tar的排除功能
可以做到保持源文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变-p
可实现增量同步,既只同步发生变化的数据,因此数据传输效率很高
可以使用rcp,rsh,ssh等方式来配合传输文件(rsync本身不对数据加密)
可以通过socket(进程当时)传输文件和数据(服务端和客户端)
支持匿名的或认证(无需系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像
1.1.4 Rsync的企业工作场景说明
企业需求:
两台服务之间同步数据
客户服务器数据同步到备份服务器
rsync+inotify或rsync+sersync进行增量备份,inotify和sersync检查文件差异,rsync进行备份
1.1.5 Rsync的工作方式
Rsync大致使用三种主要的传输数据的方式,分别为:
单个主机本地之间的数据传输(此时类似于CP命令的功能)
借助rcp,ssh等通道来传输数据(此时类似于SCP命令的功能)
以守护进程(socket)的方式传输数据(这个是rsync自身的重要功能)
以上的几种rsync的工作方式,可以通过man rsync帮助或者查看官方手册获得。
2.1.1 本地数据传输模式(Local-Only mode)
Rsync本地传输模式的语法为:
Local: rsync [OPTION...] SRC...[DEST]
语法说明:
Rsync为同步的命令;
[OPTION……]为同步时的参数选项;
SRC为源,即待拷的分区、文件或目录等;
[DEST]为目的分区、文件或目录等;
实例1:把系统的hosts文件同步到/tmp目录
[root@lab-1-C6~]# rsync /etc/hosts /tmp [root@lab-1-C6~]# ll /tmp -rw-r--r--.1 root root 176 Jan 9 16:34 hosts [root@lab-1-C6~]# rsync -avz /etc/hosts /tmp sendingincremental file list hosts sent 142bytes received 31 bytes 346.00 bytes/sec total sizeis 176 speedup is 1.02
实例2:删除/tmp目录下的内容
[root@lab-1-C6~]# mkdir /null [root@lab-1-C6~]# rsync -r --delete /null/ /tmp/ #将/null里面的内容复制到/tmp目录下 [root@lab-1-C6~]# ll /tmp total 0
2.1.2借助SSH通道在不同主机之间传输数据
[szk@lab-1-C6~]$ rsync -avz /etc/hosts -e ‘ssh -p 60522‘ szk@192.168.37.102:~ sendingincremental file list hosts sent 149bytes received 31 bytes 3.50 bytes/sec total sizeis 183 speedup is 1.02 [szk@lab-2-C6~]$ ll 总用量 8 -rw-r--r--.1 szk szk 183 1月 9 16:53 hosts [szk@lab-1-C6~]$ rsync -avz -e ‘ssh -p 60522‘szk@192.168.37.102:~/hosts /tmp receivingincremental file list hosts sent 30bytes received 165 bytes 3.79 bytes/sec total sizeis 183 speedup is 0.94 [szk@lab-1-C6~]$ ll /tmp total 4 -rw-r--r--.1 szk szk 183 Jan 9 16:53 hosts
2.1.3以守护进程(socket)的方式传输数据
======================服务端配置 /etc/rsyncd.conf rsync服务端配置文件,需手工创建 [root@lab-1-C6~]# cat /etc/rsyncd.conf uid = rsync gid = rsync use chroot= no maxconnections = 200 timeout =300 pid file =/var/run/rsyncd.pid lock file =/var/run/rsync.lock log file =/var/log/rsyncd.log [szk] path =/szk/ ignoreerrors read only =false list =false hoses allow= 192.168.37.0/24 hosts deny= 0.0.0.0/32 auth users= rsync_backup secretsfile = /etc/rsync.password [root@lab-1-C6~]# rsync --daemon #以daemon模式启动 [root@lab-1-C6~]#echo “/usr/bin/rsync --daemon” >>/etc/rc.local [root@lab-1-C6~]# netstat -lntup | grep 873 tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 1077/rsync tcp 0 0 :::873 :::* [root@lab-1-C6~]# cat /var/log/rsyncd.log #查看rsync报错日志 2016/01/1314:34:11 [1077] rsyncd version 3.0.6 starting, listening on port 873 2016/01/1314:34:25 [1081] rsync: failed to create pid file /var/run/rsyncd.pid: Fileexists (17) 2016/01/1314:34:25 [1081] rsync error: error in file IO (code 11) at clientserver.c(985)[receiver=3.0.6 [root@lab-1-C6~]# mkdir /szk [root@lab-1-C6~]# useradd rsync -s /bin/nologin [root@lab-1-C6~]# chown -R rsync.rsync /szk [root@lab-1-C6~]# echo "rsync_backup:szk" >/etc/rsync.password #设置rsync虚拟用户的密码 [root@lab-1-C6~]# chmod 600 /etc/rsync.password [root@lab-1-C6~]# /etc/init.d/iptables status iptables:Firewall is not running. [root@lab-1-C6~]# getenforce Permissive =====================客户端配置 [root@lab-2-C6~]# rpm -qa rsync rsync-3.0.6-9.el6_4.1.x86_64 [root@lab-2-C6~]# echo "szk" >/etc/rsync.password [root@lab-2-C6~]# chmod 600 /etc/rsync.password [root@lab-2-C6~]# cat /etc/rsync.password szk [root@lab-2-C6szk]# rsync -avz rsync_backup@192.168.37.101::szk /szk--password-file=/etc/rsync.password receivingincremental file list #拉 sent 61bytes received 163 bytes 448.00 bytes/sec total sizeis 8443214 speedup is 37692.92 [root@lab-2-C6szk]# touch {1..3} [root@lab-2-C6szk]# rsync -avz /szk/ rsync://rsync_backup@192.168.37.101/szk--password-file=/etc/rsync.password sendingincremental file list #推 ./ 1 2 3 sent 211bytes received 68 bytes 558.00 bytes/sec total sizeis 8443214 speedup is 30262.42
相关错误:
1. 认证失败
@ERROR:auth failed on module szk
rsyncerror: error starting client-server protocol (code 5) at main.c(1503)[receiver=3.0.6]
问题为:服务端配置文件与密码文件路径或文件名不匹配
2.2.1 Rsync命令同步参数选项
rsync [OPTION...] SRC... [DEST]
-v 详细模式输出,传输时的进度等信息
-z 传输时进行压缩以提高传输效率
-a 归档模式,表示以递归方式传输文件,并保持所有文件属性
-r 对子目录以递归模式
-t 保持文件时间信息
-o 保持文件属主信息
-g 保持文件属组信息
-p 保持文件权限
-P 显示同步的过程及传输时的进度等信息
-D 保持设备文件信息
-l 保留软链接
-e --rsh=COMMAND 使用的信道协议,指定替代rsh的shell程序
--exclude 排除指定文件
--exclude-from=file 排除file文件中指定的文件
--bwlimit=rate 限速
总结:
服务端
vim /etc/rsyncd.conf (用户,目录,模块,虚拟用户,密码文件)
创建共享目录 /szk
创建rsync用户,并且授权访问/szk
创建密码文件,复制配置文件里的路径,然后添加密码内容(虚拟用户名-密码)
密码文件权限600
rsync --daemon 然后放入/etc/rc.local,开机启动
tail /var/log/rsyncd.log ,查看日志
客户端
密码文件和服务端没任何关系
--password-file=/etc/rsync.password 内容:密码 2. /etc/rsync.password 600 3. 同步 拉:rsync -avzrsync_backup@192.168.37.101::szk /szk --password-file=/etc/rsync.password 推:rsync -avz /szk/rsync://rsync_backup@192.168.37.101/szk --password-file=/etc/rsync.password
排错:
防火墙和selinux
日志/var/log/rsyncd.log
整个部署流程整体考虑排查
2.2.2客户端排除打包
--exclude=PATTERN exclude files matching PATTERN --exclude-from=FILE read exclude patterns from FILE 2.2.2.1 排除单个文件 [root@lab-2-C6szk]# rsync -avz --exclude=a /szk/ rsync://rsync_backup@192.168.37.101/szk --password-file=/etc/rsync.password sendingincremental file list ./ 1 2 3 b c d etc.tar.gz sent7641094 bytes received 144 bytes 5094158.67 bytes/sec total sizeis 8546712 speedup is 1.12 [root@lab-1-C6szk]# ll total 8348 -rw-r--r--.1 rsync rsync 0 Jan 13 16:19 1 -rw-r--r--.1 rsync rsync 0 Jan 13 16:19 2 -rw-r--r--.1 rsync rsync 0 Jan 13 16:19 3 -rw-r--r--.1 rsync rsync 0 Jan 13 15:42 b -rw-r--r--.1 rsync rsync 0 Jan 13 15:42 c -rw-r--r--.1 rsync rsync 0 Jan 13 15:42 d -rw-r--r--.1 rsync rsync 8546712 Jan 13 20: 2.2.2.2 排除多个 --exclude={1..3} [root@lab-2-C6szk]# rsync -avz --exclude-from=paichu.log /szk/ rsync://rsync_backup@192.168.37.101/szk--password-file=/etc/rsync.password sendingincremental file list ./ a b c d etc.tar.gz paichu.log sent7641067 bytes received 125 bytes 15282384.00 bytes/sec total sizeis 8546718 speedup is 1.12 [root@lab-2-C6szk]# cat paichu.log 1 2 3 [root@lab-1-C6szk]# ll total 8352 -rw-r--r--.1 rsync rsync 0 Jan 13 15:42 a -rw-r--r--.1 rsync rsync 0 Jan 13 15:42 b -rw-r--r--.1 rsync rsync 0 Jan 13 15:42 c -rw-r--r--.1 rsync rsync 0 Jan 13 15:42 d -rw-r--r--.1 rsync rsync 8546712 Jan 13 20:28 etc.tar.gz -rw-r--r--.1 rsync rsync 6 Jan 14 13:18 paichu.log
2.2.3服务端排除打包(不灵活)
[root@lab-1-C6szk]# echo "exclude=a b" >> /etc/rsyncd.conf [root@lab-1-C6szk]# kill “/var/run/rsyncd.pid” [root@lab-1-C6~]# rsync --daemon [root@lab-2-C6szk]# rsync -avz rsync://rsync_backup@192.168.37.101/szk /szk --password-file=/etc/rsync.password receivingincremental file list ./ 1 2 3 c d etc.tar.gz paichu.log sent 197bytes received 7641196 bytes 5094262.00 bytes/sec total sizeis 8546718 speedup is 1.12
2.2.4无差异双向同步
一般是有需要两台服务器之间,必须要求数据一致,且实时性又不是很高的情况,如两台负载均衡下面Web服务器之间的同步,或者高可用双机配置之间的同步等,rsync无差异同步非常的危险,而且,有很多的替代方案,因此,生产场景没有特殊的需求,应避免使用。
备份风险:本地有啥,远端就有啥,本地没有的远端有也要删除。服务器端的目录数据可能丢失
2.2.5多目录共享实战
[root@lab-1-C6data]# tail -5 /etc/rsyncd.conf secretsfile = /etc/rsync.password [szk] path =/szk/ [data] path =/data/
2.2.6常见错误
服务端无共享目录错误
没有目录共享权限
防火墙或Selinux未放行
服务端密码文件权限放大错误
2.2.7 本地打包脚本
#!/bin/bash ip=$(ifconfigeth1 | sed -n ‘s#^.*addr:\(.*\) B.*$#\1#gp‘) [ ! -d/backup/$ip ] && mkdir -p /backup/$ip cd/backup/$ip &&tar zcfbak_&(date +%F).tar.gz /var/www/html/ /app/logs/ /sh /var/spool/cron/ /etc/ rsync -az/backup/ rsync-backup@192.168.37.1::backup/ --password-file=/etc/rsync.password find/backup -type f -name "*.tar.gz"
2.2.8错误小结
[root@lab-1-C6~]# rsync -avz /etc/hosts -e ‘ssh -p 60522‘ root@192.168.1.202:~ rsync:Failed to exec ssh: No such file or directory (2) rsyncerror: error in IPC code (code 14) at pipe.c(84) [sender=3.0.6] rsync:connection unexpectedly closed (0 bytes received so far) [sender] rsyncerror: error in rsync protocol data stream (code 12) at io.c(600)[sender=3.0.6] 解决方法: yum install-y openssh-clients
本文出自 “抚琴煮酒” 博客,请务必保留此出处http://szk5043.blog.51cto.com/8456440/1755464
标签:rsync
原文地址:http://szk5043.blog.51cto.com/8456440/1755464