X
首页 Cheetah技术专栏 对Enterprise Replication 使用主复制
对Enterprise Replication 使用主复制

主复制是 IBM® Informix® Dynamic Server, Version 10.0 的新 Enterprise Replication 特性,是在 ER 节点之间复制数据的可取方法。探索主复制相对于传统复制的优势,以及为什么 ER 客户应该使用主复制,并给出关于使用主复制的更多信息。

主复制简介及其用法

旧版本的 Enterprise Replication 不能在复制创建时发现源节点与模板节点之间的数据类型不匹配,而只能在数据遭到损坏时才发现不匹配现象。例如,若使用传统复制(非主复制),有可能定义一个这样的复制:在源节点上有一个 int8 列,而在其他节点上有一个整数列。这种不匹配只有在已经发生数据损坏的时候才能检测到。但是在 Version 10.0 中,通过定义主复制,可以保证 Enterprise Replication 环境中各节点之间的一致性。主复制存储关于参与表的被复制列属性的字典信息,以便在定义复制时 Enterprise Replication 可以检查主定义与本地参与者定义之间的一致性。通过使用主复制,可以避免在运行时发生由于源节点与目标节点之间的数据不匹配而导致的数据损坏。每当主复制被启动时,还将发生对复制属性的检验。

为指定一个主复制,可以使用 cdr define replicate 命令加 --master 选项。--master 选项 (-M) 要求指定主表字典所在的主节点。主表字典用于比较所有复制参与者上的模式,以确保一致性。如果那些表不存在,那么可以通过另一个选项使用主复制在目标节点上创建这些表。

要了解关于主复制的更多信息,请参阅 Informix Dynamic Server Information Center 中的 Defining Master Replicates。

假设您创建一个 logged 数据库和表:

>dbaccess - -
create database test with log;
create table tab1 (c1 integer primary key, c2 integer) with crcols;
 


然后可以使用 -M 选项定义主复制,将主节点指定为 g_pkcdr.1:

>cdr define repl rep1 -M g_pkcdr1 -C "ignore" "test@g_pkcdr1:pravin.tab1"
"select * from tab1" "test@g_pkcdr2:pravin.tab1" "select * from tab1"
Verification of test@g_pkcdr1:pravin.tab1 started
Verification of test@g_pkcdr1:pravin.tab1 is successful
Verification of test@g_pkcdr2:pravin.tab1 started
Verification of test@g_pkcdr2:pravin.tab1 is successful
cdr start repl rep1
 


这些命令创建一个主复制,这个主复制首先检验两个节点上的模式。 cdr list repl 命令在 REPLTYPE 字段表明这个复制是主复制:

cdr list repl rep1
CURRENTLY DEFINED REPLICATES
---------------------------------------------------
REPLICATE:        rep1
STATE:            Active ON:pkcdr1
CONFLICT:         Ignore
FREQUENCY:        immediate
QUEUE SIZE:       0
PARTICIPANT:      test pravin.tab1
OPTIONS:          transaction,fullrow
REPLTYPE:         Master
 

依赖于主复制的 Enterprise Replication 特性

Version 10.0 中的以下新特性要求使用主复制:

执行对复制表的 alter 操作
为了支持对一个正在被复制的表的在线模式更改(SQL alter 操作),可以使用主复制。必要的话,可以使用下面描述的 re-mastering 过程将一个传统复制改为主复制。要了解关于 Version 10.0 中 alter 支持的更多信息,请参阅 Informix Dynamic Server Information Center 中的 Performing Alter Operations on Replicated Tables 。

模板
模板为简化对大规模 Enterprise Replication 的管理提供了一种方式。模板在内部使用主复制。主复制为模板提供了完全数据库复制,包括在目标节点上自动创建表的能力。要了解更多信息,请参阅 Informix Dynamic Server Information Center 中的 Using Templates to Set up Replication。

使用影子复制重新同步数据
即使使用传统复制,也可以对那些不同步的复制进行修复。该特性在内部定义 4 个不同的影子复制,用于执行修复过程。这些影子复制是主复制。要了解关于重新同步的更多信息,请参阅 Informix Dynamic Server Information Center 中的 Resynchronizing Data Among Replication Servers。

 

