2.7.1 rsync的概念
《构建高可用Linux服务器》第2章FreeBSD8.1在企业中的部署应用,本章将会详细讲解FreeBSD8.1的安装、最小化安装后的优化、jail虚拟机的部署,以及FreeBSD8.1下的应用部署。希望大家通过本章的学习,能够很好地掌握FreeBSD8.1的基础知识,并且可以快速地搭建自己的开发环境和测试环境。本节为rsync的概念。
2.7 在FreeBSD8.1与Centos5.5下搭建rsync服务器
2.7.1 rsync的概念
rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地主机和远程主机之间的文件达到同步,这个算法并不是每次都整份传送,它只传送两个文件的不同部分,因此速度相当快。
rsync的优点如下:
可以镜像保存整个目录树和文件系统。
可以很容易地做到保持原来文件的权限、时间、软硬链接等。
无须特殊权限即可安装。
拥有优化的流程,文件传输效率高。
可以使用rsh、SSH等方式来传输文件,当然也可以直接通过socket连接。
支持匿名传输。
另外,与scp相比,传输速度不是一个数量级的。我们在局域网时经常用rsync和scp传输大量MySQL数据库文件,发现rsync至少比scp快20倍以上。所以大家如果需要在Linux/Unix服务器之间互传海量数据,rsync是最好的选择。
2.7.2 在Centos5.5下配置rsync服务器(1)
具体安装步骤如下:
首先准备一台Centos5.5,系统为64位Centos、IP为192.168.21.41,将其作为rsync服务器。另外准备一台64-bit FreeBSD8.1、IP为192.168.21.44的机器作为其客户端。
具体的安装步骤不多说,只介绍重点内容。首先检查rsync是否安装,命令如下:
- rpm –q rsync
- rsync-2.6.8-3.1
上面的结果说明rsync已安装,如果出现package rsync is not installed提示,则说明这个软件包没有安装,大家可以使用如下命令进行安装:
yum –y install rsync另外,关闭防火墙和SELinux,因为是在内网中传输,所以没必要打开。关闭它们,免得引起不必要的麻烦,命令如下:
- service iptables stop
- chkconfig iptables off
- setenforce 0
下面分享一下我自己定义的配置文件/etc/rsyncd.conf(说明:
此文件并不是系统创建的,你也可以给它取不同的名字)。先给出具体代码,后面再进行详细注释,代码如下:
1. uid=nobody
2. gid=nobody
3. user chroot=no
4. max connections=200
5. timeout=600
6. pid file=/var/run/rsyncd.pid
7. lock file=/var/run/rsyncd.lock
8. log file=/var/log/rsyncd.log
9. [backup]
10. path=/backup/
11. ignore errors
12. read only=no
13. list=no
14. hosts allow=192.168.21.0/255.255.255.0
15. auth users=test
16. secrets file=/etc/rsyncd.password
下面说明一下/etc/rsyncd.conf的语法。
- uid=nobody
上面指的是进行备份的用户,nobody为任何用户。
- gid=nobody
表示进行备份的组,nobody为任意组。
- use chroot=no
如果use chroot指定为true,那么rsync在传输文件以前首先chroot到path参数所指定的目录下。这样做可实现额外的安全防护功能,但缺点是需要给用户root权限,并且不能备份通过外部的符号连接所指向的目录文件。在默认情况下,chroot值为true,但是这一般不需要,可选择no或false。list=no表示不允许列清单。
- max connections=200
表示最大连接数。
- timeout=600
表示覆盖客户指定的IP超时时间,也就是说rsync服务器不会永远等待一个崩溃的客户端。
- pidfile=/var/run/rsyncd.pid
2.7.2 在Centos5.5下配置rsync服务器(2)
指的是pid文件的存放位置。
- lock file=/var/run/rsync.lock
指的是锁文件的存放位置。
- log file=/var/log/rsyncd.log
指的是日志文件的存放位置。[backup]这是认证模块名,即跟Samba语法一样,是对外公布的名字。
- path=/backup/
这是参与同步的目录。
- ignore errors
表示可以忽略一些无关的I/O错误。
- read only=no
表示允许读和写。
- list=no
表示不允许列清单。
- hosts allow=192.168.21.0/255.255.255.0
这里跟Samba的语法是一样的,只允许192.168.21.0/24的网段进行同步,拒绝其他一切网段连接。
- auth users=test
指的是认证的用户名。
- secrets file=/etc/rsyncd.password
指的是密码文件的存放地址。
启动服务端的rsync,可通过xinetd来控制,这里要对rsync进行修改,我们先编辑rsync相关的文件etc/xinetd.d/rsync,如下所示:
1. service rsync
2. {
3. disable=yes
4. socket_type=stream
5. wait= no
6. user= root
7. server = /usr/bin/rsync
8. server_args=--daemon
9. log_on_failure += USERID
10. }
将disable=yes 改为disable=no,然后重启xineted即可,命令如下:
- /etc/ini.d/xinetd restart
配置中应该注意的问题如下。
[backup]:认证模块名,这个认证模块名是服务器对外的名字,机器同步时只会认这个名字。这里的path不要随便设置,要知道这里是认证模块,以后从客户机备份的数据会存储在这里。
auth users=redhat:认证的用户名。这个名字是服务器端实实在在存在的用户,如果服务器端少了它,估计你的数据同步就无法实现了,请不要忽略它。
path=/backup/:参与同步的目录的权限。如果此目录权限不够,rsync同步是成功不了的。
这需要稍后在根目录下自己建,并分配相应的写权限,如下所示:
1. mkdir /backup
2. chmod –R 777 /backup
3. echo "test:test" >/etc/rsyncd.password
说明 这里我设置的是用户名和密码一致。
为了安全起见,我设置他的权限为600,如下所示:
1. chmod 600 /etc/rsyncd.password
客户端配置如下:
- echo "test" >
这里只需要密码,不需要用户名,免得要同步时还要手动互动。为了安全,一样配置600的权限,如下所示:
1. chmod 600 /etc/rsyncd.password
下面说说在工作中经常遇到的rsync问题。
故障一:服务器端的目录不存在或无权限。故障描述如下:
1. @ERROR: chroot failed
2. rsync error: error starting client-server protocol
(code 5) at main.c(1522) [receiver=3.0.3]
2.7.2 在Centos5.5下配置rsync服务器(3)
解决方法:创建目录或修改目录权限。
故障二:服务器端该模块(tee)需要验证用户名和密码,但客户端没有提供正确的用户名和密码,认证失败。故障描述如下:
1. @ERROR: auth failed on module tee
2. rsync error: error starting client-server protocol (code 5)
at main.c(1522) [receiver=3.0.3]
解决方法:提供正确的用户名和密码。
故障三:服务器上不存在指定的模块。故障描述如下:
1. @ERROR: Unknown module 'tee_nonexists'
2. rsync error: error starting client-server protocol
(code 5) at main.c(1522) [receiver=3.0.3]
解决方法:提供正确的模块名。
我们接着可以进行测试工作了。
在FreeBSD8.1的机器上执行如下命令:
1. rsync –vzrtopg --delete /home/andrewy/etc
test@192.168.21.41::backup --password-file=/etc/rsyncd.password
这时候就可以看到正确的同步效果了。
下面再说说工作中经常用到的rsync参数。
如果不需要交互式的操作,rsync平时也可以像scp那样工作,我由于经常要在服务器之间拷贝MySQL文件,MySQL的库文件有时有几十GB,感觉rsync在速度上还是占绝对优势的。以下是我在工作中经常用到的rsync参数:
-v --verbose:详细模式输出。
-r --recursive:对子目录以递归模式处理。
-p --perms:保持文件权限。
-o --owner:保持文件属主信息。
-g --group:保持文件属组信息。
-t --times:保持文件时间信息。
--delete:删除那些DST中存在而SRC中不存在的文件或目录。
--delete-excluded:同样删除接收端那些被该选项指定排除的文件。
-z --compress:对备份的文件在传输时进行压缩处理。
--exclude=PATTERN:指定排除不需要传输的文件模式。
--include=PATTERN:指定不排除需要传输的文件模式。
--exclude-from=FILE:排除FILE中指定模式的文件。
--include-from=FILE:不排除FILE指定模式匹配的文件。