在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
最后得出个结论,以后工作前,做功课必不可少。


最及时的声音