采用 rsync 实现远程备份

使用 rsync (全自动网络备份法)

. 简介

rsync 本来是用以取代 rcp 的一个工具, 它目前是由 rsync.samba.org 维护.

rsync 使用所谓的 "rsync 算法", 提供一个非常快速的档案传输方法, 使 local 和远程二部主机之间的档案达到同步, 它主要是传送二个档案的异动部份, 而非每次都整份传送, 因此速度相当地快.

由于 rsync 可以搭配 rsh 或 ssh 甚至使用 daemon 模式, 因此许多人拿 rsync 当做一个优异的备份工具来使用. (拿来 update ISO 檔也很好用)

本文将简单介 绍运用 rsync 备份网络主机档案的基本方法, 供各位伙伴参考.

rsync 有 6 种不同的用法, 如 local 拷贝备份, local 档案藉由 rsh/ssh 传送至远方主机.... 在此我们主要介绍 rsync 的 daemon 模式.

首先, 先给个简单的定义: 如果一台主机跑 rsync daemon 模式, 我们就称这台机器为一 rsync Server, 或者说这台主机是一台备份主机( Backup Server).

备份主机会开 启一个 873 的服务信道(port), 等待对方 rsync 连接.

连接时, rsync Server 会检查密码是否相符, 若通过密码查核, 则开始进行档案传输.

第一次连通 完成时 , 会把整份档案传输一次 , 下一次就只传送二个档案之间异动的部份 .

藉由上述方法, 我们可以设立多部备份主机, 使网络主机上重要的档案能分散至数部主机中, 以分散风险.

一旦完成备份, 我们可以对这些备份主机再做进一步的储存动作, 如使用 tar Ghost , 把档案备份到更稳固,更能长久保存的设备上, 如 MO 或 烧录设备.

以上, 便是整个运作的想法, 底下, 我们来加以实作.

 

. 安装法

rsync 目前最新版是 2.5.5, 可以到 rsync.samba.org 下载 .

安装 rsync 十分简单, 以下这道指令即可搞定:

./configure && make && make install

若您使用 rpm 套件, 只要下 rpm -ivh rsync*.rpm 即可

它的设定文件 位置在 /etc/rsyncd.conf

其实 RedHat / Mandrake 等 Linux 套件, 默认值都已帮各位安装好 rsync 了.

 

. 设定 rsync server: (假设这台主机名称为 192.168.0.2)

rsync server 端要设定以下四项:

  1. 规划建立备份目录区
  2. 设定: /etc/xinetd.d/rsync
  3. 设定: /etc/rsyncd.conf
  4. 设定: 密码文件

依次说明如下:

1. 规划建立备份目录区:

建议您准备一 个容量较大且独立的分割区, 并在其中开好备份目录, 如此 /bk/server

2. 设定 /etc/xinetd.d/rsync, 简单模板如下:

# default: off
# description: The rsync server is a good addition to am ftp server, as it /
#       
allows crc checksumming etc.
service rsync
{
        
disable = no
        
socket_type     
= stream
        
wait            
= no
        
user            
= root
        
server          
= /usr/bin/rsync
        
server_args     
= --daemon
        
log_on_failure  
+= USERID
}


然后下 service xinetd restart, 使上述设定生效.

上述, 主要是要打开 rsync 这个 daemon, 一旦有 rsync client 要连接时, xinetd 会把它转介给 rsyncd (跑 port 873).

 

3. 设定 /etc/rsyncd.conf :

以下区块, 代表开放给某一台 rsync client 主机的设定, 简单模板如下:

 

secrets file = /etc/rsyncd.secrets
read only = yes
list=yes
uid = nobody
gid = nobody
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log


.

以下模板, 代表二个主机 web备份服务器 及 tomcat备份服务器 欲备份进来:

[www]
comment = tranlate www from 158
path = /usr/local/apache2/htdocs/www
    
auth users = dev
    
uid = root
    
gid = root
    
secrets file = /etc/rsyncd.secrets
    
read only = no
    

    
[tomcat]
    
comment = tranlate tomcat from 158
path = /usr/local/tomcat-5.0.28/webapps/ROOT
    
auth users = dev
    
uid = root
   
 
gid = root
    
secrets file = /etc/rsyncd.secrets
read only = no
 

比较重要的解 释:

[www] 代表欲备份的模块

comment代表欲备份的主机代号, 名称可自订.

path 用来设定备份文件要存放在那一个目录? 请先用 mkdir 开设好, 名称可自订.

auth users 代表授权的帐号, 名称可自订.

secrets file 代表储存帐号密码的密码文件, 其放置的路径文件名.

当然, 这台备份主机, 可以容纳许多 rsync client 连接, 只要在 rsyncd.conf 中设妥对应的区块即可

4. 设定密码文件:

rsyncd.secrets 的内容很简单, 格式为 帐号:密码

如以下例子:

dev:123456

注意! 上述设定只是一个范例, 请务必自订一组, 千万不要直接套用.

接下来, 要将 rsyncd.secrets 这个密码文件的档案属性设为 root 拥有, 且权限要设为 600, 否则无法备份成功!

因此, 请下:

  • chown root.root rsyncd.secrets
  • chmod 600 rsyncd.secrets

至此, rsync server 这端已设定完成, 若欲查看备份记录, 可参考 /var/log/rsyncd.log 这个档案.

接下来是 client 端(即欲备份的网络主机) 的设定.

 

. 设定 rsync client (假设这台主机 IP 为 : 192.168.0.3)

