目的:了解ER复制基本概念,主-从复制,随处更新复制;HDR的备机更新新功能.
测试环境配置:单虚拟机环境下的SUSE10SP2, 数据库版本分别为IDS11.50UC5, IDS10.00UC10, IDS9.40UC4W4
系统配置:
HDR配置为/opt/ids111, /opt/ids112 安装IDS11.50
ER配置1 为/opt/info10 安装IDS10.00
ER配置2 为/opt/info9 安装IDS9.40
整体结构
/etc/hosts文件内容
192.168.80.120 suse10.site suse10
192.168.80.122 suse10b
192.168.80.130 suse10c
192.168.80.140 suse10d |
网卡上启3个子IP,使各服务器更近似独立服务器.
各INFORMIX数据库的sqlhosts均包含以下内容
ids11 group - - i=11
ids111_online_net onsoctcp suse10 11502 g=ids11
ids112_online_net onsoctcp suse10b 11504 g=ids11
ids9 group - - i=12
ids9_online_net onsoctcp suse10c 9142 g=ids9
ids10 group - - i=13
ids10_online_net onsoctcp suse10d 9132 g=ids10 |
1,IDS11.50先行配置HDR.在SQLHOSTS里明确,配置成HDR的服务器应当在同一个group中,这里是ids11.
具体在单机上配置HDR服务器,参见:http://blog.chinaunix.net/u/28641/showart_359952.html
2,ER环境配置,所有4个服务器均配置一个名为erdbs,大小为20M的dbspaces 和一个名为ersbs,大小为10M的smartblobspace.
IBM Informix Dynamic Server Version 11.50.UC5 -- On-Line (Prim) --
Up 04:48:57 -- 152336 Kbytes
Dbspaces
address number flags fchunk nchunks pgsize flags
owner name
4aed6808 1 0x60001 1 1 2048 N B
informix rootdbs
4aed6eb0 2 0x60001 2 1 2048 N B
informix erdbs
4afa7230 3 0x68001 3 1 2048 N SB
informix ersbs
3 active, 2047 maximum
Chunks
address chunk/dbs offset size free bpages flags
pathname
4aed6968 1 1 0 100000 35352 PO-B-
./dbs/rootdbs
4afa7390 2 2 0 10000 8291 PO-B-
./dbs/erdbs
4afa7568 3 3 0 5000 4586 4587 POSB-
./dbs/ersbs
Metadata 360 268 360
3 active, 32766 maximum
IBM Informix Dynamic Server Version 11.50.UC5 -- Updatable (Sec) --
Up 03:57:34 -- 144144 Kbytes
|
并修改配置ONCONFIG里的相应参数,并使之生效(需重启数据库).
CDR_DBSPACE erdbs #syscdr使用的空间,不配置将使用rootdbs
CDR_QHDR_DBSPACE erdbs #事务记录空间,默认rootdbs(T
CDR_QDATA_SBSPACE ersbs #行数据SB空间(必须配置,否则无法建立CDR)
以上完成后,基本的ER所需环境就已经配置完成,往下开始为配置ER
其中ids11将与ids10配置成为 随处更新 模式, ids11将与ids9配置成 主从更新模式
3.ER配置.以下均使用informix带相应目录环境操作, ids111> 表示在ids111目录下操作,info9>表示在info9目录下操作
在ids111为HDR主机的情况下,分别在ids111,info9,info10上建立名为erdb,非日志缓冲的库,并创建测试表t1
ids111> echo "create database erdb with log;" | dbaccess sysmaster
info9> echo "create database erdb with log;" | dbaccess sysmaster
info10> echo "create database erdb with log;" | dbaccess sysmaster
ids111> echo "create table t1(id char(10),name char(10),primary key(id));" | dbaccess erdb
info9> echo "create table t1(id char(10),name char(10),primary key(id));" | dbaccess erdb
info10> echo "create table t1(id char(10),name char(10),primary key(id));" | dbaccess erdb
注意: 做为测试表的t1必须有个primary key.
1)定义ER复制的各服务器
ids111> cdr define server -I ids11 (或者使用长格式 cdr define server --init=ids11)
这里使用的是group,而不是servername.
ids111> cdr define server -c ids9 -I ids9 -S ids11
对应的长格式命令为 cdr define server --connect=ids9 --init ids9 --sync=ids11
ids111> cdr define server -c ids10 -I ids10 -S ids11
对应的长格式命令为 cdr define server --connect=ids10 --init ids10 --sync=ids11
定义ids9和ids10均在ids11上通过--connect连接到目标服务器上执行.
定义完成后,在各目录上执行 cdr list server 显示定义好的server, STATUS为local的为本机,connected为远程连接.
SERVER ID STATE STATUS QUEUE CONNECTION CHANGED
-----------------------------------------------------------------------
ids10 13 Active Connected 0 Jun 11 14:43:49
ids11 11 Active Local 0
ids9 12 Active Connected 0 Jun 11 12:08:14
2)定义全局复制replicate r_t1,用于复制t1表.
ids111> cdr define replicate --conflict=ignore r_t1 \
"P erdb@ids11:informix.t1" "select * from t1" \
"R erdb@ids9:informix.t1" "select * from t1" \
" erdb@ids10:informix.t1" "select * from t1"
P表示为主服务器,R表示仅复制, 空 表示建立的是随处更新.
此时,执行cdr list replicate显示状态
ids111> cdr list replicate
CURRENTLY DEFINED REPLICATES
-------------------------------
REPLICATE: r_t1
STATE: Inactive ON:ids11 --此时并不开启复制.
CONFLICT: Ignore
FREQUENCY: immediate
QUEUE SIZE: 0
PARTICIPANT: erdb:informix.t1
OPTIONS: transaction,fullrow
REPLID: 720897 / 0xb0001
REPLMODE: PRIMARY ON:ids11
APPLY-AS: INFORMIX ON:ids11
开启复制
ids111> cdr list replicate r_t1
此时list replicate的状态改变为
CURRENTLY DEFINED REPLICATES
-------------------------------
REPLICATE: r_t1
STATE: Active ON:ids11 --开启.
CONFLICT: Ignore
FREQUENCY: immediate
QUEUE SIZE: 0
PARTICIPANT: erdb:informix.t1
OPTIONS: transaction,fullrow
REPLID: 720897 / 0xb0001
REPLMODE: PRIMARY ON:ids11
APPLY-AS: INFORMIX ON:ids11
这样整个ER以及一个r_t1复制就建立完成.
测试ER复制,在ids111上insert 一条删除记录,在ids112(HDR),info9(ER主从),info10(ER随处更新)都将同步该记录
ids111> echo "insert into t1 values('001','test001');" | dbaccess erdb
info9 > echo "select * from t1;" | dbaccess erdb
Database selected.
id name
001 test001
1 row(s) retrieved.
在info10上的更新同样将更新到所有的服务器上
info10> echo "insert into t1 values('002','test002');" | dbaccess erdb
info9 > echo "select * from t1;" | dbaccess erdb
Database selected.
id name
001 test001
002 test002
2 row(s) retrieved.
由于ids11与ids9使用的是主从更新,因此在info9上的更新将不会更新到其它服务器上
info9> echo "insert into t1 values('003','test003');" | dbaccess erdb
ids111> echo "select * from t1;" | dbaccess erdb
Database selected.
id name
001 test001
002 test002
2 row(s) retrieved.