rsync数据同步备份
一、rsync简介
(1)rsync是什么?
- rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。
 
(2)rsync作用比较
- 远程拷贝:有点类似ssh的scp命令
 - 本地拷贝:cp
 - 删除:rm
 - rsync可以是一个网络服务(port,socket)
 
(3)rsync工作原理
在同步备份数据时,rsync通过其独特的“quick cheek”算法,仅同步大小或者修改时间发生变化的文件或目录,当然也可以根据权限,属主等属性的变化同步,但需要指定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所以,可以实现快速的同步备份数据。
(4)rsync特性:
- 支持拷贝特殊文件如链接文件,设备等。
 - 可以排除指定文件或目录同步的功能,相当于打包命令tar的排除功能
 - 可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变
 - 可实现增量同步,即只同步发生变化的数据,因此数据传输效率很高
 - 可以使用rcp,rsh,ssh等方式来配合传输文件(rsync本身不对数据加密)
 
二、rsync在企业工作场景
- 两台服务器之间数据同步cron+rsync,不是实时同步
 - rsync结合inotify的功能做实时的数据同步rsync+inotify或sersync
 
第一种工作模式:
rsync客户端命令:
rsync -avz /etc/hosts /tmp/等价于 cp -a /etc/hosts/tmp/
-a 保持文件原来的属性
rsync -avz --delete /null/ /tmp/等价于rm
第二种工作模式:
push:rsync -avzP -e 'ssh -p 21987' /etc/passwd hongpeng01@10.69.112.134:/tmp/
pull:rsync -avzP -e 'ssh -p 21987' hongpeng01@10.69.112.134:/tmp/ /tmp/
第三种工作模式:
需要存放备份文件的机器(10.69.112.77)
1、配置文件
vim/etc/rsyncd.conf
#工作中指定用户(需要指定用户)uid = rsyncgid = rsync#相当于黑洞.出错定位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#模块开始#这个模块对应的是推送目录#模块名称随便起[backup]#需要同步的目录path = /backup/#表示出现错误忽略错误ignore errors#表示网络权限可写(本地控制真正可写)read only = false#这里设置IP或让不让同步list = false#指定允许的网段hosts allow = 10.69.112.0/24#拒绝链接的地址,一下表示没有拒绝的链接。hosts deny = 0.0.0.0/32#不要动的东西(默认情况)#虚拟用户auth users = rsync_backup#虚拟用户的密码文件secrets file = /etc/rsync.password2、创建rsync用户,及共享目录/backup
useradd rsync -s /sbin/nologin
mkdir /backup
chown -R rsync /backup
3、创建用户密码
echo "rsync_backup:hongpeng" > /etc/rsync.password
chmod 600 /etc/rsync.password
4、启动
rsync --daemon
netstat -tunlp | grep rsync
5、加入开机自启动
echo "rsync --daemon" >>/etc/rc.local
修改完配置文件
pkill rsync
rsync --daemon
需要推送备份文件的机器(10.69.112.133)
1.echo "hongpeng" > /etc/rsync.password #推送备份文件只需密码,不需用户
chmod 600 /etc/rsync.password
2.rsync -avz /data/text.txt rsync_backup@10.69.112.77::backup --password-file=/etc/rsync.password
三、rsync优缺点:
优:
- 增量备份同步 支持socket 集中备份
 
缺:
- 大量小文件备份时,时间比较长,有时进程停止。解决:打包同步 drbd(文件系统同步复制block)
 - 同步大文件,10G文件有时有问题,中断。未完成同步前,是隐藏文件。
 
四、生产环境cron+rsync实现svn配置文件同步
10.69.213.12备份服务器
[SVN_repos]
uid = root
gid = root
path = /home/svn
read only = no
hosts allow = 10.69.213.11
10.69.213.11主服务器
cron执行脚本
#!/bin/bash
time1=`date +%s`
time /usr/bin/rsync -avzP --delete --progress /home/svn/SVN_repos root@10.69.213.12::SVN_repos
time2=`date +%s` echo $time1
echo $time2 a=`echo ${time2}-${time1}|bc`
b=`expr ${a} % `
c=`echo ${a}/|bc`
backup_Ymd=`date +%Y-%m-%d-%H`
echo "${c}m ${b}s" d=`echo "${c}m-${b}s"`
echo ${d} > /var/log/svn/${backup_Ymd}-$d.txt
五、inotify+rsync实现文件实时备份
需要备份的机器10.69.112.133
vim backup.sh
#!/bin/bash
inotify=/usr/local/inotify/bin/inotifywait
$inotify -mrq --format '%w%f' -e create,close_write,delete /data | while read file
do
cd / && rsync -az ./data --delete rsync_backup@10.69.112.77::backup/ --password-file=/etc/rsync.password
done
for i in `seq 100`;do touch stu$i;done#在需要备份的目录下创建100个文件
/bin/bash /usr/local/scripts/backup.sh &#后台执行
加入rc.local开机自启
存储备份的机器10.69.112.77
在/data/data目录下能看到133上创建的100个文件
/proc/sys/fs/inotify目录下有三个文件,对inotify机制有一定的限制
- max_user_watches:设置inotifywait或inotifywatch命令可以监控的文件数量
 - max_user_instances:设置每个用户可以运行的inotifywait或inotifywatch命令的进程数
 - max_queued_events:设置inotify实例事件队列可容纳的事件数量
 
