使用rsync同步网络备份

简介:
一.  简介 
rsync常用的备份工具, 它目前是由 rsync.samba.org 维护. 
rsync使用所谓的"rsync算法",提供一个非常快速的档案传输方法, 使local和远端二部主机之间的档案达到同步,它主要是传送二个档案的异动部份,而非每次都整份传送, 因此速度相当地快.  
rsync它可以搭配rsh或ssh,也可以当成daemon模式使用直接的socket连接, 所以rsync可以当做一个优异的备份工具来使用.  
我这简单介绍运用rsync备份远程网路主机档案的基本方法。 
在这,我们是给rsync当成linux的一种daemon模式来运行. 
首先,先给个简单的定义:当然要一台主机跑rsync daemon模式, 我们就称这台机器为一rsync Server, 或者说这台主机是一台备份主机( Backup Server). 
备份主机会开启一个873的端口(port), 等待对方rsync连接.所以服务器记的要开这个端口 
连接时, rsync Server 会检查密码是否相符, 若通过密码查核, 则开始进行档案传输. 
第一次连通完成时, 会把整份档案传输一次, 下一次就只传送二个档案之间异动的部份.  
以上是rsync client (欲加以备份的远程网路主机) 和rsync server 的运作方式。 
藉由上述方法, 我们当然也可以设立多部备份主机, 使网路主机上重要的档案能分散至数部主机中, 以分散风险.  
一旦完成备份, 我们可以对这些备份主机再做进一步的储存动作, 如使用tar打成tar的包, 把档案备份到硬盘之类.
以下内容,我用Ubuntu 7.10做客户机,Centos5做服务器测试过.
二. 安装法 
rsync目前最新版是 2.6.8, 可以到rsync.samba.org 下载. 
若您使用 rpm 套件,请用下面的方法安装,当然rhel5和centos5中默认就安装了
#rpm -ivh rsync*.rpm
#yum install rsync 
它的设定档位置在 /etc/rsyncd.conf,奇怪,我的没有自动生成这个文件,那我们就来自己配置他 
三. 设定 rsync server: (假设这台主机名称为 rsync.x111.com) 
rsync server 端要设定以下四项: 
   1.规划建立备份目录区  
   2.启动xinetd中的rsync   
   3.设定: /etc/rsyncd.conf  
   4.设定: 密码档  
依次说明如下: 
1. 规划建立备份目录区: 
建议您准备一个容量较大且独立的分割区, 并在其中开好备份目录, 如此 /blackup/x99 
2. 启动xinetd中的rsync
系统默认没有安装xinetd。 
# yum install xinetd 
#service xinetd restart
#chkconfig rsync on 
以上的操作,主要是要打开rsync这个daemon,一旦有rsync client要连接时,xinetd会把它转介给rsyncd (port 873).  
3. 设定 /etc/rsyncd.conf :  
全局设置
    uid = root
    gid = root 
    use chroot = no                # 不使用chroot
    max connections = 4         # 最大连接数为4
    pid file = /var/run/rsyncd.pid
    lock file = /var/run/rsync.lock
    log file = /var/log/rsyncd.log    # 日志记录文件
以下的部分,代表开放给某一台rsync client 主机的设定, 简单范本如下:  
    [x99] 
    path = /blackup/x99/x99_backup    
    auth users = x99_backup 
    secrets file = /etc/rsyncd.secrets 
    read only = no 
以上文件的注解:  
[x99] 代表要备份的主机代号, 名称自己设置. 
path 用来设定备份档案要存放在那一个目录.这个可先要mkdir开好,可以自己设置 
auth users 代表授权的帐号, 可以自己设置. 
secrets file 代表储存帐号密码的密码档, 其放置的路径档名. 
当然, 这台备份主机, 可以容纳许多 rsync client 连接, 只要在 rsyncd.conf中设置对应的多个部分即可. 
以下例子,代表二个主机x99及x100欲备份进来: 
     [x99] 
    path = /blackup/x99/x99_backup
    comment = XXXXX 
    auth users = x99_backup 
    secrets file = /etc/rsyncd.secrets 
    read only = no  
    [x100] 
    path = /blackup/x100/x100_backup 
    auth users = x100_backup 
    secrets file = /etc/rsyncd.secrets 
    read only = no  