步骤:

  1. 设定密码文件
  2. 测试 rsync 执行指令
  3. rsync 指令放入工作排程 (crontab)

另外, 假设 192.168.0.2 这台主机是网络主机, 今打算把 /usr/local/apache 这个目录加以备份至 backup server 192.168.0.3),

1. 假设把密码文件放在 /root/rsyncd.secrets, 内容只要含有密码一行即可:

123456

注意: rsyncd.secrets 的权限属性必须设为 600

2. 测试指令是否可以成功?

/usr/bin/rsync –vzrtopg --password-file=/root/rsyncd.secrets root@61.140.243.158::tomcat /usr/local/tomcat-5.5.15/webapps/ROOT

若出现传输目 录档案的画面, 即表示测试成功.

3. 置入工作排程, 假设每天凌晨 5 点开始备份:

crontab -u root -e

0 5 * * * /usr/bin/rsync -vzrtopg --password-file=/root/rsyncd.secrets root@61.140.243.158::tomcat /usr/local/tomcat-5.5.15/webapps/ROOT

若您有其它目 录(如 /www)要备份, 则如法泡制:

20 5 * * * /usr/bin/rsync -vzrtopg --password-file=/root/rsyncd.secrets root@61.140.243.158::www /usr/local/apache2/htdocs/www

若您觉得备份 一台 Backup Server 不够, 可再按上述方法, 自行增加任意多台 Backup Server, 以分散风险!

像这样把备份 的工作全部自动化, 真是轻松愉快, 大大地减低备份工作烦人的压力!!

. 安全性:

建议使用 ipchains 或 iptables 指令, 来限制 rsync client 的联机范围, 例子如下:

ipchains -A input -p tcp -s ! 192.168.0.3 --dport 873 -j DENY

iptables -A INPUT -p tcp -s ! 192.168.0.3 --dport 873 -j DROP

如此, 只有 192.168.0.3 这个 client IP 能连入这台 rsync server.

ipchains 及 iptables 的用法, 可参考CU里的教程。

PS:另外 rsync 可以结合 ssh 或 ssh2, 使安全性更加提高. 详情请自行查阅 rsync / ssh / ssh2 的 manpage.

具体步骤如 下:

A上生成隐藏文件夹/root/.ssh ,在里面生成密钥对

]#cd /root/.ssh
]#ssh-keygen -d
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
Enter passphrase (empty for no passphrase): <-- 此处不打passphrase..下次才不会询问password
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
11:22:33:44:55:66:77:88:99:00:11:22:33:44:55:66
root@rsync-server.com

]#

2. 在/root/.ssh内已经生成id_dsa与id_dsa.pub(分别为私钥和公钥)
]#scp id_dsa.pub B的IP:/root/.ssh/authorized_keys
B服务器要求输入登录密码验证身份,成功后在B server的/root/.ssh目录里面生成authorized_keys(公钥)
测试:在A上输入 ssh B的IP A可以无需密码验证就登录进B(不过这样的安全性很差)

然后的备份就简单了:

在服务器 B,建立以下脚本:
  #!/bin/bash

/usr/bin/rsync - vzrtopg -e ssh --progress --delete  192.168.0.2 :/usr/local/tomcat-5.0.28/webapps/ROOT/  /usr/local/tomcat-5.0.28/webapps/ROOT/

 

 

. 参考文件:

rsync 的一些备份妙法, 请参考: http://rsync.samba.org/examples.html

rsync有很多功能选项,下面就对介绍一下常用的选项:
  rsync的命令格式可以为:
  1. rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
  2. rsync [OPTION]... [USER@]HOST:SRC DEST
  3. rsync [OPTION]... SRC [SRC]... DEST
  4. rsync [OPTION]... [USER@]HOST::SRC [DEST]
  5. rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
  6. rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
  rsync有六种不同的工作模式:
  1. 拷贝本地文件;当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。
  2.使用一个远程shell程序(如rsh、 ssh)来实现将本地机器的内容拷贝到远程机器。当DST
路径地址包含单个冒号":"分隔符时启动该模式。
  3.使用一个远程 shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC
地址路径包含单个冒号":"分隔符时启动该模式。
   4. 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。
  5. 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。
  6. 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。

rsync 的教学文件: A Tutorial on Using rsync

rsync 的 FAQ (具 体看 man rsync

 

. 在我配置的过程出现的一些错误,和大家分享一下

1.

@ERROR: auth failed on module xxxxx

rsync: connection unexpectedly closed (90 bytes read so far)
rsync error: error in rsync protocol data stream (code 12) at io.c(150)

A: 这是因为密码设错了, 无法登入成功, 请再检查一下 rsyncd.secrets 中的密码设定, 二端是否一致?

2.

password file must not be other-accessible

continuing without password file

Password:

A: 这表示 rsyncd.secrets 的档案权限属性不对, 应设为 600

请下 chmod 600 rsyncd.secrets

3.

@ERROR: chroot failed

rsync: connection unexpectedly closed (75 bytes read so far)

rsync error: error in rsync protocol data stream (code 12) at io.c(150)

A: 这通常是您的 rsyncd.conf 中
的 path 路径所设的那个目录并不存在所致.
请先用 mkdir 开设好备份目录.

 

4. Q: 出现以下这个讯息 , 是怎么一回事 ?

rsync: failed to connect to 61.140.243.160: No route to host (113)

rsync error: error in socket IO (code 10) at clientserver.c(94)

A:这通常是你的防火墙问题

/etc/init.d/iptables stop 然后在试试看看

随后记得设置你的iptables 然后把防火墙打开

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值