HP-UX上的一个应用数据迁移实例
 
 1. 问题简单描述
    首先简单介绍一下我的服务器环境,这里主要指web服务、app服务。我们这里使用两台HP6600作为前端的web服务和app服务,其中前端的web静态页面展示由apache完成,具体应用(app)使用的是weblogic中间件,所有请求经由apache服务转发过来。weblogic做了集群配置,apache也是并行运行的。
    由于是两台服务器并行,而且又涉及文件的共享操作,所以需要实现共享存储,前期由于共享存储设备没有到位,所以用NFS作为替代实现手段。简单的来说就是文件放在其中的一台主机的本地硬盘的某一分区上,然后将该分区共享NFS,另一台主机mountNFS文件系统,并且mount的目录位置相同。这样做虽然可以解决文件共享的问题,但却失掉了双机并行的高可用性,因为如果提供共享NFS存储的那台主机挂掉,则整个系统就瘫痪了。所以才有后续的数据迁移工作,新的存储设备是NAS
    新的NAS设备到位了,空间已经分配好了,并且已将NAS挂接到两台主机上了(也是通过NFS)。那么下一步就是数据迁移了,将应用数据从本地硬盘迁移(复制)到NAS设备上。我们的应用系统有点类似于内容管理系统,应用使用过程中会有新的文件(静态页面)产生,文件较多,而且较小。应用系统在工作时间不能停(这里是指app系统,也就weblogic),前台页面展示(apache服务)要求全天基本不能停。
    问题就简单介绍到这,下面我将根据主机环境以及应用运行的需要,分析和给出我的解决以及实施过程。
 
 2. 问题的分析
 2.1. 主机上应用的配置情况。
    主机上应用软件以及静态页面的位置规划得还算不错,都存放于同一分区下。
    为了说明问题的方便,这里做一些符号、变量的定义。    
简称
说明
HOST_1
1号主机
HOST_2
2号主机
IP_1
1号主机的IP地址
IP_2
2号主机的IP地址
IP_NAS
NAS设备的IP地址
 
  • 应用所在位置
    应用软件以及生成的静态页面文件都在HOST_1的本地硬盘上。   
/appdata/download1:位于IP_1
  • NAS设备mount的位置   
/nas40  IP_1IP_2同一目录下。
  • 分区和NASmount状态(当前)
    IP_1主机上
/ on /dev/vg00/lvol3 ioerror=nodisable,log,dev=40000003 on Sat Jul  5 13:55:58 2008
/stand on /dev/vg00/lvol1 ioerror=mwdisable,log,nodatainlog,tranflush,dev=40000001 on Sat Jul  5 13:55:59 2008
/var on /dev/vg00/lvol8 ioerror=mwdisable,delaylog,nodatainlog,dev=40000008 on Sat Jul  5 13:56:14 2008
/usr on /dev/vg00/lvol7 ioerror=mwdisable,delaylog,nodatainlog,dev=40000007 on Sat Jul  5 13:56:14 2008
/tmp on /dev/vg00/lvol4 ioerror=mwdisable,delaylog,nodatainlog,dev=40000004 on Sat Jul  5 13:56:14 2008
/opt on /dev/vg00/lvol6 ioerror=mwdisable,delaylog,nodatainlog,dev=40000006 on Sat Jul  5 13:56:14 2008
/home on /dev/vg00/lvol5 ioerror=mwdisable,delaylog,nodatainlog,dev=40000005 on Sat Jul  5 13:56:15 2008
/appdata/download1 on /dev/vg01/lvol1 ioerror=mwdisable,delaylog,nodatainlog,dev=40010001 on Sat Jul  5 13:56:15 2008
/bea on /dev/vg00/LVbea ioerror=mwdisable,nolargefiles,delaylog,nodatainlog,dev=40000009 on Sat Jul  5 13:56:17 2008
/net on -hosts ignore,indirect,nosuid,soft,nobrowse,dev=1 on Sat Jul  5 13:56:55 2008
/nas40 on $IP_NAS:ccgpfs2 rsize=32768,wsize=32768,NFSv3,dev=5 on Fri Nov 28 10:27:28 2008
    IP_2主机上
