(其中紅色字體爲手工輸入,藍色字體爲主要變化關注點。)
一、本實例實驗環境
$ 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