【已解决】提高资源利用率,如何控制workload group只作用到某几个机器上?

Viewed 88

对于扩容的弹性计算节点,我们不想在上面设置workload group组的资源限制,因为这样的话有可能会导致资源的不充分利用,是否有参数能够控制workload group只作用到某几个BE服务上?

2 Answers

1、我查看workload group详情,确实是有tag的,这里的tag是指Resource Group中的tag标签还是独属于workload group功能内部的tag标签?
2、所有的workload group CPU使用率和内存使用率加起来大小不能超过100%,这个是限制到所有workload group组,还是所有相同tag标签内加起来不能超过100%?
3、如何将弹性计算节点划分到一个tag,感觉这里您说的tag是指Resource Group中的tag标签,将这批服务器划分成了一个资源组,是这个意思吗?
4、是如何将workoad group对应的tag和弹性计算节点划分的tag绑定上关系的?

1 现有设计中,workload group的tag没有从代码逻辑上强绑定resource tag,也不会去校验workload group的分组tag和resouce tag中的tag是否匹配。

2 workload group的tag属性的含义是,相同tag的workload group,累加值不能超过100%。比如group A和group B绑定到tag1,那么group A和group B的累加值不能超过100%。group C和group D绑定到tag2,那么group C和group D的累加值不能超过100%,但是一个集群总可以同时有A,B,C,D group,他们的累加值可能是200%。

3 弹性计算节点绑定tag的用法可以参考https://doris.apache.org/zh-CN/docs/1.2/admin-manual/multi-tenant/

4 比如集群中有group A和group B,绑定到了tag2上。然后有计算节点cn1和cn2,他们绑定到了resource tag的tag1上。那么你可以首先把userA绑定到resource tag的tag1上set property for 'userA' 'resource_tags.location' = 'tag1',然后使用userA查询时,在session变量中指定userA要使用的workload group是groupA或者groupB即可(set workload_group=group A)
这样的效果是,首先的你的查询会被发送到分组为tag1的机器上,然后由于指定了workoad group为group A,那么就会使用group A的计算资源。
这个例子中,workload group的分组tag2和resource tag的tag1使用了不同的名称,是想强调目前这两个东西其实没有必然的绑定关系,workload group的tag的是期望一个集群中可以有多个累加值超过100%的workload group的分组。在线上使用的时候,出于规范,两者的名字最好统一。
这两者目前本质上是通过user间接绑定的。

现有设计workload group会分发所有be,但是否在某个be上起作用其实和workload group的分布没关系。
目前doris计算的下发是和副本绑定的,也就是副本在在哪,计算就在哪,workload group才会生效。
所以这个事情的本质是需要通过控制副本的位置,控制计算的下发,从而控制workload group在哪些机器生效。
workload group属性中有个tag的标记位,相同tag的workload group的资源累加值不能超过100%。
至于workload group只发送到某些机器,这个功能正在做,做这个是的目的是减少doris进程内的线程数量。

我们不想在上面设置workload group组的资源限制

把workoad group按照tag分组,弹性计算节点划分到一个tag,然后绑定一个不限制资源的workload group,查询携带这个不限资源的workload group就行了,你可以测试下看看。
另外不太确定你说的弹性计算节点具体指啥,是否受tag管理,是compute节点吗