案例描述:
某电子商务网站,Web服务器的操作是Linux,网站数据每天会增加,为了保证数据安全,需要建立一个远程容灾系统,将网站数据在每天凌晨3点30分备份到远程容灾服务器上。由于数据量很大,每天只能进行增量备份,即仅仅备份当天增加的数据,当网站出现故障后,可以通过备份最大程度的恢复数据。
解决方案
这里假定有A、B两个linux系统,A系统作为网站服务器,B系统作为A的远程容灾系统,因此A系统就是rsync的服务端,B系统就是rsync的客户端。为了完成数据容灾备份,需要在A、B两个系统上都安装rsync软件,这样,在A系统上运行守护进程(服务端),而在B系统上可以通过拉取服务端数据,添加守护进程crontab来定时备份由A系统指定的数据,从而实现数据的远程容灾。
系统环境
操作系统:centos 6.5
内核版本:2.6.32-358.6.2.el6.x86_64
A系统IP地址:10.8.132
B系统IP地址:10.8.131
软件: rsync crontab
第一步:在A、B两个系统上安装rsync
rysnc的主页地址为:http://rsync.samba.org/ftp/rsync/,我这里下载的版本为rsync-3.1.1,接着进行编译安装:
wget http://rsync.samba.org/ftp/rsync/rsync-3.1.1.tar.gz
tar zxvf rsync-3.1.1.tar.gz
cd rsync-3.1.1
./configure
make
make install
这样就完成了rsync的安装。
第二步:在A系统上配置rsync
rsync的配置文件为/etc/rsyncd.conf,在rsync安装完毕,默认是没有这个文件的,我们手动建立一个即可。rsyncd.conf文件是由一个或多个模块结构组成。该文件有全局参数和模块参数组成,一个模块定义从方括弧中的模块名开始,直到下个模块的定义开始。配置完毕的内容如下:
uid = nobody
gid = nobody
use chroot = no
max connections = 10
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[ctyun]
path = /home/wwwroot
comment = ctyun file
ignore errors
read only = true
list = false
uid = root
gid = root
auth users = backup
secrets file = /etc/server.pass
-
uid 此选项指定当该模块传输文件时守护进程应该具有的用户ID,默认值是“nobody”。
-
gid 此选项指定当该模块传输文件时守护进程应该具有的用户组ID。默认值为“nobody”。
-
max connections 此选项指定模块的最大并发连接数量,以保护服务器,超过限制的连接请求,将被暂时限制。默认值是0,也就是没有限制。
-
pid file 此选项用来指定rsync守护进程对应的PID文件路径。
-
lock file 此选择指定支持max connections的锁文件,默认值是/var/run/rsyncd.lock。
-
log file 此选项指定了rsync的日志输出文件路径。
-
[ctyun] 表示定义一个模块的开始,ctyun。
-
path 此选项用来指定需要备份的文件或目录,必填项,这里指定的目录为/home/wwwroot。
-
list 此选项设定当客户请求可以使用的模块列表时,该模块是否被列出。默认值是true,如果需要建立隐藏的模块。可以设置为false。
-
auth users 此选项用来定义可以连接该模块的用户名,多个用户用空格或逗号分隔开。需要注意的是这里的用户和Linux系统用户没有任何关系。这里指定的用户是backup。
-
secrets file 此选项指定一个包含“用户名:密码”格式的文件,用户名就是“auth users”选项定义的用户,密码可以随便指定,只要和客户端的secrets file对应起来就行。只有在auth users被定义时,该文件才起作用。系统默认没有这个文件,自己手动创建一个即可。
第三步: 在A系统上启动rsync守护进程
#启动rsync进程
/usr/local/bin/rsync --daemon
#查看启动成功与否
ps -ef|grep rsync
第四步:在B系统上配置rsync
在备份机上不用做任何设置,只需执行rsync同步操作即可,为了在同步过程中,不用输入密码,需要在B系统上创建一个secrets file,此文件的内容为A系统rsyncd.conf文件中“auth users”选项指定用户的密码,而这个文件的名称以及路径可以随意指定,只要在执行rsync同步时指定即可。
/usr/local/bin/rsync -vzrtopg --delete --progress backup@10.8.0.132::ctyun /ctyunbackup --password-file=/etc/server.pass
对这条指令中每个参数的含义介绍如下:
-
“–vzrtopg”选项中v是“—verbose”,即详细模式输出,z表示“–compress” 即对备份的文件在传输时进行压缩处理,r表示“–recursive”,也就是对子目录以递归模式处理。t即“–times”,用来保持文件时间信息,o即“–owner”用来保持文件属主信息。p即“–perms”用来保持文件权限,g即“–group”用来保持文件的属组信息。
-
“–delete”选项指定以rsync服务端为基准进行数据镜像同步,也就是要保持rsync服务端目录与客户端目录的完全一致性。在这里也就是以A服务器为基准进行同步。
-
“–progress”选项用于显示数据镜像同步的过程。
-
“backup@10.8.0.132::ctyun” 表示对服务器10.8.0.132中的ctyun模块进行备份,也就是指定备份的模块,backup表示使用“backup”这个用户对该模块进行备份。
-
“/ctyunbackup”用于指定备份文件在客户端机器上的存放路径,也就是将备份的文件存放在备份机的/ctyunbackup目录下。
-
“–password-file=/etc/server.pass”用来指定客户机上存放的密码文件位置,这样在客户端执行同步命令时就无需输入交互密码了,注意,这个密码文件的名称和位置可以随意指定,但是在客户机上必须存在此文件,文件的内容仅仅为备份用户的密码,这里指的是backup的密码。
-
其实rsync作为客户端工具,提供了很多的选项和参数,这里我们仅仅给出了常用的一部分,更详细的信息请执行“
man rsync ”查看。
如果配置没有错误,接下来rsync将自动去服务端(即A系统)将需要备份的数据拉取同步数据到客户端(即B系统)。rsync指令在客户端执行完成数据的同步后,将自动停止,以后如果在服务端目录下有新增数据时,客户端不会自动将数据同步过去,此时,还需要再次执行rsync命令组合进行数据同步,因此,rsync方式的数据备份是需要触发同步指令才能完成。
第五步:设置定时备份策略
触发同步指令的方式有很多种,例如可以将同步指令放入客户端系统的crontab守护进程,设定同步时间,然后让Linux去触发同步指令,自动完成数据备份。这种数据备份方式可以用于数据安全性要求不是很高的业务系统上。
根据案例要求,还需要设定客户端rsync在每天凌晨3点30分执行备份操作。因此需要在B服务器(客户端)上执行 crontab -e 来添加一个定时任务。
#打开定时任务编辑器
crontab -e
#添加定时任务
30 3 * * * * /usr/local/bin/rsync -vzrtopg --delete --progress backup@10.8.0.132::ctyun /ctyunbackup --password-file=/etc/server.pass
通过以上5步,一个远程容灾系统已经搭建完成了。有经验的读者可能会发现,这并不是一个完美的容灾方案。由于rsync需要通过触发才能将服务端的数据同步,而触发操作是通过crontab守护进程来完成的。因此在两次触发同步操作的时间内,服务端和客户端的数据可能出现不一致,如果在这个时间段以内,网站出现的故障,就意味着数据丢失。因此通过这种方式来搭建容灾系统在网站出现故障的时候数据是不能完全恢复的。
(责任编辑:IT) |