jaffas1101 发表于 2005-10-12 14:08:03

[转帖]Sun Cluster3.1下的Informix热备和互备

Sun Cluster3.1下的Informix热备和互备 <br><br>
1 背景 <br>
Informix是一种实际项目当中使用比较多的数据库,用户有时候会有把这种数据库做双机热备的要求。Sun Cluster是Sun公司的集群软件,但是从3.0版以后,不再发布为Informix双机热备用的Agent。所以必须另想办法来在Sun Cluster 3下实现Informix双机热备。 <br>
<br>
虽然Sun Cluster不提供Informix数据服务的Agent,但是它提供了开发自己的Agent的工具,包括Agent Builder和GDS数据服务资源类型,以及相应的API。GDS全称是Generate Data Service,普通数据服务,是为用户的普通网络应用程序准备的配置类型,仅适用于Failover类型。 <br>
<br>
而Informix数据库的特点就是,在数据库宕机之后,只需要把进程简单的起来就可以继续使用,相当于一个普通的,需要公用存储的的普通网络应用程序。 <br>
<br>
<br>
2 配置办法 <br>
2.1 GDS资源类型 <br>
GDS资源类型的特点有如下几点: <br>
<br>
1. 已经在Sun Cluster安装时自带,使用时注册一下即可 <br>
<br>
2. 适用于普通网络应用程序,非常方便用户自己的应用程序做高可用 <br>
<br>
3. 使用用户自己编写的脚本来启动、检测和中止应用程序 <br>
<br>
4. 用户脚本只要返回给GDS检测程序一个返回值即可,0为成功,否则失败 <br>
<br>
2.2 Informix数据库 <br>
Informix数据库虽然是一个大型数据库,但是其使用方式跟普通网络应用程序很相似,都是通过命令带参数来启动、检查和关闭数据库的 <br>
<br>
1. 启动 <br>
<br>
Informix的启动使用oninit命令即可,如果启动失败,会返回相应的错误代码,成功则返回0 <br>
<br>
2. 检测 <br>
<br>
onstat命令可以检测目前数据库的运行状态,返回代码和oninit一样。如果要检查的更加详细,可以编写更复杂的脚本来检查 <br>
<br>
3. 关闭 <br>
<br>
关闭Informix数据库用onmode –ky命令。 <br>
<br>
2.3 编写脚本 <br>
下面是3个脚本的简单示例: <br>
<br>
1. 启动 <br>
<br>
#!/bin/ksh <br>
<br>
<br>
<br>
<br>
CMD_STR=" <br>
setenv INFORMIXDIR /opt/informix <br>
setenv INFORMIXSERVER xxdb <br>
setenv ONCONFIG onconfig.xxdb <br>
setenv DB_LOCALE zh_cn.gb <br>
setenv CLIENT_LOCALE zh_cn.gb <br>
<br>
<br>
/opt/informix/bin/oninit <br>
" <br>
su - informix -c "$CMD_STR" <br>
<br>
return $? <br>
<br>
2. 检测 <br>
<br>
#!/bin/ksh <br>
CMD_STR=" <br>
setenv INFORMIXDIR /opt/informix <br>
setenv INFORMIXSERVER xxdb <br>
setenv ONCONFIG onconfig.xxdb <br>
setenv DB_LOCALE zh_cn.gb <br>
setenv CLIENT_LOCALE zh_cn.gb <br>
<br>
/opt/informix/bin/onstat <br>
" <br>
su - informix -c "$CMD_STR" <br>
return $? <br>
<br>
<br>
3. 关闭 <br>
<br>
#!/bin/ksh <br>
<br>
CMD_STR=" <br>
setenv INFORMIXDIR /opt/informix <br>
setenv INFORMIXSERVER xxdb <br>
setenv ONCONFIG onconfig.xxdb <br>
setenv DB_LOCALE zh_cn.gb <br>
setenv CLIENT_LOCALE zh_cn.gb <br>
<br>
/opt/informix/bin/onmode -ky <br>
" <br>
<br>
<br>
su - informix -c "$CMD_STR" <br>
<br>
return $? <br>
<br>
<br>
注意,这3个脚本都是简单的示例,有如下几个需要注意的地方: <br>
<br>
1. setenv当中设置了DB_LOCALE等语言参数,这是因为Informix数据库如果语言不对,可能客户端不能连接数据库 <br>
<br>
<br>
2. 程序中都返回了$?,这是在su –c命令当中最后一条命令的返回值 <br>
<br>
3. 在正式使用之前需要在两台主机上都进行手动执行的测试,成功之后才可以正式加入Sun Cluster的程序 <br>
<br>
2.4 Sun Cluster中的配置 <br>
1. 保存3个脚本到两台主机的相同目录,并测试在两台主机上的运行情况 <br>
<br>
2. 建立一个资源组,加上普遍配置:逻辑主机名、存储等 <br>
<br>
3. 在Cluster的资源组里注册一个GDS类型资源 <br>
<br>
4. 指定该资源的启动、检测和中止脚本为我们刚刚编写的脚本 <br>
<br>
5. 测试资源组的online和offline的功能是否正常 <br>
<br>
2.5 Informix双机互备的配置 <br>
双机互备在Sun Cluster里边是很简单的设置两个资源组即可,但是在Informix中,一台主机上运行两个实例是需要一些不同的配置的,所以有一些需要注意的地方: <br>
<br>
1. 两个数据库实例应该有不同的实例名 <br>
<br>
通过设置INFORMIXSERVER和ONCONFIG可以做到 <br>
<br>
2. 两个实例名的ONCONFIG文件中需要不同的参数 <br>
<br>
ROOTPATH、DBSERVERNAME自不必说,需要注意的是SERVERNUMBER必须是不同的数字 <br>
<br>
3. 两个实例不能使用相同的端口服务 <br>
<br>
因此,需要设置/etc/services文件中两个service名字和端口,例如: <br>
<br>
sqlexec 8766/tcp <br>
<br>
<br>
sqlexec2 8765/tcp <br>
<br>
而在$INFORMIXDIR/etc/sqlhosts文件中,为两个实例分别指定不同的协议<br>
<br>
<br>
页: [1]
查看完整版本: [转帖]Sun Cluster3.1下的Informix热备和互备