在Windows 上利用 MSCS 创建高可用性的 DB2 集群服务
周末加班,事先得知是帮人建一个Windows的故障转移集群。虽说现在主要精力是在中间件上,但Windows毕竟还是深入学习过一年的嘛,更何况在WebSphere和WebLogic上都做过MSCS的集群,所以以为不过是小菜一碟,最后想不到从6点搞到了凌晨1点。
我们首先是采用Oracle在Windows下的套路:两台主机上都启用数据库实例,数据库则存放在共享存储上,通过在集群资源中添加DB2的通用服务,从而达到数据库服务的故障转移。
应该说思路没什么问题,但是实行起来有个问题,就是在有用户连接的情况下,停止db2服务会失败,第二次再去停止才能够停下来,这样手动转移集群就会有点问题。于是我们就想着法子怎么再数据库服务停止前执行一下中断所有数据库链接的命令……苦思冥想、多次尝试,弄的焦头烂额。
最后上IBM developerworks找文档,才知道原来根本不用这么麻烦,实例只需一份,而且DB2早就给你准备好了db2msce工具,只要写一份db2mscs.cfg的配置文件:
DB2_INSTANCE=DB2 //指定需要转换的实例名称 DB2_LOGON_USERNAME=dbdomain/db2admin //指定登录实例的域用户账号 DB2_LOGON_PASSWORD=0000 //指定登录实例域用户账号的密码 CLUSTER_NAME=MYCLUSTER //指定群集的名称 GROUP_NAME=DB2 Group A //指定用于该实例的组名称 DB2NODE=0 //指定该组资源对应的 DB2 节点号 IP_NAME= MscsA //指定用于该实例的 IP 地址资源的名称 IP_ADDRESS=192.168.192.31 //指定 IP 地址资源的IP地址属性 IP_SUBNET=255.255.255.0 //指定 IP 地址资源的子网掩码 IP_NETWORK=Public Network //指定 IP 地址资源绑定的网络连接 NETNAME_NAME = MscsAName //指定网络名资源的名称 NETNAME_VALUE = DataCenter //指定网络名资源的机器名属性 NETNAME_DEPENDENCY = MscsA //指定该网络资源名对应的 IP 地址资源的名称
DISK_NAME=DISK E: //指定该节点需要使用的磁盘资源 INSTPROF_DISK=E: //指定该节点目录所在的磁盘资源
上述配置文件中的NAME选项都可以随便填写,以简单明了为主,IP_ADDRESS是DB2服务的浮动IP,IP_NETWORK应该写提供集群外网服务的那块网卡名称,NETNAME的那三个选项可以不填,不影响使用(因为都是用IP连接的)。
然后运行db2mscs -f:db2mscs.cfg命令(注意F不是指盘符,将db2mscs.cfg放于db2mscs同一个目录下),你就会看到集群服务中自动添加了一个资源组:DB2 Group A,添加了一个名为DB2的DB2类型服务,而这个服务类型之前是没有的。
除了这种Hot-Standby的配置方式,还有互备(Mutual Takeover)的模式。可以见这篇文章《在MSCS环境下实现DB2分区服务器群集实例》。
附一份官方文档Implementing IBM DB2 Universal Database Workgroup Server Edition V8.2 with Microsoft Cluster Server,关于DB2数据库的准备工作,以及配置文档的各参数详细解释,以及管理工具的设置,可以参考这篇文章。
IBM developerworks上的两篇文章,虽然是win2000环境下,但过程一样,而且作者遇到的问题可以给我们借鉴。
http://www.ibm.com/developerworks/cn/data/library/techarticles/0305sunqin/0305sunqin1.html
http://www.ibm.com/developerworks/cn/data/library/techarticles/0305sunqin/0305sunqin2.html
最后得出个结论,以后工作前,做功课必不可少。


博主您好,我是在偶然情况下拜读了您的博文。
起因是我们要在项目中涉及这样的一个高可用应用:
中间件:Weblogic9两台Win2003的服务器
周末加班,事先得知是帮人建一个Windows的故障转移集群。虽说现在主要精力是在中间件上,但Windows毕竟还是深入学习过一年的嘛,更何况在 WebSphere和WebLogic上都做过MSCS的集群,所以以为不过是小菜一碟,最后想不到从6点搞到了凌晨1点。
博主您好,我是在偶然情况下拜读了您的博文。
起因是我们要在项目中涉及这样的一个高可用应用:
需要用两台Win2003企业版的服务器,做一个Weblogic9的双机热备;因为以前做的集群都是用Weblogic自身的集群功能实现,但这次要实现的不是NLB,而是双机热备…MSCS接触的不多,不知怎样能实现对Weblogic运行实例作为MSCS资源进行监控,具体如何设置….
网上这方面的资源也没有找到,却误打误撞看到了您的博客,看到”但Windows毕竟还是深入学习过一年的嘛,更何况在 WebSphere和WebLogic上都做过MSCS的集群”这样一句,当下大喜过望,希望您能在百忙之中予以指点,多谢。
不好意思,你的回复被akismet当成垃圾信息屏蔽了= =,我今天才看到。
weblogic9做MSCS集群其实很简单,首先是在本地磁盘安装weblogic程序,但是domain要建立在共享磁盘上。从你提到的双机热备来看,应该至少有两个domain,这两个domain应该在不同的共享磁盘上。
然后最终要的一步是将webLogic添加为系统服务,你可以看下我这篇文章《注册Weblogic9为Windows服务及外一篇》http://www.hashei.me/2009/08/install-weblogic-as-service-and-recovery-password.html 。一边添加完成后,需要把磁盘切换到另一边,同样添加一下。
然后在windows的集群管理器中添加一个bea的组(组名随便),然后添加通用服务(上一步的bea服务名),添加IP资源(对外服务IP),添加磁盘资源(安装domain的磁盘),bea服务要依赖于IP资源和磁盘资源
同上,建立一个新的资源组,把另外一个domain服务添加进去。进行切换测试
测试通过后就可以把两个资源组分别运行在不同的主机上,如果一台机器发生故障,那么两个domain会切换到同一台服务器对外提供服务。