1.1.1 虚拟集群镜像表
1.1.1.1 功能说明
虚拟集群镜像表功能是基于虚拟集群多VC概念基础之上的功能,主要用于在两个VC之间给虚拟集群的表设置镜像关系,从而使用户对其中一张表的数据写操作(DDL, DML, LOAD)能实时同步到镜像关系对应的另一张表。
本功能要求分别属于两个不同VC表具有相同的库名和表名时,才可以有镜像关系。并且删除已存在镜像关系时,要求主表和镜像表都是可用的。
1.1.1.2 命令说明
虚拟集群镜像功能相关的命令主要包含创建镜像,删除镜像两类。使用镜像功能需要保证主表和镜像表所在的两个VC的HASHMAP是相同的。可以用如下方法确认两个VC的HASHMAP是否相同。
1. 查看两个VC的distribution。
gcadmin showdistribution vc vc1 |
镜像功能要求两个VC的distribution的主分片数相同。比如distribution 1有3个主分片,那么distribution2就要求也有3个主分片,备份分片数无要求。
2. 比对两个VC的HASHMAP是否相同。HASHMAP的ID等于distribution id。执行如下SQL后结果与以下相同就说明vc1的hashmap1与vc2的hashmap2相同。
gbase> select distinct(res.r), count(res.r) from (select count(*) r from gbase.nodedatamap t where t.data_distribution_id in (1,2) group by t.hashkey, t.nodeid) res group by res.r; +---+--------------+ | r | count(res.r) | +---+--------------+ | 2 | 65536 | +---+--------------+ |
为了使两个VC的HASHMAP相同,虚拟集群镜像功能版本增加了如下命令来初始化HASHMAP。
INITNODEDATAMAP FROM VC1 |
比如有两个VC,VC1已经使用INITNODEDATAMAP命令初始化过HASHMAP,VC2需要使用INITNODEDATAMAP FROM VC1来初始化HASHMAP,这样VC1和VC2和HASHMAP就会相同。
1.1.1.2.1 创建镜像
虚拟集群镜像功能提供了三种方式创建表镜像。分别是:
1. 创建单个表镜像;
2. 以库为单位创建表镜像;
3. 同时创建主表和镜像表。
l 创建单个表镜像
给已存在的表创建镜像表时,使用如下命令:
ALTER TABLE VC1.DB.T1 CREATE MIRROR TO VC2; |
执行以上命令要求VC1.DB.T1表和VC2.DB库必须存在,否则报错。如果VC2.DB.T1表也存在,以上命令也会报错,如果需要强制给VC1.DB.T1表创建镜像,那么需要使用改下命令:
ALTER TABLE VC1.DB.T1 CREATE MIRROR TO VC2 FORCE; |
以上命令使用FORCE参数,功能是当VC2.DB.T1表存在时,也会强制创建VC1.DB.T1的镜像表。创建过程根据这两个表的表结构是否相同而略有不同。当VC1.DB.T1与VC2.DB.T1的表结构不相同时,该命令会删除VC2.DB.T1表,然后使用VC1.DB.T1表的建表SQL重新创建VC2.DB.T1表,最后再同步VC1.DB.T1表数据到VC2.DB.T1表。当VC1.D