Informix Grid介绍及建立与管理

Grid是Informix 11.70开始引入的新特性,Grid是依据ER构建的。相对于ER,Grid有以下的优势或者说是扩展。
1,管理数据库服务器,例如:增加/删除chunk、增加逻辑日志或者修改配置参数。
2,更新数据库结构,例如:修改表或者增加表。
3,运行或创建存储过程、UDR。
4,更新数据。
5,创建表时启用复制。
6,更改已复制表时更改复制定义。
7,复制文件到GRID的其他服务器上。

以下将建立一个grid,同时会创建数据库,创建复制和导入数据。
首先将创建2个服务器节点的grid,后续将增加1个节点,共3个节点。各节点应当建立信任机制。

1,3个节点以下是SQLHOSTS配置文件内容如下,每个节点各属于不同的组。

gcdr1           group           -               -       i=110
db11            onsoctcp        192.168.80.64   12111   g=gcdr1
gcdr2           group           -               -       i=120
db12            onsoctcp        192.168.80.64   12112   g=gcdr2
gcdr3           group           -               -       i=130
db13            onsoctcp        192.168.80.64   12113   g=gcdr3

2,各个节点的均需包含ER所必须的参数CDR_QDATA_SBSPACE。

3,在db11上定义复制服务器。

[informix@db11 db11]$ cdr define server -c gcdr1 -I gcdr1 
[informix@db11 db11]$ cdr define server -c gcdr2 -S gcdr1 -I gcdr2

4,创建grid,将现有的两个节点加入到grid中。

[informix@db11 db11]$ cdr define grid grid1 -a

5,授权informix在节点gcdr1上执行grid管理。

[informix@db11 db11]$ cdr enable grid -g grid1 -u informix -n gcdr1

6,查看grid配置,使用cdr list grid命令

[informix@db11 db11]$ cdr list grid 
Grid Node User 
------------------------ ------------------------ ------------------------ 
grid1 gcdr1* informix 
gcdr2

7,查看grid复制集

[informix@db11 db11]$ cdr list replicateset 
Ex T REPLSET PARTICIPANTS 
----------------------------------------------- 
N N grid1

注:Ex表示是否独占式,T表示是否使用模板

以上完成grid的创建,以下将对grid进行一些操作,以加深grid相对于ER的优势。

1,为grid所有节点增加dbspace。

[informix@db11 db11]$ dbaccess sysadmin - 
Database selected. 

> EXECUTE FUNCTION ifx_grid_function('grid1', 
> 'task("create dbspace","userdbs", "./dbs/userdbs","20000K","0")'); 

(expression) 'Space 'userdbs' added.' 

1 row(s) retrieved.

执行完成后,应在db11和db12上确认userdbs已经增加完成。

2,在grid上创建testdb库和测试表tab1

[informix@db11 db11]$ dbaccess sysadmin - 
Database selected. 

> EXECUTE PROCEDURE ifx_grid_connect('grid1', 1); 

Routine executed. 

> CREATE DATABASE testdb WITH LOG; 

Database closed. 

CREATE TABLE tab1 
( 
col1 char(20), 
col2 char(200), 
col3 varchar(255), 
primary key(col1) 
) IN userdbs; 
EXECUTE PROCEDURE ifx_grid_disconnect(); 
Database created. 

> > > > > > > 
Table created. 

> 

Routine executed.

执行完成后,应在db11和db12上均可以看testdb库和tab1均已经创建。

3,查看grid各节点状态信息,复制集信息。均应该是正常的。

[informix@db11 db11]$ cdr list grid -v grid1 

[informix@db11 db11]$ cdr list repl 

[informix@db11 db11]$ cdr list replset

4,往tab1插入少量数据,在两个节点上均应该能查询到。

[informix@db11 db11]$ dbaccess testdb - 
Database selected. 

> insert into tab1 values('0000000001','test0000000001','information:0000000001'); 

1 row(s) inserted. 

> insert into tab1 values('0000000002','test0000000002','information:0000000002'); 

1 row(s) inserted.

5,在表tab1上增加字段,在两个节点上均应该能查到同步。

[informix@db11 db11]$ dbaccess testdb - 
Database selected. 
> EXECUTE PROCEDURE ifx_grid_connect('grid1', 1); 

Routine executed. 

> ALTER TABLE tab1 ADD(col4 integer); 
EXECUTE PROCEDURE ifx_grid_disconnect(); 
Table altered. 

> 

Routine executed.

增加grid节点

增加grid节点,官方文档上提到了使用ifxclone进行克隆,将自动新节点自动加入到grid中。但实际环境中,可能会有不同操作系统的节点,即不能使用ifxclone的方式创建,只能手工建好库手动加入到grid当中。

1,定义新的复制服务器

[informix@db11 db11]$ cdr define server -c gcdr2 -S gcdr1 -I gcdr3

2,加入到grid当中

[informix@db11 db11]$ cdr change grid grid1 -a gcdr3

3,通过cdr list grid -v grid1 可以看到新加入到gcdr3的的状态都是挂起的

[informix@db11 db11]$ cdr list grid -v grid1 
Grid Node User 
------------------------ ------------------------ ------------------------ 
grid1 gcdr1* informix 
         gcdr2 
         gcdr3 
Details for grid grid1 

Node:gcdr1 Stmtid:2 User:informix Database:sysadmin 2014-12-07 16:41:32 
task("create dbspace","userdbs", "./dbs/userdbs","20000K","0") 
ACK gcdr1 2014-12-07 16:41:32 
'Space 'userdbs' added.' 
ACK gcdr2 2014-12-07 16:41:33 
'Space 'userdbs' added.' 
PENDING gcdr3

4,确定gcdr3相对于gcdr1的状态,执行重做操作使gcdr3与gcdr1同步。

[informix@db11 db11]$ dbaccess sysadmin -

Database selected.

> EXECUTE PROCEDURE ifx_grid_redo('grid1', 'gcdr1', 'gcdr3', NULL, '2');

Routine executed.

注:最后的数字2是列出的stmtid号

5,再次查看gird1状态,发现该grid操作已经是正常。不过,对于复制来说,数据不会重新复制,需考虑手工同步。

[informix@db11 db11]$ cdr list grid -v grid1 
Grid Node User 
------------------------ ------------------------ ------------------------ 
grid1 gcdr1* informix 
         gcdr2 
         gcdr3 
Details for grid grid1 

Node:gcdr1 Stmtid:2 User:informix Database:sysadmin 2014-12-07 16:41:32 
task("create dbspace","userdbs", "./dbs/userdbs","20000K","0") 
ACK gcdr1 2014-12-07 16:41:32 
'Space 'userdbs' added.' 
ACK gcdr2 2014-12-07 16:41:33 
'Space 'userdbs' added.' 
ACK gcdr3 2014-12-07 17:16:28 
'Space 'userdbs' added.'

对于grid,推荐使用openadmin图型化界面来管理,比较容易。管理项位于 复制-网格部分。

本文参考《IBM Informix Enterprise Replication Guide》一书相关内容。

标签: none

添加新评论