分类: 系统运维
2006-03-30 12:40:27
使用 rsync (全自动网络备份法)
一. 简介
rsync 本来是用以取代 rcp 的一个工具, 它目前是由 维护.
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 会检查密码是否相符, 若通过密码查核, 则开始进行档案传输.
第一次连通完成时, 会把整份档案传输一次, 下一次就只传送二个档案之间异动的部份.
藉由上述方法, 我们可以设立多部备份主机, 使网络主机上重要的档案能分散至数部主机中, 以分散风险.
一旦完成备份, 我们可以对这些备份主机再做进一步的储存动作, 如使用 或 , 把档案备份到更稳固,更能长久保存的设备上, 如 MO 或 烧录设备.
以上, 便是整个运作的想法, 底下, 我们来加以实作.
二. 安装法
rsync 目前最新版是 2.5.5, 可以到 下载.
安装 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. 规划建立备份目录区:
建议您准备一个容量较大且独立的分割区, 并在其中开好备份目录, 如此 /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, 否则无法备份成功!
因此, 请下:
至此, rsync server 这端已设定完成, 若欲查看备份记录, 可参考 /var/log/rsyncd.log 这个档案.
接下来是 client 端(即欲备份的网络主机) 的设定.
四. 设定 rsync client (假设这台主机 IP 为 : 192.168.0.3)
步骤:
另外, 假设 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
]#
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 的一些备份妙法, 请参考:
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 的教学文件:
(具体看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 然后把防火墙打开