/ on /dev/vg00/lvol3 ioerror=nodisable,log,dev=40000003 on Sat Jul  5 13:55:48 2008
/stand on /dev/vg00/lvol1 ioerror=mwdisable,log,nodatainlog,tranflush,dev=40000001 on Sat Jul  5 13:55:49 2008
/var on /dev/vg00/lvol8 ioerror=mwdisable,delaylog,nodatainlog,dev=40000008 on Sat Jul  5 13:56:05 2008
/usr on /dev/vg00/lvol7 ioerror=mwdisable,delaylog,nodatainlog,dev=40000007 on Sat Jul  5 13:56:05 2008
/tmp on /dev/vg00/lvol4 ioerror=mwdisable,delaylog,nodatainlog,dev=40000004 on Sat Jul  5 13:56:05 2008
/opt on /dev/vg00/lvol6 ioerror=mwdisable,delaylog,nodatainlog,dev=40000006 on Sat Jul  5 13:56:05 2008
/home on /dev/vg00/lvol5 ioerror=mwdisable,delaylog,nodatainlog,dev=40000005 on Sat Jul  5 13:56:05 2008
/bea on /dev/vg00/LVbea ioerror=mwdisable,nolargefiles,delaylog,nodatainlog,dev=40000009 on Sat Jul  5 13:56:05 2008
/net on -hosts ignore,indirect,nosuid,soft,nobrowse,dev=1 on Sat Jul  5 13:56:44 2008
/appdata/download1 on $IP_1:/appdata/download1 rsize=32768,wsize=32768,NFSv3,dev=3 on Sat Jul  5 14:19:22 2008
/nas40 on $IP_NAS:ccgpfs2 rsize=32768,wsize=32768,NFSv3,dev=5 on Fri Nov 28 10:26:32 2008
   
 2.2. 初步分析
    从以上情况不难看出,数据的迁移工作主要是将/appdata/download1下的所有文件拷贝到/nas40目录下。由于应用的位置改变了,则需要修改apacheweblogic的相应配置,有可能也需要修改应用本身的配置文件,这样做显然有些麻烦,而且容易出错。为了避免这种麻烦,我们可以将NAS挂接到/appdata下,保持应用的原有路径不变,从而无需修改任何配置文件(包括apacheweblogic、以及应用本身的配置文件)。下面介绍一下具体实现方法和过程。
   
 3. 迁移实施过程
    为了使拷贝与原文件一致,则原文件目录中不能再有文件被修改或增加新的文件,这样就需要停掉app应用(及weblogic服务)。由于app服务基本不能停,而且在工作时间是绝对不能中断的,而且应用文件夹(/appdata/download1)很大,其中小文件很多,拷贝文件所花费时间一定非常之长,显然停掉服务做拷贝是不现实的。那么,就只能想其他的解决办法了。
    我的解决办法是做增量拷贝,具体方法如下,在某一个时间点将/appdata/download1下的文件拷贝到/nas40下,此时不停任何服务,应用照常运行。这个拷贝显然会耗费相当长的时间,可能是半天甚至一天。不过这没有关系,拷贝期间不影响应用的正常使用。当拷贝完成时,/nas40下的文件显然要比/appdata/download1下的文件旧,但差别不会太大,差别也就是在我们执行拷贝过程中/appdata/download1下所做过修改的文件,我们再选择一个应用不是很忙的时间,短暂的停一下应用服务(weblogic服务)使得/appdata/download1下的文件不再改变,此刻执行一个增量拷贝将改变过的文件拷贝到/nas40下,至此文件拷贝完成。下一步就是将NAS挂接到/appdata下,然后启动应用服务(weblogic服务),观察一下日志看是否有异常,如未见异常则大功告成了。以下具体给出实现过程
 3.1. /nas40下创建目录
# cd /nas40
# mkdir download1
# chown -R bea:hpbea ./download1
 
 3.2. 拷贝文件
    拷贝文件分为两步,第一步是在不停任何应用服务的情况下进行的。第二步是增量拷贝。我选择周五的下午执行第一步,这样可以在周六的非工作时间短暂的停一下应用服务执行增量拷贝。这样安排可以保证有充裕的时间去解决突发问题。
  • 周五,第一次拷贝
    IP_1
# cd /ccgp/download1
# nohup find . | cpio -dpumv /nas40/download1 > ./cplog50_20081205.log 2>&1 &
  • 周六,增量拷贝
    周五的文件拷贝时间的确很长,差多用了12个小时。
    首先停掉weblogic服务。
    IP_1,增量拷贝,拷贝那些1天之内被修改过的文件。
# nohup find . -mtime -1 | cpio -dpumv /nas40/download1 > ./cplog50_20081206.log 2>&1 &
    这一步的时间不长,才十多分钟。
    检查拷贝是否正确。
# du -sk /appdata/download1
# du -sk /nas40/download1
  • 更改卷和NASmount
    先将/appdata/download1 mount到其它位置。
    IP_2umount NFS
# umount /appdata/download1
    IP_1,将/appdata/download1挂到/old_d1下。
# cd /
# mkdir old_d1
# umount /appdata/download1
# mount /dev/vg01/lvol1 /old_d1
    IP_1,将NAS/nas40)挂到/ccgp下。
# umount /nas40
# mount $IP_NAS:ccgpfs2 /ccgp
    IP_2,将NAS/nas40)挂到/ccgp下。
# umount /nas40
# mount $IP_NAS:ccgpfs2 /ccgp
 
 3.3. 重启启动服务
    重新启动weblogicapache,观察日志检查是否有异常出现,没有,可以收工了。
    
 4. 结语
    本文介绍了实际工作中遇到的一个数据迁移问题的分析、解决、实施的过程。数据迁移工作需要考虑的因素很多,有时环境也很复杂,所以要认真分析和考虑、制定出合适实施方案。本文描述了实际工作中所做的一次数据迁移过程,一次简单的web服务数据(文件)迁移过程,其中包括前期问题的分析,关键点的预判,综合考虑各种可能出现的问题,并提出相应的解决方法或变通做法。指定实施方案,并列明了具体的实现过程。文中所述问题的关键是系统停机时间不能太长,尤其是在工作时间绝对不能停机,针对这个要求我们采用增量拷贝的方法巧妙的缩短了系统停机时间。