数据镜像工具备份rsync与unison(高性能linux服务器架构)
1.rsync简介
代替传统CP命令或者Wget备份命令来实现本地镜像和远程备份的软件。
1.1 什么是rsync
Rsync是Linux/UNIX/windows系统下的文件同步和数据传输的工具,他采用”rsync算法”使一个客户机和远程文件服务器之间的文件同步。支持断点续传,可以支持完整备份和增量备份,rsync只是传输源文件和目标文件之间不一致的部分;
1.2 rsync的功能
rsync即remote rsync,从软件名称上就可以看出他所实现的功能。Rsync有如下特性:
1. 可以镜像保存整个目录树和文件系统
2. 可以增量同步数据,文件传输效率高,因而同步时间短。
3. 可以保持原有文件的权限、时间等属性
4. 加密传输数据,保证了数据的安全性
5. 可以使用rcp、ssh等方式来传送文件,当然可以直接通过Socket连接传出文件
6. 支持匿名传输
1.3 下载与安装rsync软件
rsync主页地址为:http://rsync.samba.org/,这里下载的版本为rsync-3.0.5pre2.tar.gz
编译安装,过程如下:
tar –zxvf rsync-3.0.5pre2.tar.gz
./configure --prefix=/usr/local/rsync-3.0.5pre2
make
make install
2.利用rsync搭建数据镜像备份系统
2.1 rsync的应用模式
rsync的四种模式:1. shell模式,也成为本地模式.
2.远程shell模式,利用SSH执行底层连接和加密传输.
3.查询(也叫列表)模式,与ls命令实现的功能累死.
4.服务器模式,所说的架设rsync就是指服务器模式
2.1.1本地shell模式
rsync -a --archive 归档模式
-v --verbose表示输出详细模式信息
2.2.2 远程shell模式
通过shell模式把本地目录复制到另一个系统
3.rsync列表模式
在这个模式下,rsync与ls命令有相似的功能 如果想通过root去访问192.168.0.9机器上boot目录的内容
远程
本地
4.服务器模式
这是一种CS模式的,在这种模式下,rsync在后台启动一个守护进程,这个守护进程在rsync服务器端永久的运行,用于接收文件传输请求,因此客户端既可以把文件发送给守护进程,也可以向守护进程请求文件,rsync服务器模式非常适合作为异地中心备份服务器活数据库异地存储来使用
2.2 企业案例:搭建远程容灾备份系统
为了更清楚介绍rsync服务器模式的使用方法,这里通过一个企业案例,介绍如何搭建一个远程灾难备份系统
案例描述
某电子商务企业有一个门户网站,web服务器的操作系统是linux,网站数据每天都会增加,为保证数据安全,需要建立一个远程容灾系统,将网站数据在每天凌晨3丶30分备份到远程服务器上,由于数据量很大,只能每天进行增量备份,即仅仅备份当天增加的数据,当网站出故障后,可以通过备份最大程度的恢复数据
解决方案
这里有两台Linux系统A作为网站服务器,B为备份机器,AB系统都需要安装rsync,A系统是服务器端,B是客户端,在A上启动守护进程,B通过 系统守护进程crontab来定时备份A系统的数据,从而实现数据远程容灾。
系统环境
操作系统: CentOS 6.3
A系统IP地址:192.168.0.9
B系统IP地址:192.168.0.10
1. 在A系统上配置rsync
Rsync的配置文件为/etc/rsyncd.conf,在安装完rsync时,默认没有这个文件,手动建立一个。
vim / etc/rsyncd.conf
uid = nobody
gid = nobody
use chroot = no
max connection = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync/lock
log file = /var/log/rsync.log
[ixdba]
path = /webdata
comment = ixdba file
ignore errors
read only = no
write only = no
hosts allwo = *
hosts deny = 192.168.12.1
list = false
uid = root
gid = root
auth users =backup
secrets file = /usr/local/rsync-3.0.5pre2/password/Aserver.pass
1) uid 制定当模块传输文件时守护进程应该具有用户ID默认”nobody”
2) gid 制定当模块传输文件时守护进程应该具有用户组ID默认”nobody”
3) max connections 制定最大并发连接数量 默认0就是最大
4) strict modes 检查口令文件的权限,yes为检查口令权限,反之NO如果为yes密码文件权限必须为root
5) pid file 来制定rsync守护进程对应的PID文件路径
6) lock file 用来制定max connections的锁我呢就,默认为/var/run/rsyncd.lock
7) [indba]定义一个模块开始,ixdba模块的名称
8) Path 来指定备份的文件或者目录这个是必须的项
9) Ignore errors 表示可以忽略一些无关的I/O错误
10) read only 设置no表示客户可以上传文件,yes表示只读
11) write only 设置no表示客户端可以下载文件,设置yes表示不能下载
12) hosts allow 设置可以连接rsync服务器的主机*表示允许任何主机
13) hosts deny 设置禁止连接rsync服务器的主机地址
14) list 设定客户请求可以使用模块列表时,是否被列出,默认true,如果隐藏false
15) vauth users 指定连接的用户名多个用户用‘,’隔开
16) secrets file 指定一个包含用户名和密码的文件 格式”用户名:密码”
2. 在A系统上启动rsync守护进程
执行如下指令启动rsync守护进程
[root@localhost bin]# /usr/local/rsync-3.0.5pre2/bin/rsync --daemon
[root@localhost bin]# ps -e |grep rsync
3646 ? 00:00:00 rsync
3. 在B系统上配置rsync
在备份机器上不用做任何设置,只需要执行rsync同步操作就可以,为了在同步过程中不用输入密码,在B系统上创建一个secrets file此文件和rsyncd.conf中的”auth users”指定的用户密码一样
其中password内容如下
[root@localhost ~]# more /usr/local/rsync-3.0.5pre2/password/Aserver.pass
ixdba123
chmod 600 /usr/local/rsync-3.0.5pre2/password/Aserver.pass
1) -vzrtopg
V表示--verbose,即详细模式输出;
Z表示“--compress”,文件传输时对备份文件进行压缩处理:
r表示--recursive,就是对子目录递归模式处理;
t表示--times 用来保存文件的时间;
o表示--owner,用来保存文件属主信息;
p表示--perms用来保持文件的权限
g表示--group用来保存文件的属组
2) --delete选项指定以rsync服务器为基准进行数据镜像同步,也就是保持rsync服务器目录和客户端目录完全一直,这里以A服务器为基准
3) --progress用于显示数据镜像同步过程
4) --exclude用于排除不需要传输文件类型
5) [email protected]::ixdba表示对服务器192.168.0.9中的ixdba模块进行备份backup表示备份使用的用户
6) /media 表示备份的客户端存放路径
7) --password-file=/usr/local/rsync-3.0.5pre2/password/Aserver.pass 用来指定客户机器密码文件存放位置 指定是backup用户的密码
1. 设置定时备份策略
利用crontab来备份
假如每天凌晨3点30分执行备份crontab –e
添加如下
30 3 * * * sync -vzrtopg --delete --progress --exclude "*access*" --exclude "debug*" [email protected]::ixdba /media/ --password-file=/usr/local/rsync-3.0.5pre2/password/Aserver.pass
3. 通过rsync+inotify实现数据实施备份
3.1 rsync优点与不足
优点:传统cp、tar备份方式相比,rsync具有安全性能高、备份迅速支持增量备份
缺点:rsync同步数据时,要扫描所有文件后进行对比,而且发生变化的往往是其中很少的一部分,rsync是非常低效的方式rsync不能试试检测、同步数据虽然通过linux守护进程的方式触发任务同步,但是两次动作会有一定的时间差可能导致服务器和客户端数据出现不一致无法现应用故障时完全恢复数据基于以上原因,rsync+inotify组合出现了
3.2初始inottify
Inotify是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13版本起,加入对inotify的支持通过inotify可以监控文件系统中的添加、删除、修改、移动等各种细微事件、利用内核接口,第三方软件监控文件系统下文件的各种变化,inotify-tools就是这样第三方软件
3.3安装inotify-tools
由于inotify的特性需要linux内核支持,在安装之前先确认linux系统是否支持2.6.13版本以上
[root@localhost ~]# uname -r
2.6.32-279.el6.x86_64
[root@localhost ~]# ll /proc/sys/fs/inotify/
总用量 0
-rw-r--r-- 1 root root 0 4月 25 00:32 max_queued_events
-rw-r--r-- 1 root root 0 4月 25 00:32 max_user_instances
-rw-r--r-- 1 root root 0 4月 25 00:32 max_user_watches
[root@localhost ~]#
如果有上面3项输出,就表示系统默认支持inotify,可以开始安装inotify-tools了
软件下载地址:https://github.com/rvoicilas/inotify-tools/wiki
安装过程如下:
tar -zxvf inotify-tools-3.14.tar.gz -C /usr/src/
cd /usr/src/inotify-tools-3.14/
./configure --prefix=/usr/local/inotify-tools-3.14
make
make install
[root@localhost ~]# ll /usr/local/inotify-tools-3.14/bin
总用量 88
-rwxr-xr-x. 1 root root 44319 4月 25 00:41 inotifywait
-rwxr-xr-x. 1 root root 41441 4月 25 00:41 inotifywatch
安装完成inotify-tools后,会生成inotifwait和inotifywatch两个指令,其中inotifywait用于等待文件或者文件集上的一个特定事件,可以监控任何文件和目录设置,并且可以递归地监控整个目录树;inotifywatch用于收集呗监控的文件系统统计数据,包括每个inotify事件发生多少次信息等。
3.4 inotify相关参数
Inotify定义了一些接口参数,可以用来限制消耗kernel memory的大小,由于浙西参数都是内核参数,因此可以根据应用需要,实时条件大小,下面对inotify相关参数进行简单介绍。
1)” /proc/sys/fs/inotify/max_queued_events”表示调用inotify_init时分配到inotify instance中可排队的event数的最大值,超出这个值事情会被丢失,但会触发
IN_Q_OVERFLOW事件
2)” /proc/sys/fs/inotify/max_user_instances”表示每一个real user ID可创建inotify instatnces数据的上限
3)” /proc/sys/fs/inotify/max_user_watches”表示每个inotify实例相关联的watches上限,也就是每个inotify实力可监控最大目录数量,如果监控文件树木巨大需要根据情况适当增加此值的大小例如:
echo 30000000 >/proc/sys/fs/inotify/max_user_watches
3.5 inotifywait相关参数
Inotifywait是一个监控等待事件,可以配合shell脚本来使用它,下面介绍一下常用的inotifywait参数:
1) -m --monitor 表示始终保持事件监听状态
2) -r --recursive 表示递归查询目录
3) -q --quiet 表示打印出监控事件
4) -e --event,通过此参数制定要监控的事件,常见的事件有modify、delete、create、attrib
更详细man inotifywait
3.6 企业应用案例:利用rsync+inotify搭建时时同步系统
案例描述
这是一个CMS内容发布系统,后端采用负载均衡部署方案,由一个负载调度节点、3个服务器节点以及一个内容发布构成。内容发布节点负责将用户的数据生成静态页面,同时将静态网页传输给3个服务器节点,而负载均衡调度节点负责将用户的请求根据负载算法调度到相应的服务器节点上,实现用户访问。用户要是前端访问网页数据始终是最新的、一致的
解决方案
为了保证用户访问到数据一致性和实时性,必须保证3个服务器节点上数据内容发布节点上的数据始终一致的,这里需要通过文件同步工具来实现,这里采用rsync同时又要保证数据是时时的这就需要inotfiy利用监控内容发布节点的变化如果文件有变动,那么就启动rsync,将文件实时同步到3个服务器节点上
节点名称 内核版本 用途 IP地址 网页数据路径
Web1 2.6.32-279.el6.x86_64 web服务器节点 192.168.0.9 /var/www/html
Server 2.6.32-279.el6.x86_64 内容发布节点 192.168.0.10 /webdata
1. 安装rsync与inorify-tools
Inotify-tools是用来监控文件系统变化的工具,因此必须安装在内容发布节点上服务器节点上无需安装inotify-tools,web1节点上只是需要安装rsync
2. 在服务节点上配置rsync
WEB1节点的rsyncd.conf配置如下:
uid = nobody
gid = nobody
use chroot = no
max connection = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync/lock
log file = /var/log/rsync.log
[web1]
path = /var/www/html
comment = ixdba file
ignore errors
read only = no
write only = no
hosts allwo = *
hosts deny = 192.168.12.1
list = false
uid = root
gid = root
auth users =webuser
secrets file = /usr/local/rsync-3.0.5pre2/password/web1.pass
[root@localhost /]# more /usr/local/rsync-3.0.5pre2/password/web1.pass
webuser:webuser123
[root@localhost /]# chmod 600 /usr/local/rsync-3.0.5pre2/password/web1.pass
[root@localhost /]# echo "/usr/local/rsync-3.0.5pre2/bin/rsync --daemon" >> /etc/rc.local
3. 配置内容发布节点
配置内容发布节点主要工作是将生成静态网页时时同步到集群中服务节点上
这个过程通过一个shell脚本来完成。脚本大致如下:
vim /usr/local/inotify-tools-3.14/inotifyrsync.sh
#!/bin/bash
host1=192.168.0.9
src=/webdata
dst1=web1
user1=webuser
/usr/local/inotify-tools-3.14/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src | while read files
do
rsync -vzrtopg --delete --progress --password-file=/usr/local/rsync-3.0.5pre2/password/web1.pass $src $user1@$host1::$dst1
done
1) —timefrmt:指定事件的输出格式
2) –format:指定变化文件的详细信息
chmod 755 /usr/local/inotify-tools-3.14/inotifyrsync.sh
echo "/usr/local/inotify-tools-3.14/inotifyrsync.sh &" >>/etc/rc.local
[root@localhost ~]# ps -e |grep inotifyrsync.sh
3967 pts/0 00:00:00 inotifyrsync.sh
3969 pts/0 00:00:00 inotifyrsync.sh
启动成功
测试如下
在内容发布服务器的/webdata上拷贝数据,然后去web1上去查看内容
因为内容太多所以大家从这下载PDF的把
http://bbs.itlinghang.com/thread-549-1-1.html