4. 设定密码文件: 
rsyncd.secrets 的内容很容易, 格式为"帐号:密码"; 
如以下例子: 
x99_backup:x99pass 
注意! 上述设定只是一个例子,你自己设置可一定千万不要直接套用. 
接下来, 要将 rsyncd.secrets 这个密码档的档案属性设为root拥有, 且权限要设为600, 否则无法备份成功! 
因此, 请下:  
#chown root.root rsyncd.secrets  
#chmod 600 rsyncd.secrets  
至此, rsync的服务器这端已设定完成, 若欲查看备份日志.
#tail -f /var/log/rsyncd.log 
接下来是 client 端(即欲备份的网络主机) 的设定. 
四. 设定 rsync client (假设这台主机 IP 为 : 11.22.33.44) 
步骤: 
   1.设定密码档  
   2.测试rsync命令是否可以正常  
   3.将rsync指令放入定时任务(crontab)  
另外, 假设x99这台主机是网路上的服务器, 现打算把/var/www/html这个目录加以备份至backup server(上面讲的rsync.x111.com),  
但不想备份下面的目录中的内容/html/log,(也就是说要把/html/log目录排除), 整个操作方式如下: 
1. 假设把密码档放在 /root/rsyncd.secrets, 内容只要含有密码一行即可: 
x99pass  
注意: rsyncd.secrets 的权限属性必须设为600,设置方法见上面. 
2. 测试指令是否可以成功? 
/usr/bin/rsync -rvztopglHpogDtS --progress  --password-file=/root/rsyncd.secrets /var/www/html --exclude /html/log x99_backup@rsync.x111.com::x99  
若 出现传输目录档案的画面, 即表示测试成功.上面这个命令行中-rv里的v是verbose,z是压缩,r是递归,字目录一直,topg都是保持文件原有属性如属主、时间的参数。 --progress是指显示出详细的进度情况,--delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致。后面的 x99_backup@ip中,的x99_backup是指的用户名 
3. 置入工作排程, 假设每天凌晨5点开始备份: 
crontab -u root -e 
0 5 * * * /usr/bin/rsync -rvlHpogDtS --password-file=/root/rsyncd.secrets /var/www/html --exclude apache /html/log x99_backup@rsync.x111.com::x99  
若您有其它目录(如 /home)要备份, 则如法泡制: 20 5 * * * /usr/bin/rsync -rvlHpogDtS --password-file=/root/rsyncd.secrets /home x99_bakup@rsync.x111.com::x99 
当然您觉得备份一台Backup Server不够,还可再按上述方法,自行增加任意多台Backup Server, 以分散风险! 
五. 安全性: 
防火墙的 iptables 指令, 来限制 rsync client 的连线范围, 例子如下: 
iptables -A INPUT -p tcp -s ! xx.xx.xx.xx --dport 873 -j DROP 
如此, 只有 xx.xx.xx.xx 这个 client IP 能连入这台 rsync server.
附:
详细格式说明:
-v, --verbose 详细模式输出
-q, --quiet 精简输出模式
-c, --checksum 打开校验开关,强制对文件传输进行校验
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, --recursive 对子目录以递归模式处理
-R, --relative 使用相对路径信息
-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为
~filename。可以使用--suffix选项来指定不同的备份文件前缀。
--backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。
(不覆盖更新的文件)
-l, --links 保留软链结
-L, --copy-links 想对待常规文件一样处理软链结
--copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
--safe-links 忽略指向SRC路径目录树以外的链结
-H, --hard-links 保留硬链结
-p, --perms 保持文件权限
-o, --owner 保持文件属主信息
-g, --group 保持文件属组信息
-D, --devices 保持设备文件信息
-t, --times 保持文件时间信息
-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间
-n, --dry-run现实哪些文件将被传输
-W, --whole-file 拷贝文件,不进行增量检测
-x, --one-file-system 不要跨越文件系统边界
-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节
-e, --rsh=COMMAND 指定替代rsh的shell程序
--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
-C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
--delete 删除那些DST中SRC没有的文件
--delete-excluded 同样删除接收端那些被该选项指定排除的文件
--delete-after 传输结束以后再删除
--ignore-errors 及时出现IO错误也进行删除
--max-delete=NUM 最多删除NUM个文件
--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
--force 强制删除目录,即使不为空
--numeric-ids 不将数字的用户和组ID匹配为用户名和组名
--timeout=TIME IP超时时间,单位为秒
-I, --ignore-times 不跳过那些有同样的时间和长度的文件
--size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
--modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0
-T --temp-dir=DIR 在DIR中创建临时文件
--compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份
-P 等同于 --partial --progress 显示备份过程
-z, --compress 对备份的文件在传输时进行压缩处理
--exclude=PATTERN 指定排除不需要传输的文件模式
--include=PATTERN 指定不排除而需要传输的文件模式
--exclude-from=FILE 排除FILE中指定模式的文件
--include-from=FILE 不排除FILE指定模式匹配的文件
--version 打印版本信息
--address 绑定到特定的地址
--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
--port=PORT 指定其他的rsync服务端口
--blocking-io 对远程shell使用阻塞IO
-stats 给出某些文件的传输状态
--progress 在传输时现实传输过程
--log-format=FORMAT 指定日志文件格式
--password-file=FILE 从FILE中得到密码
--bwlimit=KBPS 限制I/O带宽,KBytes per second

