Oushu DB 管理指南之虚拟集群(上)

简介: OushuDB从4.4.0.0版本开始支持虚拟集群来管理节点及其队列。虚拟集群可以使用户的资源使用限定在若干节点上,从而达到合理分配资源并隔绝错误。目前所有关于虚拟集群的元数据信息记录在系统表pg_vcluster中。

image.png

虚拟集群
OushuDB从4.4.0.0版本开始支持虚拟集群来管理节点及其队列。虚拟集群可以使用户的资源使用限定在若干节点上,从而达到合理分配资源并隔绝错误。目前所有关于虚拟集群的元数据信息记录在系统表pg_vcluster中。

1. 特殊虚拟集群

OushuDB在初始化时会自动创建名为vc_default的虚拟集群,此虚拟集群不可删除,并自动配有vc_default.pg_root和vc_default.pg_default资源队列。OID为10的role(通常为gpadmin)会自动绑定vc_default.pg_default。

2. 虚拟集群初始化

vc_default可以在初始化时获得节点。默认情况下,所有slaves文件下的节点都会自动加入vc_default。用户同样可以在hawq init的时候指定vcluster_config,来自定义节点。更具体的,vcluster_config为一个指向虚拟集群配置文件的文件路径,而虚拟集群配置文件的格式如下:每个条目一行且每个条目由两列构成,第一列为节点域名,第二列为虚拟集群名,若第二列为空则视为vc_default,例如:

seg1
seg2 vc1
seg3 vc2
seg4 vc2

则vc_default含有seg1节点,同时创建vc1包含seg2,创建vc2包含seg3和seg4
此外初始化时还会将hash_table_bucket_number按照节点个数平均分配给各个虚拟集群。

3. 创建虚拟集群

CREATE VCLUSTER <name> [
  WITH (SEGMENTS='<hostnames>' | SEGMENTFILE='<hostfile>'
        [, <VCPROPERTY>=<value> [, ...] ])
]
where <VCPROPERTY>=<value> is:
   <hash_table_bucket_number> = <integer>
|  <max_nvseg_perquery> = <integer>
|  <max_nvseg_perquery_perseg> = <integer>
|  <magma_hash_table_nvseg_perseg> = <integer>

其中SEGMENTS=’’是一组节点的域名,可由’,’分割,例如:SEGMENTS=’seg1,seg2,seg3’。 每个被分割的域名可以支持如下的扩展匹配:匹配区域由’[]’定义,模式内由’,’分割,利用’..’来进行循环。 具体来讲模式内每个条目有如下三种形式:
● X 即为 X
● X..Y 表示从X到Y(闭区间)
● X..Y..S 表示从X到Y(闭区间),步长为S
其中X,Y,S均为整数,举例:

192.168.1.[1,2,3..4,5..10..2], hawq[1..2]

被解析为:

192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.7
192.168.1.9
hawq1
hawq2

SEGMENTFILE=’’是一个包含segment域名的文件位置,文件内容的语法和SEGMENT语法一致,且支持’n’分隔,支持空行
每一个新创建的虚拟集群会自动创建两个资源队列,加入新虚拟集群的名字为newvc,则资源队列名为newvc.pg_root,newvc.pg_default。
需要注意的是DDL中SEGMENTS和SEGMENTFILE里面的内容全是域名。即使写成IP也会被当成域名,值得庆幸的是IP作为域名会被解析成自身,但不幸的是会让我们产生歧义。更具体地,假设域名localhost对应IP为127.0.0.1,我们不能同时加入localhost和127.0.0.1,因为他们IP冲突。
另外,我们不会验证segments和segmentfile中的域名是否真实有效,也就是说即使你随便胡编乱造节点的域名,vc也会把它加入其中,只是这个节点永远不可用。通常情况下这不会发生问题,但有时他会触发以下三种错误:
● 申请资源:VCluster %d has %d of %d segments %s unavailable, exceeds %.1f%% defined in GUC hawq_rm_rejectrequest_nseg_limit.
● 申请资源配额:VCluster %d has %d of %d segments %s unavailable, exceeds %.1f%% defined in GUC hawq_rm_rejectrequest_nseg_limit.
● 日志中出现:RM: Failed to fix MemCoreRatio: Expects at least %d segments available before first time fixing cluster memory to core ratio, currently %d available segments are ready.
这是因为虚拟集群中又太多的虚假节点,导致超过阈值从而失败。
此外一种容易出现问题的情况是:你试图加入127.0.0.1,但是手误写成了127.00.1,这不会失败,但远不是你所期望的。当然如果你明确知道加入的节点已经发送过心跳,可以通过pg_segment_configuration来确认其信息是否正确。

相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
目录
相关文章
|
11月前
|
存储 NoSQL 数据库
无主复制系统(1)-节点故障时写DB概述
单、多主复制的思路都是:客户端向某主节点发写请求,而DB系统负责将写请求复制到其他副本。
67 0
|
域名解析 SQL
Oushu DB 管理指南之虚拟集群(下)
随着虚拟集群的引入,有些GUC不再是全局范围的定义而是从属于虚拟集群的属性,我们将这些GUC移入pg_vcluster中,将其作为虚拟集群的属性。
188 0
Oushu DB 管理指南之虚拟集群(下)
Oushu DB 管理指南之资源管理(上)
在任意时刻,OushuDB中可能有很多个并发的查询在运行。这些查询属于不同的用户。用户的优先级可能有高有低。我们需要一种方式 来合理的给各个用户分配其可以使用的系统资源,包括CPU和内存等。
114 0
Oushu DB  管理指南之资源管理(上)
|
运维 容灾 关系型数据库
【DB吐槽大会】第79期 - PG standby不支持配置多个上游节点
大家好,这里是DB吐槽大会,第79期 - PG standby不支持配置多个上游节点
|
关系型数据库 数据库 PostgreSQL
【DB吐槽大会】第38期 - PG 不能自动创建(扩展)分区
大家好,这里是DB吐槽大会,第38期 - PG 不能自动创建(扩展)分区
|
存储 关系型数据库 Serverless
【DB吐槽大会】第68期 - PG server less场景下的quota控制灵活性较弱
大家好,这里是DB吐槽大会,第68期 - PG server less场景下的quota控制灵活性较弱
|
SQL 资源调度 并行计算
【DB吐槽大会】第54期 - PG 资源隔离、管理手段较少
大家好,这里是DB吐槽大会,第54期 - PG 资源隔离、管理手段较少
|
SQL 数据库 Windows
SQL Server 跨网段(跨机房)复制
原文:SQL Server 跨网段(跨机房)复制 一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 解决方案(Solution) 搭建过程(Process) 注意事项(Attention) 参考文献(References) 二.
1373 0
|
SQL 关系型数据库 数据库