唐
发布于

OushuDB学习笔记--虚拟集群的相关概念

OushuDB 从 4.4.0.0 版本开始支持虚拟集群来管理节点及其队列。虚拟集群可以使用户的资源使用限定在若干节点上,从而达到合理分配资源并隔绝错误。目前所有关于虚拟集群的元数据信息记录在系统表 pg_vcluster 中。同一时刻一个节点(域名或 IP)只能归属一个虚拟集群。
虚拟集群(Virtual Cluster)
(1)虚拟集群是若干个 Segment 的集合
(2)每个虚拟集群都是彼此互斥的集合
(3)每个虚拟集群只管理其内部的 Segment 资源
(4)每个虚拟集群会维护其内部的资源队列
(5)每个虚拟集群拥有个性化属性(VCProperty)
Virtual Segment 概念
(1)Virtual Segment 是 SQL 的一个完成执行计划在一个 Segment 上运行的逻辑单位,一个 Segment 上的 Virtual Segment 代表运行完整执行计划的一组 QE 进程
(2)一个 Virtual Segment 包含的内存和 CPU 核数资源量定义了一组 QE 进程应使用的资源总量
(3)一个 Segment 累积分配的 Virtual Segment 的资源总量为该 Segment 的已分配资源量
VC 和用户绑定,VCI(VC 实例)是负载均衡的概念,它的资源也是隔离的,划分 VCI 可以提高并发,因为一个计算集群多于 128 个节点,性能基本不会提升,所以假如 1 个 VC 为 256 个节点,可以把它划分为 2 个 128 个节点的 VC1。对于那些都是重查询的,可以不划分 VCI,对于都是小查询的,建议划分 VCI
一个虚拟机只需要部署一个 OushuDB 的 Segment,运行的时候 Segment 会弹性的启动多个进程并行的执行任务。一个 VCI 会包含多个 Segment 计算节点,VCI 同时跑的作业数和资源队列的配置有关系,而资源队列的配置会参照 Segment 计算节点的硬件配置。一个 VCI 跑多个任务,会对 master 增加连接数的压力。对于用户而言,虚拟集群是一个间接对象,因为用户只会直接与虚拟集群下的资源队列绑定。
一个 session 的用户对应一个 VC,一个 VC 会有多个 VCI 实例,那么 session 连接上来以后会根据负载均衡的原则把任务打散到同一个 VC 下的所有 VCI 里。目前 VCI 分配策略是根据 vseg 数目负载均衡到同一个 VC 下的不同 VCI 里,将来可以考虑 session 的亲和性,来自同一 session 的调度到同一 VCI,解决 VCI SQL 切换缓存命中率的问题
用户执行 SQL,通过给用户指定的资源队列,拿到资源配额数量,然后在 VCI 的 segment 中分配资源,至于在哪个 VCI 执行,是负载均衡的方式决定?具体有哪些分配规则,轮转?考虑各个 VCI 当前执行的作业情况吗?选择任务轻的 VCI 执行新作业?——目前有两种策略,一种是优先使用负载低的 VCI,另外一种是优先使用负载高的 VCI。可以切换。

评论
    test