优化
echo “50000000” > /proc/sys/fs/inotify/max_user_watches
echo “50000000” > /proc/sys/fs/inotify/max_queued_events
sersync功能:
- 配置文件
 - 真正的守护进程socket
 - 可以对失败文件定时重传
 - 第三方的HTTP接口
 - 默认多线程同步
 
10.69.112.78(推送端)sersync
一.下载sersync源码包
wget http://sersync.googlecode.com/files/sersync2.5.4_64bit_binary_stable_final.tar.gz
二.创建sersync目录结构
# mkdir /usr/local/sersync
# mkdir /usr/local/sersync/conf
# mkdir /usr/local/sersync/bin
# mkdir /usr/local/sersync/log
# tar zxvf sersync2.5_32bit_binary_stable_final.tar.gz
# cd GNU-Linux-x86/
# cp confxml.xml /usr/local/sersync/conf
# cp sersync2 /usr/local/sersync/bin
三.配置sersync
1.首先创建连接rsyncd的密码文件
# echo "hongpeng" >/etc/rsync.password
# chmod 600 /etc/rsync.password
2.配置confxml.xml
# cd /usr/local/sersync/conf
# vim confxml.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
<host hostip="localhost" port="8008"></host>
<debug start="false"/>
<fileSystem xfs="false"/>
<filter start="false">
<exclude expression="(.*)\.svn"></exclude>
<exclude expression="(.*)\.gz"></exclude>
<exclude expression="^info/*"></exclude>
<exclude expression="^static/*"></exclude>
</filter>
<inotify>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="false"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="false"/>
<modify start="false"/>
</inotify> <sersync>
<localpath watch="/data/">
<remote ip="10.69.112.77" name="backup"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<commonParams params="-artuz"/>
<auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
<crontab start="false" schedule="600"><!--600mins-->
<crontabfilter start="false">
<exclude expression="*.php"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>
<plugin start="false" name="command"/>
</sersync> <plugin name="command">
<param prefix="/bin/sh" suffix="" ignoreError="true"/> <!--prefix /opt/tongbu/mmm.sh suffix-->
<filter start="false">
<include expression="(.*)\.php"/>
<include expression="(.*)\.sh"/>
</filter>
</plugin> <plugin name="socket">
<localpath watch="/opt/tongbu">
<deshost ip="192.168.138.20" port="8009"/>
</localpath>
</plugin>
<plugin name="refreshCDN">
<localpath watch="/data0/htdocs/cms.xoyo.com/site/">
<cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
<sendurl base="http://pic.xoyo.com/cms"/>
<regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
</localpath>
</plugin>
</head>
3.创建推送端sersync同步目录
# mkdir /data
4.设置环境变量:
# echo "export PATH=$PATH:/usr/local/sersync/bin/" >> /etc/profile
# source /etc/profile
5.启动sersync
# sersync2 -r -d -o /usr/local/sersync/conf/confxml.xml
注:重启操作如下:
# killall sersync2 && sersync2 -r -d -o /usr/local/sersync/conf/confxml.xml
6.设置开机启动
# echo "sersync2 -r -d -o /usr/local/sersync/conf/confxml.xml" >> /etc/rc.local
这里面有个坑,备份服务器(10.69.112.77)上/data目录的属主属组一定得和/etc/rsyncd.conf里面的uid、gid一样,否则不能同步。
http://liubao0312.blog.51cto.com/2213529/1677586
rsync数据同步备份的更多相关文章
- 搭建中小规模集群之rsync数据同步备份
		
NFS重要问题 1.有关NFS客户端普通用户写NFS的问题. 1)为什么要普通用户写NFS. 2)exports加all_squash. Rsync介绍 什么是Rsync? Rsync是一款开源的.快 ...
 - Linux实战教学笔记21:Rsync数据同步工具
		