-h, --help 显示帮助信息

本文转自博客园刘凯毅的博客,原文链接:使用rsync同步网络备份,如需转载请自行联系原博主。

目录
相关文章
|
4月前
|
存储 网络协议 Java
深入理解Linux网络——内核与用户进程协作之同步阻塞方案(BIO)
在上一部分中讲述了网络包是如何从网卡送到协议栈的(详见深入理解Linux网络——内核是如何接收到网络包的),接下来内核还有一项重要的工作,就是在协议栈接收处理完输入包后要通知到用户进程,如何用户进程接收到并处理这些数据。
|
5月前
|
存储 NoSQL 关系型数据库
redis协议与异步方式(redis网络层、pipeline、事务、lua脚本、ACID特性、发布订阅、hiredis实现同步连接与异步连接)
redis协议与异步方式(redis网络层、pipeline、事务、lua脚本、ACID特性、发布订阅、hiredis实现同步连接与异步连接)
89 0
|
监控 安全 网络架构
用于同步光网络 (SONET) 和同步数字体系 (SDH) 控制的通用多协议标签交换 (GMPLS) 扩展
本文档提供了特定于同步光网络 (SONET)/同步数字体系结构 (SDH) 的详细信息。根据 [RFC3471],SONET/SDH 特定参数在信令协议中携带在流量参数特定对象中。
344 0
用于同步光网络 (SONET) 和同步数字体系 (SDH) 控制的通用多协议标签交换 (GMPLS) 扩展
|
算法 Java Linux
JEP 尝鲜系列 3 - 使用虚线程进行同步网络 IO 的不阻塞原理
JEP 尝鲜系列 3 - 使用虚线程进行同步网络 IO 的不阻塞原理
|
存储 设计模式 监控
高山仰之可极,谈半同步/半异步网络并发模型
高山仰之可极,谈半同步/半异步网络并发模型
274 0
高山仰之可极,谈半同步/半异步网络并发模型
网络基础 - 同步、异步、阻塞、非阻塞
网络基础 - 同步、异步、阻塞、非阻塞
157 0
|
Unix Linux 定位技术
Linux: 硬件时钟, 系统时钟, 网络时钟, 时区修改和同步
Linux: 硬件时钟, 系统时钟, 网络时钟, 时区修改和同步
1525 0
Linux: 硬件时钟, 系统时钟, 网络时钟, 时区修改和同步
|
存储 编解码 JSON
Elasticsearch 跨网络、跨集群同步选型指南
1、两个同步实战问题 问题1:我想从目前的阿里云上6.7版本的es商业版,迁移到自己的7.10的自建环境,证书不一样,无法远程 无法ccr,有没有实时同步的工具呀?还是只能用logstash ? 问题2:es 2个索引数据同步有什么组件或者方案吗?
936 0
Elasticsearch 跨网络、跨集群同步选型指南