• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

SDS+VCSQS+Oracle构建的HA Cluster

发布: 2007-6-08 22:43 | 作者: seanhe | 来源: | 查看: 37次 | 进入软件测试论坛讨论

领测软件测试网
背景:
一般如果用Veritas Cluster Server for Solaris,就会用到VxVM,但是如果环境中没有VxVM(比如说我)但又要保证数据的安全,一般人都会想到Solstice Disksuite(SDS),它可以构建Raid,作为存储资源。在Cluster中,最根本的就是资源,Vcs本身附带了很多的agent,用来探测这些资源的可用性,但是对于存储,它只支持Disk,Disk-group以及Volumn等,它并不支持SDS,用SDS构建的逻辑驱动器部署在/dev/md/rdsk和/dev/md/dsk中,虽然它可以像一般磁盘一样被系统所访问,但vcs disk agent仅仅从/dev/rdsk/下搜索可用的物理设备,因此disk agent不能管理你的sds逻辑设备,即使你在/dev/rdsk/下建立了/dev/md/rdsk/dx的连接,也是不可以的,表面上看来,你的cluster可以启动工作了,当你的机器重新启动后,md(sds)的daemon会报错,系统宕机。你能做的就是每次启动前删除那些symbolink,启动后建立那些symbolink,这样太麻烦,而且也不符合Cluster的要求,因此需要我们来写关于sds的agent,幸好vcs提供了agent developer guide和vcsqs custom agent guide。对于双机环境(仅高可用),SDS也提供了相应的程序,在SDS里有个叫diskset,就是为共享SDS Raid逻辑驱动器而出现的。我们的想法是用SDS的agent来控制diskset的切换,来实现高可用的目的。
这里的VCS仅限于VCSQS-双机高可用软件,用它和Oracle以及SDS可以构建较经济的高可用方案, Oracle只用Workgroup版本即可,相对企业版便宜多了。但是此方案构建的数据库不能应付大规模的应用,一是性能不够(I/O问题),二是没有达到真正集群的目的(依然存在单点故障),只是没有办法的情况下不得已而为之,以下方法仅作为参考。
硬件环境:
Sun Fire 280Rx2(900,1G,36.4x1,ge,qfe),D1000(36.4x4)
Solaris 2/02,VCSQS 3.5,Oracle 9.2,Solstice Disksuite 4.2.1
1.连接线,D1000中间SCSI接口用自带的SCSI线短接,两边的SCSI接口通过SCSI线连接到280的SCSI卡(额外买的一个)的外接口上,两台机器的qfe0,1用568a-568b跳线连接,ge连接到交换机上。
2.修改其中一台280的SCSI init ID,在ok状态setenv scsi-initiator-id=5,就可以了。
3.打开阵列,打开两台机器,分别安装solaris,记得分区的时候在系统盘末尾留50M左右的空间,用来存metadb,装Oracle需要大点的swap,我用了2048M,两台机器装完,再安装software 2里的SDS,然后分别打补丁,Recommended和SDS的。
4.配置网络和rsh,rcp等,这些都是安装cluster基本的东西,网络就不用说了,rhost也简单,在/下建立.rhosts,写上对方机器的名字就好了,前提是双方都可以通过机器名访问对方。
5.两台机器都从系统盘里分出s7,大约10M左右,作为metadb,我的是c2t0d0s7。在阵列上的分别是:c1t0d0,c1t1d0,c1t8d0,c1t9d0。
6.创建metadb,在两台机器上分别执行:metadb -a -f -c3 /dev/dsk/c2t0d0s7,创建了metadb,可以用metadb查看。
7.创建meta diskset,一下步骤在其中的一台机器上运行即可,没有特殊说明,都是在一台机器上执行,metaset -s storage -a -h dbserver1 dbserver2,这样创建了storage的diskset
8.将磁盘加入到diskset里,metaset -s storage -a c1t0d0 c1t1d0 c1t8d0 c1t9d0,可以用metaset查看storage的归属一次所包含的磁盘,应该能看到host,owner和driver等。此时如果你用format查看磁盘,你可以发现阵列上的磁盘已经被SDS自动分区了,一个s0,一个s7,s7是storage的metadb,s0是可用的。可以用metadb -s storage查看diskset的metadb。
9.创建md,我做的是raid 0+1,所以用了一下命令
metainit -s storage d10 1 2 c1t0d0s0 c1t1d0s0
metainit -s storage d20 1 2 c1t8d0s0 c1t9d0s0
metainit -s storage d0 -m d10
metattach -s storage d0 d20
这样d0的阵列就做完了,系统自动同步,时间比较长大约2各小时左右。这个时候diskset就可以进行release和switch的操作了,但是不要在resync的时候执行切换操作,否则要重新resync,用metaresync -s storage d0进行重新resync。
10.同步完成后,可以newfs了,newfs /dev/md/storage/rdsk/d0,块设备在/dev/md/storage/dsk/d0上,可以mount在某一台机器上了。此时的storage只可以挂靠一台机器,在mount前先看看属于哪个机器,metaset -s storage,看owner是谁,谁才可以mount。如果要挂靠另一台机器,先umount,用metaset -s storage -r释放磁盘资源,另一台机器可以用metaset -s storage -t获得磁盘资源,然后才可以mount,是不是比较麻烦,这些动作都不需要你手工来完成,待会的VCSQS会做。
11.假设我们把storage mount在了dbserver1的/share(dbserver2上也要建立这个目录)上了,mount /dev/md/storage/dsk/d0 /share,我们可以安装Oracle了,这个也不多说,建立Oracle用户,将Oracle用户的home放到/export/home/oracle里,只要在本机磁盘上就可以了,哪儿无所谓。配置环境变量,将$ORACLE_HOME放到/share里,两台机器完全一样的变量,也没有什么特殊的,安装Oracle,将所有的文件安装到/share下,也就是磁盘阵列上,注意最后运行root.sh的时候提示oraenv的路径,记得改到/share的某个目录就可以,不要放到/usr/local/bin里。至于那个oratab,本来是放到/etc下的,那就放那儿吧,反正也用不到,如果你不放心,你可以copy一份到对方机器上,不过我觉得奇怪的是,我安装的Oracle居然没有。建立的数据库也要放到/share,不要创建spfile。
12.在安装的那个机器上关闭Oracle,以oracle身份:sqlplus "/ as sysdba";sql>shutdown,然后以root身份:umount /share,metaset -s storage -r,在另一个机器上以root身份:metaset -s storage -t,mount /dev/md/storage/dsk/d0 /share,然后以oracle身份:sqlplus "/ as sysdba";sql>startup,如果上面的操作没有问题,那么你应该可以启动你的oracle了。
13.安装VCSQS,这个好像以前有个帖子也说了,比较简单,保证rsh能用就可以了,能做到这一步,我想你的rsh早就可以用了,任意一台机器上放上光盘,自动会mount,installvcs就可以了,其中会问几个啥问题,比如什么ip,hostname,clustername,license什么的,想好了自己添。安装文档光盘里有,比较简单。安装顺利完成后,你可以通过一个漂浮IP(安装vcsqs的时候让你添的,一般是你的公用网络的网卡的一个additional ip,我的dbserver1上ge0的ip是172.16.1.2,dbserver2上ge0的ip是172.16.1.3,我把172.16.1.4作为漂浮IP)的http://IP:8181/vcsqs来访问你的cluster,不过现在那里面啥都没有,因为你还没有添加资源组。
14.添加资源组的准备工作,在vcsqs的安装文档里也有,
1)在你的Oracle数据库里添加一个用户,在这个用户下建立一个表,叫啥都行,表里就有一个字段,tstamp,date格式的,用来记录时间戳。
2)为你的网卡再绑定一个IP地址,我的是ge0,如果你的oracle运行在dbserver1上,那么你在dbserver1上执行以下的操作,ifconfig -a,看看ge0都有几个ip,如果有了一个ge0:1的话,那我们就用
ifconfig ge0:2 plumb
ifconfig ge0:2 172.16.1.5 netmask 255.255.255.0
ifconfig ge0:2 up
然后看看ifconfig -a是不是多了一个ip地址,那就对了,然后用这个IP地址为Oracle配置一个监听器,在listener.ora里,host写上刚配的IP,我的是172.16.1.5,然后用oracle用户执行lsnrctl stop,lsnrctl start,lsnrctl status看看状态是否正常,正常的话,下一步。
15.用root在CDE下运行/opt/VRTSvcs/qsbin/vcsqs-oracle-wizard,出来个java得配置工具,所填写得信息都是以上告诉你的,什么数据库里建立的用户名,密码,表名,然后是什么磁盘,mount点,ip什么的,它都能自动找到,你要做的就是填写一个NLS_LANG,写成SIMPLIFIED CHINESE_CHINA.ZHS16GBK,如果你有特殊要求可以自己改。好了,这就算配置完了。vcsqs会自动启动那些个服务,但是你要做的是停止它,因为现在还起不起来,找不到disk资源,用root在两台机器上分别执行/opt/VRTSvcs/qsbin/vcsqs -stop。
16.接下来的是和SDS以及vcsqs agent有关,因为vcsqs没有sds的agent,而且,vcsqs还不能像vcs那样自己写agent加入到resource type里,所以,我们要自己改一个,vcsqs提供了一个叫Application的agent,可以online/offline/monitor一些资源,我们的SDS恰巧也是在其中,但必须是diskset。我们采用比较常用的shell。有以下几个步骤:
1)为你的diskset建立online,offline,monitor的脚本,我们在/usr/sbin下建立三个脚本文件,分别如下:
第一个,online脚本,获得diskset的访问权限,名字随便,例如getstorage,很简单,一句话
#!/bin/sh
/usr/sbin/metaset -s storage -t #这里的storage是先前建立的diskset的名字。
第二个,offline脚本,释放diskset的访问权限,和online差不多,例如relsstorage,
#!/bin/sh
/usr/sbin/metaset -s storage -r
第三个,monitor脚本,获得diskset的owner,在metaset里,-o表示探测diskset是否在当前主机,如果是返回一个0,我们可以通过它写一个脚本,monstorage
#!/bin/sh
/usr/sbin/metaset -s storage -o >/dev/null 2>&1
if [ $? -eq 0 ] ; then
    exit 110 #vcsqs里110表示online
