(其中红色字体为手工输入,蓝色字体为主要变化关注点。)
一、本实例实验环境
$ uname -a
Linux fedora 2.6.22.18-co-0.7.5 #1 PREEMPT Mon Sep 14 22:21:15 UTC 2009 i686 i686 i386 GNU/Linux
$ onstat -V
IBM Informix Dynamic Server Version 11.50.UC1DE Software Serial Number AAA#B000000
二、预备知识
1、什么是 HDR?
High Availability Data Replication(HDR)是一种将数据从主服务器复制到从服务器的方法。HDR 将所有启用日志记录功能的数据库从主服务器复制到从服务器。尽管可以把从服务器看作主服务器的复制品,但是它不包含未启用日志记录功能的数据库的数据。在从服务器上存在这些数据库和模式,因为 DML(Data Manipulation Language)语句总是记录在日志中的;但是除非数据库启用了日志记录功能,否则插入、更新或删除的数据不会被复制。HDR 确保从服务器总是与主服务器保持同步。如果主服务器发生故障,那么从服务器可以作为备用服务器,直到主服务器恢复运行为止。
2、硬件需求
主服务器和从服务器在平台、操作系统版本、内存、CPU 和存储空间方面必须相同。服务器必须支持网络连接。在主服务器和从服务器上,分配给 dbspace 的磁盘空间量必须相同。一些用户喜欢给主服务器配置更多的内存或 CPU。不建议这样做,而且在这种情况下,HDR 的速度取决于最慢的服务器的速度。
3、数据库需求
主服务器和从服务器上的 onconfig 文件应该非常相似,而且以下参数必须完全相同:
ROOTNAME
ROOTOFFSET
ROOTPATH
ROOTSIZE
MIRROROFFSET —— 如果使用镜像特性
MIRRORPATH —— 如果使用镜像特性
PHYSDBS
PHYSFILE
LOGFILES
LOGSIZE
DYNAMIC_LOGS
DRAUTO
DRINTERVAL
DRTIMEOUT
4、连接需求
为了在不同机器上的 IDS 服务器之间建立连接,需要执行以下步骤:
确保服务器是完全可信的
添加适当的 NETTYPE 配置参数(soctcp 或 tlitcp),或者确保 sqlhosts 文件包含 DBSERVERNAME 或 DBSERVERALIAS 的 TCP 连接
确保两个 sqlhosts 文件包含对方服务器的设置项
测试两个服务器之间的连接。一种测试方法是使用 dbaccess > connection > connect。为了确认服务器是完全 可信的,不要使用用户名和密码进行连接。如果连接失败,就检查错误代码并进行调试
三、HDR实例配置过程
(一)建立相关用户
(说明:本服务器上已有informix组,已装有informix 11.5,具体安装过程请见文章:安装Colinux&Informix11.5&DBSonar过程详解-step by step,地址http://blog.csdn.net/sunxp/archive/2010/08/16/5816042.aspx。)
[root@fedora ~]# useradd -g informix -u 201 -d /home/share/info1 -m info1
[root@fedora ~]# useradd -g informix -u 202 -d /home/share/info2 -m info2
(二)修改sqlhosts文件,将两个server的信息都加入到这个文件中
[root@fedora ~]# su - informix
-bash-3.1$ vi /home/informix/ids11uc1/etc/sqlhosts
demo_on onipcshm on_hostname on_servername
demo_se seipcpip se_hostname sqlexec
ids11 onsoctcp 10.10.10.40 10001
ids11_2 onsoctcp 10.10.10.40 10002
info1 onsoctcp 10.10.10.40 10003
info2 onsoctcp 10.10.10.40 10004
(三)修改两个onconfig文件
-bash-3.1$ cp /home/informix/ids11uc1/etc/onconfig.ids11 /home/informix/ids11uc1/etc/onconfig.info1
-bash-3.1$ cp /home/informix/ids11uc1/etc/onconfig.ids11 /home/informix/ids11uc1/etc/onconfig.info2
-bash-3.1$ vi /home/informix/ids11uc1/etc/onconfig.info1
(仅列出几个需要修改的值,其他略。)
ROOTNAME rootdbs # Root dbspace name
ROOTPATH ./chunk0 # Path for device containing root dbspace
ROOTOFFSET 0 # Offset of root dbspace into device (Kbytes)
ROOTSIZE 900000 # Size of root dbspace (Kbytes)
# System Configuration
SERVERNUM 1 # Unique id corresponding to a OnLine instance
DBSERVERNAME info1 # Name of default database server
DBSERVERALIASES info1 # List of alternate dbservernames
NETTYPE soctcp,1,50,NET # Configure poll thread(s) for nettype
DEADLOCK_TIMEOUT 60 # Max time to wait of lock in distributed env.
RESIDENT 0 # Forced residency flag (Yes = 1, No = 0)
-bash-3.1$ vi /home/informix/ids11uc1/etc/onconfig.info2
(仅列出几个需要修改的值,其他略。)
ROOTNAME rootdbs # Root dbspace name
ROOTPATH ./chunk0 # Path for device containing root dbspace
ROOTOFFSET 0 # Offset of root dbspace into device (Kbytes)
ROOTSIZE 900000 # Size of root dbspace (Kbytes)
# System Configuration
SERVERNUM 2 # Unique id corresponding to a OnLine instance
DBSERVERNAME info2 # Name of default database server
DBSERVERALIASES info2 # List of alternate dbservernames
NETTYPE soctcp,1,50,NET # Configure poll thread(s) for nettype
DEADLOCK_TIMEOUT 60 # Max time to wait of lock in distributed env.
RESIDENT 0 # Forced residency flag (Yes = 1, No = 0)
(四)选择一个可以存放两个数据库服务器的文件系统,建立两个目录,并建立每一个数据库服务器的环境变量文件。
[root@fedora ~]# su - info1
[info1@fedora ~]$ pwd
/home/share/info1
[info1@fedora ~]$ mkdir server1
[info1@fedora ~]$ ls
server1
[info1@fedora ~]$ cd server1
[info1@fedora ~]$ touch chunk0
[info1@fedora ~]$ chmod 660 chunk0
[info1@fedora ~]$ vi setenv.server1
INFORMIXDIR=/home/informix/ids11uc1
export INFORMIXDIR
INFORMIXSERVER=info1
export INFORMIXSERVER
ONCONFIG=onconfig.info1
export ONCONFIG
PATH=/bin:/usr/bin:/usr/sbin:/usr/ucb:/etc:$INFORMIXDIR:$INFORMIXDIR/bin:$INFORMIXDIR/etc:$PATH
export PATH
再打开一个窗口执行info2
[root@fedora ~]# su – info2
[info2@fedora ~]$ pwd
/home/share/info2
[info2@fedora ~]$ mkdir server2
[info2@fedora ~]$ ls
Server2
[info2@fedora ~]$ cd server2
[info2@fedora ~]$ touch chunk0
[info2@fedora ~]$ chmod 660 chunk0
[info2@fedora ~]$ vi setenv.server2
INFORMIXDIR=/home/informix/ids11uc1
export INFORMIXDIR
INFORMIXSERVER=info2
export INFORMIXSERVER
ONCONFIG=onconfig.info2
export ONCONFIG
PATH=/bin:/usr/bin:/usr/sbin:/usr/ucb:/etc:$INFORMIXDIR:$INFORMIXDIR/bin:$INFORMIXDIR/etc:$PATH
export PATH
(五)启动并配置HDR
在Info1窗口中执行
[info1@fedora ~]$ pwd
/home/share/info1
[info1@fedora ~]$ cd server1/
[info1@fedora server1]$ ls
chunk0 setenv.server1
[info1@fedora server1]$ source setenv.server1
[info1@fedora server1]$ oninit –ivy
(启动过程,略)
在Info2窗口中执行
[info2@fedora ~]$ pwd
/home/share/info2
[info2@fedora ~]$ cd server2/
[info2@fedora server1]$ ls
chunk0 setenv.server2
[info2@fedora server1]$ source setenv.server2
[info2@fedora server1]$ oninit –ivy
(启动过程,略)
在Info1窗口中执行0级备份(请参考以前写的文章:Informix之ontape 0级备份和恢复实例详解,地址http://blog.csdn.net/sunxp/archive/2010/08/17/5817910.aspx)
[info1@fedora ~]$ ontape –s –L 0
(备份过程,略)
[info1@fedora ~]$ onmode –d primary info2 --info2为HDR对的另一台
[info1@fedora server1]$ onstat -
IBM Informix Dynamic Server Version 11.50.UC1DE -- On-Line (Prim) -- Up 01:13:18 -- 347572 Kbytes
在Info2窗口中执行恢复
[info2@fedora server2]$ onstat -
IBM Informix Dynamic Server Version 11.50.UC1DE -- On-Line -- Up 00:00:12 -- 347572 Kbytes
[info2@fedora server2]$ onmode -ky
[info2@fedora server2]$ ontape -p
Restore file /home/share/fedora_2_L0 and press Return to continue ...
(恢复过程,略)
Continue restore? (y/n)y
Do you want to back up the logs? (y/n)n
Restore a level 1 archive (y/n) n
Program over.
[info2@fedora server2]$ onstat -
IBM Informix Dynamic Server Version 11.50.UC1DE -- Fast Recovery -- Up 00:00:18 -- 347572 Kbytes
[info2@fedora server2]$ onmode -d secondary info1 --info1为HDR对的另一台
[info2@fedora server2]$ onstat -
IBM Informix Dynamic Server Version 11.50.UC1DE -- Fast Recovery (Sec) -- Up 00:00:38 -- 347572 Kbytes
[info2@fedora server2]$ onmode -m
[info2@fedora server2]$ onstat -
IBM Informix Dynamic Server Version 11.50.UC1DE -- Read-Only (Sec) -- Up 00:01:14 -- 347572 Kbytes
这就代表HDR已经建立了,我们可以做操作了。
(六)测试操作
我们在Server1上建了一个数据库,而同时Server2窗口上用Dbaccess可以看到Server2上数据库也建好了。
注意加chunk做好不要使用绝对路经。
如果你的DRAUTO为:
0 = OFF —— 不自动切换 HDR 环境中的服务器类型
1 = RETAIN_TYPE —— 在 HDR 发生故障时,将从服务器切换为标准服务器。在重新启动 HDR 时,切换回从服务器。
2 = REVERSE_TYPE —— 在 HDR 发生故障时,将从服务器切换为标准服务器。在重新启动 HDR 时,切换为主服务器(将原来的主服务器切换为从服务器)。
(七)常见错误及解决方法
1、提示:[info1@fedora ~]$ cd server1/
server1/: Permission denied.
解决:chmod 755 server1
chmod 755 server2
2、改用户shell类型
使用root用户执行 usermod -s /bin/bash info1
查看shell:
①输入一个系统不认识的命令(如#ig)获得系统提示
②#echo $0 (适用:sh/ksh)
③#ps |grep $$|awk ‘{print $4}’
④#echo $SHELL(用户默认的Shell,但不实时反映当前shell)
如果用户登录之后 UNIX显示提示 符为$,那么所使用的是B Shell。若显示为%提示符,则为 C Shell
3、提示:Physical restore failed - Error opening file ./chunk0.
errno=2
解决:在info上的/home/share/info2/server2 这个目录里执行 ontape -p才行。
补充:在安装数据库的时候,若是平常的HDR双机里应该加入双机信任关系。此处须在info1,info2家目录下加入.rhosts文件,权限为644。
参考文献:http://blog.chinaunix.net/u/28641/showart_359952.html