使用主复制的优点

使用主复制的主要优点有:

检验复制的所有参与者是否具有与主复制定义相匹配的表,以及被复制列的属性,确保数据完整性。
如果参与者没有包含主复制中指定的表,主复制可以为其自动生成这些表。但是,如果表中包含用户定义类型(UDT),除非所有源节点和目标节点上都存在相同的 UDT,否则 Enterprise Replication 不能创建这样的表。
允许对复制表进行 alter 操作。
为模板提供基础。
为将来的要求模式一致性的 Enterprise Replication 功能的开发提供基础。

关于使用主复制的警告

与传统复制相比,使用主复制具有以下一些限制:

定义主复制的所有节点之间必须有直接连接。Enterprise Replication 必须直接连接到每个服务器,以处理主模式检验和可选的表创建。因此,在 sqlhosts 文件中,需要提供对应于所有节点的条目。
主复制要求参与的所有服务器正在运行,因为在定义期间,需要检查主字典和本地字典,以确保它们是一致的。
不能将叶子节点配置成主节点,因为它不能直接访问其非根服务器之外的所有其他节点。


影子复制

影子复制是已有的或基本的复制的一个副本。Enterprise Replication 使用影子复制来管理对复制表的 alter 和 repair 操作。影子复制在系统中存活很短的一段时间,当不再需要的时候就会被删除。为了将传统复制转换为主复制,必须创建一个影子复制。要了解关于如何 remaster 复制的更多信息,请参阅 Informix Dynamic Server Information Center 中的 Remastering a Replicate。对于手动 re-mastering,在创建影子复制之后,接下来的步骤是使用 cdr swap shadow 命令交换基本复制和影子复制。

按照 cdr define replicate 中的描述,用 cdr define replicate 命令加 --mirrors 选项创建一个影子复制。当定义一个影子复制时,它的状态总是和基本复制的状态一样。如果改变基本复制的状态,则它的所有影子复制的状态也随之发生相同的改变。

要了解更多信息,请参阅 Informix Dynamic Server Information Center 中的 Defining Shadow Replicates 。


将传统复制转换成主复制

可以使用新的 cdr remaster 命令将已有的传统复制转换成主复制。建议您这样做,以便从新的 Version 10.0 特性中受益。

例如,假设您创建一个 logged 数据库和表:

>dbaccess - -
create database test with log;
create table tab1 (c1 integer primary key, c2 integer) with crcols;
 


然后定义一个传统复制:

>cdr define repl rep1 -C "ignore" "test@g_pkcdr1:pravin.tab1" "select * from tab1"
"test@g_pkcdr2:pravin.tab1" "select * from tab1"
>cdr start rep rep1
 


现在可以使用下面的命令将这个传统复制转换成主复制(也可以在 SELECT 语句中指定要被复制的列的列表):

>cdr remaster -M g_pkcdr1 rep1 "select * from tab1"
 


re-mastering 过程在内部创建一个影子复制 Shadow_4_rep1_GMT1113917066_GID100_PID26153,用于跟踪旧的传统复制定义,然后将新的主复制重新命名为初始的复制名称。当影子复制还存在的时候,可以用 cdr list repl 命令查看它:

>cdr list repl
CURRENTLY DEFINED REPLICATES
-------------------------------
REPLICATE:        Shadow_4_rep1_GMT1113917066_GID100_PID26153
STATE:            Active ON:pkcdr2
CONFLICT:         Ignore
FREQUENCY:        immediate
QUEUE SIZE:       0
PARTICIPANT:      test:pravin.tab1
OPTIONS:          transaction,fullrow
REPLTYPE:         Shadow
PARENT REPLICATE: rep1
REPLICATE:        rep1
STATE:            Active ON:pkcdr2
CONFLICT:         Ignore
FREQUENCY:        immediate
QUEUE SIZE:       0
PARTICIPANT:      test:pravin.tab1
OPTIONS:          transaction,fullrow
REPLTYPE:         Master
 


当系统中不再存在属于旧模式的日志记录时,影子复制将被自动删除,系统中就只有新的主复制。