第二十一节 Rsync数据同步工具 标签(空格分隔): Linux实战教学笔记-陈思齐 ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品,允许转载,转载 ...
 - Rsync数据同步工具
		
Rsync数据同步工具 什么是Rsync? Rsync是一款开源的.快速的.多功能的,可以实现全量及增量的本地或原程数据同步备份 ...
 - Rsync数据同步服务
		
Rsync数据同步服务 Rsync软件适用与unix/linux/windows等多种操作系统平台 Rsync是一款开源的,快速的,多功能的,可实现全量及增量的本地或远程数据同步备份的优秀工具,可以实 ...
 - rsync 数据同步
		
什么是Rsync? Rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地货远程数据同步备份的优秀工具.适用于unix/linux/windows等多种操作系统平台. Rsync具有可使本地 ...
 - Linux之rsync数据同步服务
		
rsync是一个开源.快速的.多动能的.可以实现全量,增量的本地或远程数据同步备份工具,它适用于多种操作系统平台. 1.rsync的特性(功能) (1)支持拷贝特殊文件(如链接文件.设备文件) (2) ...
 - rsync数据同步工具的配置
		
rsync数据同步工具的配置 1. rsync介绍 1.1.什么是rsync rsync是一款开源的快速的,多功能的,可实现全量及增量的本地或远程数据同步备份的优秀工具.Rsync软件适用于 unix ...
 - 【集群实战】Rsync数据同步工具
		
1. Rsync介绍 1.1 什么是Rsync? Rsync是一款开源的,快速的,多功能的,可实现全量及增量的本地或远程数据同步备份的优秀工具.Rsync软件适用于unix/linux/windows ...
 - 【基础】:Rsync数据同步工具
		
第二十一节 Rsync数据同步工具 1.1 Rsync介绍 1.1.1 什么是Rsync? 1.1.2 Rsync简介 1.3 Rsync的特性 1.1.4 Rsync的企业工作场景说明 1.2 Rs ...
 
随机推荐
- js获取浏览器内核、类型、版本以及系统类型
			
正则表达式: var rsys = /\b(windows|win32|macintosh|mac os x|adobeair|linux|unix)\b/; var rkn = /\b(opera| ...
 - David Camp 微信公众平台开发官方内容拓展版---PHP版本
			
微信公众平台开发(一) 配置接口 微信公众平台开发(二) 微信公众平台示例代码分析 微信公众平台开发(三) 订阅事件(subscribe)处理 微信公众平台开发(四) 简单回复功能开发 微信公众平台开 ...
 - Nginx服务状态监控
			
在Nginx的插件模块中有一个模块stub_status可以监控Nginx的一些状态信息,默认安装可能没有这个模块,手动编译的时候加一下即可. 1. 模块安装 先使用命令查看是否已经安装这个模块: [ ...
 - 摆脱jquery,用自己的JS库实现ajax功能
			
可以将下面的代码保存在一个文件里如:myAjax.js,以后在项目中如果觉得jquery那一套很重,就完全可以使用自己的ajax库,不用担心性能和兼容性! /** * 创建ajax请求对象 * @re ...
 - 解决:PADS导入.DXF结构图出现坐标超出范围问题
			
现象: 原因: PCB尺寸是有限的,PADS中对于坐标大小有所限制,但AUTO CAD中的坐标却是无限制的. 解决方法: 1.在AUTO中使用M命令,将绘制的结构图移动至原点: 2.在AUTO中使用W ...
 - CF724B. Batch Sort[枚举]
			
B. Batch Sort time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
 - <<MySchool数据库设计优化>>  内部测试
			
1) 在SQL Server 中,为数据库表建立索引能够( C ). A. 防止非法的删除操作 B. 防止非法的插入操作 C. 提高查询性能 D. 节约数据库的磁盘空间 解析:索引的作用是通过使用索引 ...
 - 嵌入式Linux驱动学习之路(二十)USB设备驱动
			
USB在接入系统的时候,以0的设备ID和主机通信,然后由主机为其分配新的ID. 在主机端,D+和D-都是下拉接地的.而设备端的D-接上拉时,表明此设备为高速设备:12M/s. D+接上拉时则是全速设备 ...
 - BZOJ1081[SCOI2005]超级格雷码
			
Description 著名的格雷码是指2n个不同n位二进制数(即0~2n-1,不足n位在前补零)的一个排列,这个排列满足相邻的两个二进制数的n位数字中最多只有一个数字不同(例如003和001就有一个 ...
 - Intellij Idea中定制getter setter的模板
			
Alt + Ins, 调出快捷菜单后选择 Getter and Setter, 在对话框里, 选择对应的template, 右侧点开后, 可以新建自己的模板并编辑 将getter和setter都生成到 ...