分类: DB2/Informix
2008-05-31 17:54:10
ER:服务器
本节讨论以下主题:
使用命令行界面是定义 ER 环境的最快方法。至少需要运行两个命令。第一个命令定义初始服务器。在此之后,可以定义任意数量的服务器,但是必须使用 -S
或 --sync
选项将新服务器与已经定义的服务器之一连接起来。如果没有使用 sync
选项,服务器就无法从 ER 的视角相互了解。
下面是可用的服务器定义选项和一个运行命令的示例:
$ cdr define server missing server name usage: cdr define server {options} servername -c server --connect=server connect to server -i min --idle=min idle timeout -s space --send=space dbspace where send queue created (obsolete) -r space --recv=space dbspace where recv queue created (obsolete) -A dir --ats=dir directory for Aborted Transaction Spool -R dir --ris=dir directory for Row Information Spool -I --init initialize server -S server --sync=server synchronize catalog (use with -I) -N --nonroot non root server -L --leaf leaf server $ cdr define server -A /informix/ats-ris/boy -R /informix/ats-ris/boy -I g_80s |
通过以下检查,确定设置已经成功:
onstat -g ath
显示以 ‘CDR’ 开头的复制线程
onstat -g nif
显示另一个复制服务器站点 id 项
cdr list server
显示活跃的连接
onstat -g cat
显示两个服务器都处于 ‘Active’ 状态
12:50:57 Building 'syscdr' database ... 12:51:00 'syscdr' database built successfully. 12:51:01 CDR queuer initialization complete 12:51:01 CDR NIF listening on asf://server_g_1 |
拓扑主要是网络路由问题,与复制本身关系不大。ER 支持多节点环境和多种拓扑。如果路由要求副本跳过几个节点到达目标,那么被跳过的节点不需要了解副本、数据库或复制的表。
ER 节点常常是全连接的根节点,就像图 1 所示的情况:
但是,业务需求可能要求采用其他拓扑。例如,常常采用集中星型(hub-spoke)拓扑,在这种拓扑中有一个大型中心节点(集线器)和一些小型节点。在这种情况下,集线器节点是惟一了解所有其他节点的节点,而 spoke 节点定义为叶节点。另外,ER 环境中的任何节点都可以是 HDR 对。
非根节点有父节点,还可以有子节点。叶节点有父节点,但是不能有子节点。叶节点也不包含完整的 syscdr 数据库。它们只了解它们参与复制的副本的情况。
请记住,复制环境中的任何节点都可以复制到环境中的任何其他节点。
图 4 给出一个层次化树型拓扑:
图 5 给出一个树型拓扑的森林:
表 5 描述可用的服务器节点类型及其性质:
节点类型 | 有无父节点? | 有无子节点? | 有无完整的元数据? | 命令选项 |
---|---|---|---|---|
根节点 | 无 | 有 | 有 | n/a |
非根节点 | 有 | 有 | 有 | -N |
叶节点 | 有 | 无 | 无 | -L |
本节讨论如何管理 Enterprise Replication 服务器,包括列出、修改、停止、重新启动、暂停、继续运行、连接、断开连接和删除服务器。
可以通过运行 cdr list server
查看本地服务器已知的每个服务器的细节。这个命令还输出服务器组的队列的大小。
状态 | 描述 | 状况 | 描述 |
---|---|---|---|
Active | 服务器是活跃的,正在进行复制。 | Connected | 服务器连接已经建立。 |
Deleted | 服务器已经删除,不再捕捉或发送数据,队列被清空。 | Connecting | 服务器正在尝试连接。 |
Quiescent | 服务器处于定义过程中。 | Disconnect | 服务器连接显式地中断。 |
Suspended | 暂停向这个服务器发送复制数据。 | Dropped | 服务器连接由于网络错误而中断,服务器不可访问。 |
Error | 发生一个错误(检查日志,如果需要的话,联系客户支持人员)。 | ||
Local | 这个服务器是本地服务器,而不是远程服务器。 | ||
Timeout | 连接由于空闲超时而中断。 |
清单 14 演示运行这个命令的不同方式:
$ cdr list server -x usage: cdr list server [-c server] servername -c server --connect=server connect to server $ cdr list server SERVER ID STATE STATUS QUEUE CONNECTION CHANGED ----------------------------------------------------------------------- g_00s 2000 Active Dropped 0 Jun 5 10:35:29 g_80s 80 Active Local 0 g_90s 90 Suspend Dropped 0 Jun 5 10:35:39 $ cdr list server g_80s NAME ID ATTRIBUTES --------------------------------------- g_80s 80 atsdir=/informix/ats-ris/boy risdir=/informix/ats-ris/boy $ cdr list server -c g_90s g_90s NAME ID ATTRIBUTES --------------------------------------- g_90s 90 atsdir=/informix/ats-ris/uf risdir=/informix/ats-ris/uf |
可以使用 cdr modify server
命令修改三个服务器属性:
usage: cdr modify server [-i min] [-A dir] [-R dir] [-m p | r] [-l on|off] server -c server --connect=server connect to server -i min --idle=min idle timeout -A dir --ats=dir directory for Aborted Transaction Spool -R dir --ris=dir directory for Row Information Spool -m mode --mode=mode set server mode (primary or readonly) |
还有几个与 ER 相关的服务器配置参数,可以动态地修改这些参数。更多信息请参考 IBM Informix Dynamic Server Enterprise Replication Guide。
可以使用 cdr stop
命令临时停止 ER 线程,而不停止服务器。在使用 cdr stop
时,ER 停止读取逻辑日志和寻找要复制的数据。在 ER 停止时,要确保当时没有数据库活动发生(否则,这个站点就会与其他服务器不同步)。这个站点上的 ER 线程会一直停止,直到运行 cdr start
命令为止。
警告:在停止 ER 时,向这个站点进行复制的其他 ER 服务器会把未完成的事务在它们的发送队列中积累起来,直到这个站点恢复运行(或删除)。
$ cdr stop -x usage: cdr stop [-c server] |
要想重新启动已经停止的 ER 服务器,应该使用 cdr start
。在重新启动服务器时,ER 线程启动并从重放位置(原来停止的位置)继续计算逻辑日志。如果重放的位置指向的逻辑日志不再存在,那么重新启动失败,在服务器上 ER 不处于活跃状态。
$ cdr start -x usage: cdr start [-c server] -c server --connect=server connect to server |
cdr stop
命令会完全关闭所有 ER 线程;与其相反,可以使用 cdr suspend server
命令暂停向服务器复制数据。当 ER 暂停时,源服务器将复制的数据放到发送队列中,并暂停向目标服务器发送数据。源服务器会继续发送其他消息,比如确认和控制消息。
usage: cdr suspend server [-c server] servername -c server --connect=server connect to server |
要想在暂停的服务器上继续运行 ER,应该使用 cdr resume server
。在服务器继续运行之后,发送队列中的数据。
$ cdr resume server -x usage: cdr resume server [-c server] servername -c server --connect=server connect to server |
connect
命令尝试重新连接一个用 cdr disconnect server
命令中断了连接的数据库服务器。
$ cdr connect server -x usage: cdr connect server [-c server] servername -c server --connect=server connect to server |
disconnect
命令中断两个服务器(servername 和 --connect
选项中指定的服务器)之间的连接。如果没有使用 --connect
选项,那么这个命令中断 servername 和默认服务器(由 INFORMIXSERVER
环境变量指定)之间的连接。
$ cdr disconnect server -x usage: cdr disconnect server [-c server] servername -c server --connect=server connect to server |
要想删除 ER 服务器,应该使用 cdr delete server
。奇怪之处在于,必须运行 cdr delete server
两次。例如,要想从三节点的 ER 环境中删除服务器组 g_80s,那么需要运行以下命令:
cdr delete server g_80s cdr delete server --connect=g_90s g_80s |
第一个命令从 ER 环境中删除本地服务器组(g_80s),第二个命令连接复制环境中的另一个服务器并从那个服务器上删除 g_80s。然后,这个修改会复制到复制环境中的所有其他服务器。
$ cdr delete server -x usage: cdr delete server servername -c server --connect=server connect to server -f --force force the server to be deleted, even in an error condition |
现在来练习设置 ER 服务器。这个练习帮助您回顾 cdr
命令并设置本教程中用来测试的两个服务器。
练习:使用已经定义的两个测试引擎和 cdr
命令,设置两个相互连接的 ER 服务器,并在每个服务器上查看对方。
练习:应该执行以下步骤:
CDR_QDATA_SBSPACE
中设置它的名称。
cdr define server -A /informix/ats-ris/boy -R /informix/ats-ris/boy -I g_80s
cdr define server -A /informix/ats-ris/uf -R /informix/ats-ris/uf -I g_90s -S g_80s
onstat -g nif
,应该会看到另一个服务器。在每个节点上运行这个命令
cdr list server
。应该会在列表中看到定义的两个服务器。在每个节点上运行这个命令