else
    exit 100 #vcsqs里100表示offline
fi
别忘了chmod +x
2)修改vcsqs的住配置文件,在/etc/VRTSvcs/conf/config里,叫main.cf,里面一定有个type叫Disk,这个就是sds和vcsqs冲突的地方,我们把它改掉,将Disk改成Application,我在安装的时候把d0改成了diskset-storage,如果不改也没有关系,个人习惯,如下:
        Application diskset-storage (
                User = root
                StartProgram = "/usr/sbin/getstorage"
                StopProgram = "/usr/sbin/relsstorage"
                MonitorProgram = "/usr/sbin/monstorage"
                
然后将里面有关Disk(下面还有一个)的,统统改成Application。
最后用root在两台机器上分别运行/opt/VRTSvcs/qsbin/vcsqs -start。不出意外的话,你可以从http://IP:8181/vcsqs来管理你的cluster了,试试切换等操作是否能成功。

有关vcsqs的管理,软件附带的document写的很详细,也很清楚,我就不多说了。
顺便提个醒,记得修改/opt/VRTSvcs/bin/Oracle/Testsql.pl,将里面的'/ as sysdba'改成'system/xxxxxx',原因我以前也说过,SDS构建的MD对大量的小文件管理很吃力,特别是非正常reboot以后,fsck速度极慢,而且容易出错。修改脚本是为了不让vcsqs产生大量的audit文件。
其中有几个问题一直不好处理,在D1000上做Raid 0+1据说不是很好,不知道有什么办法解决。而且不知道为什么,要resync两次,具体在什么时候resync我也忘了。

 iamark 回复于:2003-09-24 17:56:32
精华,鼓掌

 williamw2000 回复于:2003-09-29 00:30:39
learning about it right now.

 sunmarmot 回复于:2003-09-29 01:28:08
我还是认为用VXVM做比较保险,用DISKSUITE  metaset做了之后如果不能正常释放资源,就必须用强制切换,切换几次后会发生整个阵列数据丢失的情况,比较危险。

 chinesecai 回复于:2003-09-29 09:07:49
我现在的设备情况是D1000,一台ultra5 和ultra10,该如何做,给个建议?我想用vx。

 procrus 回复于:2003-09-29 10:47:44
ultra5 和ultra10还要配scsi卡!

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网