Chinaunix首页 | 论坛 | 博客
  • 博客访问: 11678358
  • 博文数量: 8065
  • 博客积分: 10002
  • 博客等级: 中将
  • 技术积分: 96708
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-16 17:06
文章分类

全部博文(8065)

文章存档

2008年(8065)

分类: 服务器与存储

2008-05-29 15:56:27

“管道”技术是Unix操作系统最具特色的功能之一,而SAN存储技术目前在很多行业中的应用都已经较为普及,笔者在文中介绍的是某省建设银行使用的系统,这是笔者在工作中实际接触的例子,结合笔者的经验,我们一起来研究一下采用Unix管道技术解决备份问题的方法,同时着重为读者介绍有关“管道”的概念。
 
一、SAN存储的实际应用和问题
 
(一)某省建行建成的备份体系(如图1
 
 
实际环境需要备份的系统有:
1.生产系统
两套IBM Sequent NUMA-Q 2000 DYNIX CLUSTER,该操作系统为DYNIX/ptx4.5.1,数据库为Informix7.31 Dynamic Server,数据量在100GB左右。
2.清算系统
操作系统为HP-UX 10.01,数据库为Informix7.12,数据量为2GB左右。
3.证券系统(重要客户系统)
操作系统为AIX4.3,数据库为Informix7.31,数据量为4GB左右。
4.信贷系统
操作系统为SCO5.05,数据库为Informix7.23,数据量为6GB左右。
5.管理系统
操作系统为Windows 2000 Server,数据库为SQL Server 7,数据量为300GB左右。
 
(二)某省建行备份系统存在的问题
1.备份软件无法使用多个驱动器对Sequent服务器上的Informix数据库进行并行备份和恢复。
2.清算业务服务器上的旧版本的Informix数据库无法使用备份软件进行自动备份。
对于第一个问题,我们采用VERITAS的软件解决了并行备份和恢复。对于第二个问题,由于旧版本的Informix数据库不支持onbar工具,给自动备份出了个难题,经过分析,我们认为采用Unix管道技术可以解决备份的问题。
 
二、Unix管道技术
 
管道是Unix操作系统最强大和最具特色的性能之一,从功能上讲,管道机制提供了一种在各进程之间大量传输信息的通道;而从本质上讲,管道是一个特殊的文件。管道是以Unix文件系统为基础而设计的,它具有对普通文件操作的一般特性,如用于普通文件的打开(OPEN)、读(READ)、写(WRITE)、关闭(CLOSE)等系统调用同样可以作用于管道。
 
Unix操作系统下的管道分为无名管道(PIPE)和有名管道(FIFO)两种,它们在不同的领域下有效地完成了相关进程之间的数据共享和信息交换,从而保证了进程间的协同工作。与Unix系统提供的其他进程通信机制,如信号(SIGNAL)、消息传送(MESSAGE PASSING)、共享内存(SHARED MEMORY)等相比,管道机制具有如下三个突出的特点:
 
1)发送进程能以比较简单的方式,源源不断地把产生的消息以自然流的方式写入管道,而不需要考虑对每次传送的信息长度的限制。
 
2)接收进程能在适当的时机从管道按需提取信息,同样也不必以固定的消息长度为单位进行。
 
3)发送和接收进程都能以一定的方式了解对方进程是否存在,并且可以通过管道的现存消息情况(管道空、管道有信息、管道满)等相互协调动作。
 
无名管道(PIPE
无名管道是一个特殊的打开文件,只能在程序中由系统调用PIPEP)生成。其中参数P的定义为:
 
INT P[2]
 
无名管道由一个在基本文件系统存储设备上的INODE,一个与其相连的内存INODE,两个打开文件控制块(分别对应管道的信息发送端和信息接收端)及其所属进程的描述信息来标识,在系统执行PIPEP)命令行之后生成。在P[0]中返回管道的读通道打开文件描述符;在P[1]中返回管道的写通道打开文件描述符。从结构上看,无名管道没有文件路径名,不占用文件目录项,因此文件目录结构中的链表不适用于这种文件,它只是存在于打开文件结构中的一个临时文件,随其所依附的进程的生存而生存,当进程终止时,无名管道也随之消亡。
 
有名管道(FIFO
无名管道存在着如下两个严重的缺点:
 
第一、无名管道只能用于连接具有共同祖先的进程;
第二、无名管道是依附进程而临时存在的,并不是永久存在于系统中。
 
为了弥补无名管道的不足,伴随Unix SYSTEM III的出台推出了一种无名管道的变种——有名管道,它常被称为FIFO。有名管道除继承了无名管道的所有特性优点之外,还摒弃了无名管道的两个缺点。首先,FIFO是一种永久性的机构,它具有普通的Unix系统文件名。在系统下可利用MKNOD命令建立永久的管道,除非刻意删除它,否则它将一直保持在系统中。其次,正是由于有名管道以文件名来标识,所以只要事先约定某一特定文件名,那样所有知道该约定的服务进程,不论它们之间是否有亲属关系,都可以方便地利用管道进行通信。
 
FIFO有两种建立方式。
在系统命令级建立FIFO
$/ETC/MKNOD FIFO P
其中参数P用以标识建立一个管道特殊文件。
在程序中建立FIFO
MKNOD(“FIFO”,0106000);
 
其中八进制数“010600”用以标识建立一个FIFO文件。
 
FIFO 和无名管道在系统内核层合用了大量的代码段,它的读、写流程与无名管道的读、写流程基本一致。值得注意的是,Unix系统规定,为了资源利用的合理性,如果没有进程在某FIFO用于写之前打开时,有进程先打开FIFO用于读的话,那样该读进程将被阻塞,直到有另一个进程打开该FIFO用于写,反之亦然。解决这一问题的最好方法是推出一个后台进程将该FIFO以读、写双重的方式打开操作。
 
三、管道技术在SAN存储中的完美应用
 
利用管道技术可以实现旧版本Informix数据库使用ontape直接备份到磁带库中。
 
由于在备份服务器上使用VERITAS Netbackup 4.5,它调用InformixOnbar工具实现SAN存储,但旧版本Informix不支持Onbar工具,只有ontape工具,而 VERITAS Netbackup 4.5不包含ontape工具,此时可利用管道技术实现旧版本Informix数据库使用ontape直接备份到磁带库中。具体步骤如下:
 
步骤一:建立管道文件/tmp/ovpipe
# mknod /tmp/ovpipe p
# chown Informix:Informix /tmp/ovpipe
# chmod 777 /tmp/ovpipe
 
步骤二:修改onconfig文件,设置TAPEDEVLTAPEDEV
TAPEDEV = /tmp/ovpipe
LTAPEDEV = /tmp/ovpipe
 
步骤三:编写脚本/tmp/ovback.sh,实现ontape直接备份数据到远程磁带库
 
脚本内容如下:
su - Informix -c "ontape -s -L 0 > /tmp/ontape.log |&"
/usr/openv/netbackup/bin/bpbackup -p ontape -s ontape /tmp/ovpipe
 
这样使用NetBackupInformix利用ontape进行直接向远程磁带库的备份,发挥了管道技术的作用,解决了SAN存储中的问题。
经过笔者的分析,上面介绍的方法有以下两个较为明显的优点:
1.实现了不同环境下的数据的统一备份,减少了数据备份的总体投入成本。
2.由于采用统一存储,提高了数据备份的管理效率,增加了数据备份的可靠性。
由此可见,本文中介绍的应用方案是值得在一定范围内推而广之的。
阅读(1404) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~