作业环境
操作系统:CentOS 5.5-i386
一、rsync介绍
rsync 是一个快速增量文件传输工具,它可以用于在同一主机备份内部的备分,还可以把它作为不同主机网络备份工具之用。
二、rsync的安装
服务器端和客户端都需要安装rsync。
CentOS5.5系统默认安装了rsync,其版本号是2.6.8,如果系统没有,可以通过以下命令安装:
[root@sqing25 ~]# yum –y install rsync
也可以通过源码安装,:
[root@sqing25 ~]# wget http://rsync.samba.org/ftp/rsync/rsync-3.0.7.tar.gz
[root@sqing25 ~]# tar zxvf rsync-3.0.7.tar.gz
[root@sqing25 ~]# cd rsync-3.0.7
[root@ sqing25 rsync-3.0.7]# ./configure
[root@ sqing25 rsync-3.0.7]# make
[root@ sqing25 rsync-3.0.7]# make install
注:在用源码包编译安装之前,需安装gcc编译工具,否则编译出错。
三、rsync服务器端配置
1、rsyncd.conf
新建并编辑rsyncd.conf文件,该文件是rsync服务器的主要配置文件,保存路径自行设定,一般放在etc目录下,内容分为全局定义和模块定义
[root@sqing25 ~]# vi /etc/rsyncd.conf
内容如下:
uid = root
gid = root
use chroot = no
strict modes = yes
address = 10.8.5.25 //指定本机IP地址,可以不设
port = 873 //指定rsync服务端口,默认是873
max connections = 10 //最大连接数
pid file = /var/run/rsyncd.pid //告诉进程,写到/var/run/rsyncd.pid中
motd file=/etc/rsyncd.motd //服务器信息文件,需算自行创建,可不设
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[home] //模块名称,即同步或备份的目录,客户端用这个关键字连接
path=/home //指定文件目录所在位置
comment = this is a test
ignore errors //忽略IO错误
read only = yes //只读,不让客户端上传文件到服务器端
list = no
auth users = root //登录用户,必须是服务器上存在的真实用户,多个用户用逗号隔开
secrets file = /etc/rsyncd.pas //密码文件,需自行创建
hosts allow = 10.8.5.24 //允许访问的客户端
hosts deny=* //禁止访问的客户端
2、rsyncd.pas
新建并编辑rsyncd.pas文件,用于存放登录用户的登录密码,文件的属性需是属主可读,为安全起见,一般不把系统用户的密码写在这里,而是另外设置密码。密码格式为“用户名:密码”,其中用户是rsyncd.conf中的auth users指定的用户,若是多个用户,要在多行中输入“用户名:密码”。
[root@sqing25 ~]# vi /etc/rsyncd.pas
内容如下:
root:123456
[root@sqing25 ~]# chmod 600 /etc/rsyncd.pas
将其权限修改为600,这一步很重要,要是不修改,客户端尝试连接时会出现类似如下的报错:
@ERROR: auth failed on module home
rsync error: error starting client-server protocol (code 5) at main.c(1296) [receiver=2.6.8]
3、rsyncd.motd
新建并编辑rsyncd.motd文件,该文件是定义服务器信息的,用于标识服务器,用户登录时会看到该信息
[root@sqing25 ~]# vi /etc/rsyncd.motd
内容如下:
----------------------------------------------
Welcome to 10.8.5.25 server!
----------------------------------------------
4、防火墙设置
如果服务器上装有防火墙,需在服务器中设置iptables将837端口开放。
[root@sqing25 ~]#iptables -A INPUT -p tcp --dport 873 -j ACCEPT
5、启动rsync服务器
在服务器端将rsync以守护进程形式启动
[root@sqing25 ~]#rsync --daemon --config=/etc/rsyncd.conf
四、rsync客户端同步数据
1、rsync客户端配置
客户端rsync如果是通过源码安装的,需在/etc目录下创建了一个rsyncd.conf文件,内容也空也无所谓,否则在运行rsync时会出现如下报错:
[root@sqing24 ~]# rsync --daemon
Failed to parse config file: /etc/rsyncd.conf
但如果是系统默认安装或yum安装的,则不存在此问题。
2、手动同步数据,手动输入密码
[root@sqing24 ~]#rsync -azvr --progress --delete root@10.8.5.25::home /home/server25
~~Welcome to 10.8.5.25!
Password:
receiving file list ...
3、手动同步数据, 指定密码文件
新建并编辑rsyncd.pas文件,用于存放登录用户的登录密码,这样可以在脚本中使用而无需交互式地输入验证密码。
[root@sqing24 ~]# vi /etc/rsyncd.pas
内容如下:
123456
[root@sqing24 ~]# chmod 600 /etc/rsyncd.pas
[root@sqing24 ~]#rsync -azvr --progress –delete --password-file=/etc/rsyncd.pas root@10.8.5.25::home /home/server25
~~Welcome to 10.8.5.25!
receiving file list ...
4、客户端自动同步数据
rsync是通过crond这个后台进行(计划任务)来实现自动同步数据,CentOS5.5下默认安装并运行crond服务器,可以通过以下命令查看
[root@sqing24 ~]# rpm -qa |grep cron //查看crond是否安装
[root@sqing24 ~]# ps aux |grep crond //相看crond是否运行
在tmp目录下建一个backup.sh文件
[root@sqing24 ~]# vi /tmp/backup.sh
内容如下:
#!bin/sh
rsync –azvr --delete --password-file=/etc/rsyncd.pas root@10.8.5.25::home /home/server23
需要注意的是,/etc/rsyncd.pas文件的属性要为600,这在先前的操作中已经设置过了。
修改crontab制定任务计划,使其定时调度并运行backup.sh脚本,
[root@sqing24 ~]# crontab –e
内容如下:
* * * * * sh /tmp/backup.sh //表示每隔一分钟运行一次脚本
新创建的crontab文件会放在/var/spool/cron目录下,文件名就是用户名,用cd /var/spool/cron后 会看到用户文件,然后用 cat root(当前是root登录)可以看到“* * * * * sh /tmp/backup.sh”已经被转到这里了。
5、部分参数说明
root@10.8.5.25:/home/backup 服务器端的用户名和模块
/home/backup24 指定客户端存放备份文件的路径
-v,-verbose 详细模式输出
-z,-compress 压缩
-r,-recursive 对子目录以递归模式处理
-topg 保持文件的原有属性,如属主、时间等参数
-c,-checksum 打开校验开关,强制对文件传输进行校验
-a,-archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-R,-relative 使用相对路径信息
-q,-quiet 精简输出模式
--progress 显示出详细的进展情况
--delete 如果服务器删除了这一文件,客户算也会相应的把文件删除,保持真正的一致
--exclude 不包含某些文件
五、rsync问题解决
开始时,客户端访问服务器端,直接访问的是待备份的目录,命令如下
[root@sqing24 ~]#rsync -azvr --progress --delete root@10.8.5.25:/home/backup /home/backup24
在输入密码时,rsyncd.pas中设置的密码是无效的,只有该用户在系统中的密码才有效,一直以为是密码设置上出了问题,但就是改不过来。后来发现,后来又发现,待备份文件如果采用模块名称,即“username@需要备份的主机IP::备份里的模块名称”时,用户根本就无法连接:
[root@sqing24 ~]#rsync -azvr --progress --delete root@10.8.5.25::home --exclude=".sh" /home/server25
rsync: failed to connect to 10.8.5.25: Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(122) [Receiver=3.0.7]
经过进一步测试,得出结论,服务器端在运行rsync –daemon命令后,实际并没有运行rsync服务。
琢磨许久后,通过看进程才知道,由于rsync –daemon运行的意义在于使rsyncd.pid包含process id信息,而该守护进程需要通过xinetd来启动,故在系统中要安装xinetd,并启动
[root@sqing25 ~]# yum -y install xinetd
[root@sqing25 ~]# /etc/init.d/xinetd.d start
本文转自Sunshyfangtian 51CTO博客,原文链接:http://blog.51cto.com/sunshyfangtian/484945,如需转载请自行联系原作者