GBase 8a V95 中VC信息的存储和实现
前言
GBase 8a MPP Cluster V95一套物理集群由一组管理集群(coordinator)管理多个虚拟集群VC,每个虚拟集群VC是一组独立的gnode节点。GBase 8a MPP Cluster V95的VC信息保存在哪里?前端的哪些操作涉及到VC?本文总结了GBase 8a V95中VC信息的存储和实现,以及涉及到VC的操作。适合对GBase 8a架构有一定了解的朋友作为工具来检索使用。
GBase 8a MPP Cluster V95一套物理集群由一组管理集群(coordinator)管理多个虚拟集群VC,每个虚拟集群VC是一组独立的gnode节点,多个虚拟集群VC共同由一组管理集群进行统一管理。
VC信息的存储和区分主要由管理集群(coordinator)负责。用户的数据在VC内各个节点上分布存储,Distribution是数据在VC中节点的分布方式,不同的distribution ID标识不同的分布规则,用户表需要选择一个distributionID,表数据根据选定的distributionID分布规则进行分布。
- GBase 8a MPP Cluster每个coordinate(gcluster+gcware)节点都存储了所有VC的元数据、所有的user以及权限信息。
- 表属于某个distribution,distribution属于某个VC。Gcluster中表元数据有:VC id,表的类型(分布表or复制表),distribution id。这些信息可以在gbase.table_distribution系统表中查看到。
- gcware中元数据有:coordinate cluster信息、free node信息、VC信息、VC与distribution对应关系、所有节点(coordinator和gnode)状态等。
- 每个user有一个默认VC(也可以没有默认VC),集群根据username自动选取此用户的默认VC为当前VC,没有默认VC的user可以登录集群但不能操作。
- Coordinate(gcluster+gcware)的配置参数不区分VC,所有VC共用。
- Coordinate(gcluster+gcware)的log不区分VC,所有VC的log系统也沿用一套。
- 每个VC内最多2个distribution,gcware存储VC、distribution、VC与distribution的对应关系。
- VC.DB在这个VC的所有节点上都有,与distribution无关,DB中的表可以指定在这个VC的其中某一个distribution上,如:
gcadmin showdistribution
执行下面语句时,gccli需带-c参数使hint有效。
create table /+ distribution(1)/ tt as select * from t1;
select data_distribution_id from gbase.table_distribution where index_name=‘test_hint.tt’; - 系统库gbase、information_schema、performance_schema、gctmpdb是所有VC共享;
gclusterdb每个VC各自独立;gclusterdb.rebalancing_status表每个VC一个;
gclusterdb.nodedatamap与gbase.nodedatamap内容一致。 - 权限信息在系统库gbase库的下列表中:
user、db 、tables_priv、columns_priv、procs_priv、vcs_priv
create user 在所有coordinate节点上创建用户
set default_vc for user=vc_name 在vc上创建用户,用户拥有usage权限
grant all on . to user;
grant all on procedure db.func to user
grant all on function db.proc to user
grant all on vc.. to user
grant all on procedure vc.db.func to user
grant all on function vc.db.proc to user
在vc的所有data节点上创建usage权限用户,同时更新授权涉及的权限表
revoke 语法相同
如果用户不再拥有一个VC的任何访问权限时,将删除该VC所有data节点上的该用户,如:
revoke all on VC.. FROM USER
DROP USER U 删除gcluster和相关data节点上用户
RENAME USER oldu to newu修改权限表中user记录 - 一个VC可以有两个distribution 受gcChangeInfo.xml p d pattern 影响
- 支持调整gbase.nodedatamap来调整数据分布
- 所有VC的nodedatamap都存于gbase.nodedatamap
- rebalance只能操作当前VC下的库表,不支持操作其他VC下库表,不支持指定VC限定符。
- rebalance调度线程需要调度所有VC的rebalance任务,所有VC共享rebalance所有运行参数,注意不同VC需要分别使用gcluster_rebalancing_concurrent_count限制。
每个VC有自己独立的gclusterdb.rebalancing_status,访问需加VC信息。 - failover区分不同VC分别处理,failover结构中包含vcid信息
- show datacopymap vc.db.table
dp_state
0正常
2数据异常
4进程异常,如gbased异常
16元数据异常
18数据和元数据全异常 - VC之间的操作,DDL\DML\SELECT内部转换为多distribution操作,相对dblink省了在本地生成dblink表数据的步骤。