云主机调度策略
概览
云主机调度策略(VM Scheduling Policy):为云主机分配物理机的资源编排策略,可用于保障业务的高性能和高可用。
相关定义
云主机调度策略包括以下核心组件:
- 调度策略:ZStack Cloud提供四类调度策略,每类调度策略支持两种执行机制:
- 策略类型:支持互斥云主机、聚集云主机、云主机互斥物理机、和云主机亲和物理机四类调度策略。通过结合不同执行机制,实现云主机调度:
- 互斥云主机:同一个云主机调度组内的云主机尽量不要/不允许运行在同一台物理机上。
- 聚集云主机:同一个云主机调度组内的云主机尽量/必须运行在同一台物理机上。
- 云主机互斥物理机:云主机调度组内的云主机尽量不要/不允许运行在物理机调度组内的物理机上。
- 云主机亲和物理机:云主机调度组内的云主机尽量/必须运行在物理机调度组内的物理机上。
- 执行机制:支持强制和优先两种机制:
- 强制:云主机需根据策略强制分配物理机,例如,若强制执行互斥云主机策略,则同一个云主机调度组内的云主机不允许运行在同一台物理机上。若无满足策略的物理机,云主机启动时会失败。
- 优先:云主机需根据策略优先分配物理机,例如,若优先执行互斥云主机策略,则同一个云主机调度组内的云主机尽量不要运行在同一台物理机上。若无满足策略的物理机,可尝试在其他资源充足的物理机上运行。
- 策略类型:支持互斥云主机、聚集云主机、云主机互斥物理机、和云主机亲和物理机四类调度策略。通过结合不同执行机制,实现云主机调度:
- 云主机调度组:云主机绑定调度策略的基本单位。
- 一个云主机仅可以加入一个云主机调度组。加入后,云主机将按照调度组所关联的调度策略进行分配物理机。
- 一个云主机调度组可绑定一个或多个调度策略。
- 一个调度策略可绑定一个云主机调度组。
- 删除云主机调度组后,关联的云主机调度策略会同步删除。
- 物理机调度组:物理机绑定调度策略的基本单位,仅在选择云主机互斥物理机或云主机亲和物理机两类调度策略时使用。
- 一个物理机仅可以加入一个物理机调度组。加入后,物理机将按照调度组所关联的调度策略进行调度。
- 一个物理机调度组可绑定一个或多个调度策略。
- 一个调度策略可绑定一个物理机调度组。
- 删除物理机调度组后,关联的云主机调度策略会同步删除。
功能原理
支持将云主机加入一个云主机调度组,通过为该云主机调度组绑定调度策略实现云主机调度。
- 若绑定互斥云主机或聚集云主机策略,无需指定物理机调度组,云主机按照策略及其执行机制分配物理机。
- 若绑定云主机亲和物理机或云主机互斥物理机调度策略,需指定对应的物理机调度组,云主机按照策略及其执行机制分配物理机。
下文通过四个场景说明四类调度策略的工作原理:
场景1:假定区域内有三台物理机Host1、Host2、和Host3。云主机调度组A已绑定互斥云主机调度策略,且云主机VM1和VM2已加入该调度组,并分别运行在物理机Host1和Host2上。此时将云主机VM3加入该调度组,不同执行机制下云主机VM3行为如下:
- 强制机制下,云主机VM3遵循与组内其他云主机强制互斥原则:
- 若物理机Host3资源充足,可正常在Host3上启动并运行。
- 若物理机Host3资源不足,无法在Host3上启动。
- 优先机制下,云主机VM3遵循与组内其他云主机尽量互斥原则,优先在Host3上启动:
- 若物理机Host3资源充足,可正常在Host3上启动并运行。
- 若物理机Host3资源不足,VM3可尝试在其他资源充足的物理机上启动。在该场景下,VM3在Host2上启动并运行。
如图 1所示:图 1. 互斥云主机(强制/优先)


场景2:假定区域内有两台物理机Host1和Host2。云主机调度组A已绑定聚集云主机调度策略,且云主机VM1和VM2已加入该调度组,并运行在物理机Host1上。此时将云主机VM3加入该调度组,不同执行机制下云主机VM3行为如下:
- 强制机制下,云主机VM3遵循与组内其他云主机强制聚集原则:
- 若物理机Host1资源充足,可正常在Host1上启动并运行。
- 若物理机Host1资源不足,无法在Host1上启动。
- 优先机制下,云主机VM3遵循与组内其他云主机尽量聚集原则,优先在Host1上启动:
- 若物理机Host1资源充足,可正常在Host1上启动并运行。
- 若物理机Host1资源不足,VM3可尝试在其他资源充足的物理机上启动。在该场景下,VM3在Host2上启动并运行。
如图 2所示:图 2. 聚集云主机(强制/优先)


场景3:假定区域内有三台物理机Host1、Host2、和Host3。云主机调度组A已绑定云主机互斥物理机调度策略,且云主机VM1和VM2已加入该调度组,并运行在物理机Host1上。物理机调度组A也已绑定云主机互斥物理机调度策略,且物理机Host2和Host3上已加入该调度组,分别运行两台云主机。此时将云主机VM3加入云主机调度组A,不同执行机制下云主机VM3行为如下:
- 强制机制下,云主机VM3遵循与物理机调度组A内的物理机强制互斥原则:
- 若物理机Host1资源充足,可正常在Host1上启动并运行。
- 若物理机Host1资源不足,无法在Host1上启动。
- 优先机制下,云主机VM3遵循与物理机调度组A内的物理机尽量互斥原则,优先在Host1上启动:
- 若物理机Host1资源充足,可正常在Host1上启动并运行。
- 若物理机Host1资源不足,VM3可尝试在其他资源充足的物理机上启动。在该场景下,VM3在Host2上启动并运行。
如图 3所示:图 3. 云主机互斥物理机(强制/优先)


场景4:假定区域内有三台物理机Host1、Host2、和Host3。云主机调度组A已绑定云主机亲和物理机调度策略,且云主机VM1~VM5已加入该调度组,并分别运行在物理机Host2和Host3上。物理机调度组A也已绑定云主机亲和物理机调度策略,且物理机Host2和Host3上已加入该调度组。此时将云主机VM6加入云主机调度组A,不同执行机制下云主机VM6行为如下:
- 强制机制下,云主机VM3遵循与物理机调度组A内的物理机强制聚集原则:
- 若物理机Host2或Host3资源充足,可正常在Host2或Host3上启动并运行。
- 若物理机Host2和Host3资源不足,无法在Host2或Host3上启动。
- 优先机制下,云主机VM3遵循与物理机调度组A内的物理机尽量聚集原则,优先在Host2或Host3上启动:
- 若物理机Host2或Host3资源充足,可正常在Host2或Host3上启动并运行。
- 若物理机Host2和Host3资源不足,VM6可尝试在其他资源充足的物理机上启动。在该场景下,VM3在Host1上启动并运行。
如图 4所示:图 4. 云主机亲和物理机(强制/优先)


功能优势
云主机调度策略具备以下优势:
- 全面&灵活:
- 提供4类调度策略*2种执行机制,定义云主机与云主机之间、云主机与物理机之间互斥/亲和关系。各类调度策略可灵活组合,满足所有主流业务场景需求。
- 支持通过云主机调度组实现多个云主机批量绑定/解绑一个或多个调度策略,简单高效。
- 直观展示云主机调度状态,并提供快捷解冲突操作,方便用户实时掌握业务调度动态,并及时进行调整。
- 强大&可靠:
- 相同/不同业务之间支持互斥/亲和,实现业务隔离/高效互通,保障业务高性能和高可靠性。
- 可通过物理机调度组灵活配置云主机业务故障域,支持单个物理机部署、单个集群内批量物理机部署、以及跨集群物理机部署,避免单点故障,保障业务稳定性,并提高物理资源利用率。
应用场景
以下介绍互斥云主机(强制/优先)和云主机亲和物理机(强制/优先)策略的应用场景。
- 互斥云主机(强制)策略应用场景举例:承载主备数据库的两台云主机要求部署在不同的物理机上,保障业务高可用。
- 例如:用户部署两台业务云主机分别承载主备MySQL数据库,要求两台云主机必须部署在不同物理机上,以降低业务宕机的风险。由于部署自动化,用户事先并不能预知哪些物理机上有资源,采用互斥云主机(强制)策略,可选出两个不同的物理机分别运行这两台云主机,保障业务高可用。
- 互斥云主机(优先)策略应用场景举例:希望Hadoop不同角色的节点尽量分散部署在不同的物理机上,提高系统整体性能。
- 例如:用户部署Hadoop系统,对于namenode、datanode、jobtracker、tasktracker等不同角色,事先并不能预知总共有多少个节点,但显然部署到不同物理机上效率更高。采用互斥云主机(优先)策略,可使Hadoop集群尽量分散部署在不同物理机上,分散IO压力提高系统整体性能。
- 云主机亲和物理机(强制)策略应用场景举例:要求业务云主机部署在特定CPU主频的物理机上,保障业务稳定性。
- 例如:用户部署了四台云主机运行重要业务,要求所在物理机具有很高的CPU主频。由于能满足该CPU主频要求的物理机较少,云主机必须运行在这几台物理机上。此时可采用云主机亲和物理机(强制)策略,使云主机强制运行在目标物理机上,保障业务稳定性。
- 云主机亲和物理机(优先)策略应用场景举例:希望运行不同的业务云主机尽量部署在同一机柜中的物理机上,保障业务高效互通。
- 例如:四台云主机运行不同业务,业务间需要频繁通信,要求物理机尽可能在同一机柜中,以缩短通信延迟。此时可采用云主机亲和物理机(优先)策略,使云主机尽量运行在目标物理机上,保障业务高效互通。
操作(Operations)
创建物理机调度组(CreateHostSchedulingRuleGroup)
管理员可以使用CreateHostSchedulingRuleGroup创建物理机调度组。例如:
CreateHostSchedulingRuleGroup name=test clusterUuid=8918ca3c7c9844b6a5a152785f484181 zoneUuid=d219bdc1cd7c4406bce3ec934e3fee9f参数(Parameters)
| 名字 | 描述 | 可选的 | 可选的参数值 | 起始支持版本 |
|---|---|---|---|---|
| name | 资源名称 | 4.6.0 | ||
| description | 资源的详细描述 | 是 | 4.6.0 | |
| zoneUuid | 区域UUID | 4.6.0 | ||
| clusterUuid | 集群UUID | 4.6.0 | ||
| resourceUuid | 资源UUID | 是 | 4.6.0 | |
| tagUuids | 标签UUID列表 | 是 | 4.6.0 | |
| userTags | 用户标签,请参见 创建用户标签(CreateUserTag) | 是 | 4.6.0 | |
| systemTags | 系统标签,请参见 创建系统标签(CreateSystemTag) | 是 | 4.6.0 | |
| timeout | 是 |
删除物理机调度组(DeleteHostSchedulingRuleGroup)
管理员可以使用DeleteHostSchedulingRuleGroup删除物理机调度组。例如:
DeleteHostSchedulingRuleGroup uuid=1d1265c7a4ee4fdfa4e4cd074959544c参数(Parameters)
| 名字 | 描述 | 可选的 | 可选的参数值 | 起始支持版本 |
|---|---|---|---|---|
| uuid | 资源的UUID,唯一标示该资源 | 4.6.0 | ||
| userTags | 用户标签,请参见 创建用户标签(CreateUserTag) | 是 | 4.6.0 | |
| systemTags | 系统标签,请参见 创建系统标签(CreateSystemTag) | 是 | 4.6.0 | |
| timeout | 是 |
更新物理机调度组(UpdateHostSchedulingRuleGroup)
管理员可以使用UpdateHostSchedulingRuleGroup更新物理机调度组。例如:
UpdateHostSchedulingRuleGroup uuid=e2cf0f9151c34a16bad011bc769cb031参数(Parameters)
| 名字 | 描述 | 可选的 | 可选的参数值 | 起始支持版本 |
|---|---|---|---|---|
| uuid | 资源的UUID,唯一标示该资源 | 4.6.0 | ||
| name | 资源名称 | 是 | 4.6.0 | |
| description | 资源的详细描述 | 是 | 4.6.0 | |
| userTags | 用户标签,请参见 创建用户标签(CreateUserTag) | 是 | 4.6.0 | |
| systemTags | 系统标签,请参见 创建系统标签(CreateSystemTag) | 是 | 4.6.0 | |
| timeout | 是 |
添加物理机到物理机调度组(AddHostToHostSchedulingRuleGroup)
管理员可以使用AddHostToHostSchedulingRuleGroup添加物理机到物理机调度组。例如:
AddHostToHostSchedulingRuleGroup hostUuid=602ca3d56dca40fcb04944dbaa9861ee hostGroupUuid=e2cf0f9151c34a16bad011bc769cb031参数(Parameters)
| 名字 | 描述 | 可选的 | 可选的参数值 | 起始支持版本 |
|---|---|---|---|---|
| hostGroupUuid | 物理机调度组UUID | 4.6.0 | ||
| hostUuid | 物理机UUID | 4.6.0 | ||
| userTags | 用户标签,请参见 创建用户标签(CreateUserTag) | 是 | 4.6.0 | |
| systemTags | 系统标签,请参见 创建系统标签(CreateSystemTag) | 是 | 4.6.0 | |
| timeout | 是 |
从物理机调度组解绑物理机(DetachHostFromHostSchedulingRuleGroup)
管理员可以使用DetachHostFromHostSchedulingRuleGroup从物理机调度组解绑物理机。例如:
DetachHostFromHostSchedulingRuleGroup hostUuid=602ca3d56dca40fcb04944dbaa9861ee hostGroupUuid=e2cf0f9151c34a16bad011bc769cb031参数(Parameters)
| 名字 | 描述 | 可选的 | 可选的参数值 | 起始支持版本 |
|---|---|---|---|---|
| hostGroupUuid | 物理机调度组UUID | 4.6.0 | ||
| hostUuid | 物理机UUID | 4.6.0 | ||
| userTags | 用户标签,请参见 创建用户标签(CreateUserTag) | 是 | 4.6.0 | |
| systemTags | 系统标签,请参见 创建系统标签(CreateSystemTag) | 是 | 4.6.0 | |
| timeout | 是 |
创建云主机调度组(CreateVmSchedulingRuleGroup)
管理员可以使用CreateVmSchedulingRuleGroup创建云主机调度组。例如:
CreateVmSchedulingRuleGroup name=VSRGtest zoneUuid=d219bdc1cd7c4406bce3ec934e3fee9f参数(Parameters)
| 名字 | 描述 | 可选的 | 可选的参数值 | 起始支持版本 |
|---|---|---|---|---|
| zoneUuid | 区域UUID | 4.6.0 | ||
| name | 资源名称 | 4.6.0 | ||
| description | 资源的详细描述 | 是 | 4.6.0 | |
| resourceUuid | 资源UUID | 是 | 4.6.0 | |
| tagUuids | 标签UUID列表 | 是 | 4.6.0 | |
| userTags | 用户标签,请参见 创建用户标签(CreateUserTag) | 是 | 4.6.0 | |
| systemTags | 系统标签,请参见 创建系统标签(CreateSystemTag) | 是 | 4.6.0 | |
| timeout | 是 |
删除云主机调度组(DeleteVmSchedulingRuleGroup)
管理员可以使用DeleteVmSchedulingRuleGroup删除云主机调度组。例如:
DeleteVmSchedulingRuleGroup uuid=1c8265bac602470583fd9c7e99150436参数(Parameters)
| 名字 | 描述 | 可选的 | 可选的参数值 | 起始支持版本 |
|---|---|---|---|---|
| uuid | 资源UUID | 4.6.0 | ||
| userTags | 用户标签,请参见 创建用户标签(CreateUserTag) | 是 | 4.6.0 | |
| systemTags | 系统标签,请参见 创建系统标签(CreateSystemTag) | 是 | 4.6.0 | |
| timeout | 是 |
更新云主机调度组(UpdateVmSchedulingRuleGroup)
管理员可以使用UpdateVmSchedulingRuleGroup更新云主机调度组。例如:
UpdateVmSchedulingRuleGroup uuid=1c8265bac602470583fd9c7e99150436参数(Parameters)
| 名字 | 描述 | 可选的 | 可选的参数值 | 起始支持版本 |
|---|---|---|---|---|
| uuid | 资源的UUID,唯一标示该资源 | 4.6.0 | ||
| name | 资源名称 | 是 | 4.6.0 | |
| description | 资源的详细描述 | 是 | 4.6.0 | |
| userTags | 用户标签,请参见 创建用户标签(CreateUserTag) | 是 | 4.6.0 | |
| systemTags | 系统标签,请参见 创建系统标签(CreateSystemTag) | 是 | 4.6.0 | |
| timeout | 是 |
添加云主机到云主机调度组(AddVmToVmSchedulingRuleGroup)
管理员可以使用AddVmToVmSchedulingRuleGroup添加云主机到云主机调度组。例如:
AddVmToVmSchedulingRuleGroup vmUuid=010e30d6c92246faa86a52b4f551dd89 vmGroupUuid=1c8265bac602470583fd9c7e99150436参数(Parameters)
| 名字 | 描述 | 可选的 | 可选的参数值 | 起始支持版本 |
|---|---|---|---|---|
| vmGroupUuid | VM调度组UUID | 4.6.0 | ||
| vmUuid | VM UUID | 4.6.0 | ||
| userTags | 用户标签,请参见 创建用户标签(CreateUserTag) | 是 | 4.6.0 | |
| systemTags | 系统标签,请参见 创建系统标签(CreateSystemTag) | 是 | 4.6.0 | |
| timeout | 是 |
从云主机调度组解绑云主机(DetachVmFromVmSchedulingRuleGroup)
管理员可以使用DetachVmFromVmSchedulingRuleGroup从云主机调度组解绑云主机。例如:
DetachVmFromVmSchedulingRuleGroup vmUuid=010e30d6c92246faa86a52b4f551dd89 vmGroupUuid=1c8265bac602470583fd9c7e99150436参数(Parameters)
| 名字 | 描述 | 可选的 | 可选的参数值 | 起始支持版本 |
|---|---|---|---|---|
| vmGroupUuid | VM调度组UUID | 4.6.0 | ||
| vmUuid | VM UUID | 4.6.0 | ||
| userTags | 用户标签,请参见 创建用户标签(CreateUserTag) | 是 | 4.6.0 | |
| systemTags | 系统标签,请参见 创建系统标签(CreateSystemTag) | 是 | 4.6.0 | |
| timeout | 是 |
获取云主机调度组执行状态(GetVmSchedulingRulesExecuteState)
管理员可以使用GetVmSchedulingRulesExecuteState获取云主机调度组执行状态。例如:
GetVmSchedulingRulesExecuteState uuids=1c8265bac602470583fd9c7e99150436参数(Parameters)
| 名字 | 描述 | 可选的 | 可选的参数值 | 起始支持版本 |
|---|---|---|---|---|
| uuids | VM调度组UUID | 4.6.0 | ||
| userTags | 用户标签,请参见 创建用户标签(CreateUserTag) | 是 | 4.6.0 | |
| systemTags | 系统标签,请参见 创建系统标签(CreateSystemTag) | 是 | 4.6.0 | |
| timeout | 是 |
创建云主机调度策略(CreateVmSchedulingRule)
管理员可以使用CreateVmSchedulingRule创建云主机调度策略。例如:
CreateVmSchedulingRule name=test rule=AFFINITY mode=SOFT vmGroupUuid=b17f127e89764c78a6bebe4d56354fcd zoneUuid=f45f6596da8845b993eb901ddf6c01ef参数(Parameters)
| 名字 | 描述 | 可选的 | 可选的参数值 | 起始支持版本 |
|---|---|---|---|---|
| rule | 规则 |
|
4.6.0 | |
| mode | 执行力度 |
|
4.6.0 | |
| vmGroupUuid | VM调度组UUID | 4.6.0 | ||
| hostGroupUuid | 物理机调度组UUID | 是 | 4.6.0 | |
| name | 资源名称 | 4.6.0 | ||
| description | 资源的详细描述 | 是 | 4.6.0 | |
| policy | String | 是 |
|
4.6.0 |
| type | String | 是 |
|
4.6.0 |
| zoneUuid | 区域UUID | 是 | 4.6.0 | |
| subType | 是 | 4.6.0 | ||
| resourceUuid | 资源UUID | 是 | 4.6.0 | |
| tagUuids | 标签UUID列表 | 是 | 4.6.0 | |
| userTags | 用户标签,请参见 创建用户标签(CreateUserTag) | 是 | 4.6.0 | |
| systemTags | 系统标签,请参见 创建系统标签(CreateSystemTag) | 是 | 4.6.0 | |
| timeout | 是 |
移除云主机调度策略(RemoveVmSchedulingRule)
管理员可以使用RemoveVmSchedulingRule移除云主机调度策略。例如:
RemoveVmSchedulingRule uuid=157abedd21494455b04c6156b87e8abb参数(Parameters)
| 名字 | 描述 | 可选的 | 可选的参数值 | 起始支持版本 |
|---|---|---|---|---|
| uuid | 资源的UUID,唯一标示该资源 | 4.6.0 | ||
| deleteMode | 删除模式 | 是 |
|
4.6.0 |
| userTags | 用户标签,请参见 创建用户标签(CreateUserTag) | 是 | 4.6.0 | |
| systemTags | 系统标签,请参见 创建系统标签(CreateSystemTag) | 是 | 4.6.0 | |
| timeout | 是 |
变更云主机调度策略启用状态(ChangeVmSchedulingRuleState)
管理员可以使用ChangeVmSchedulingRuleState变更云主机调度策略启用状态。例如:
ChangeVmSchedulingRuleState uuid=8c25d94fe3154d598c88689f552b1a60 state=enable参数(Parameters)
| 名字 | 描述 | 可选的 | 可选的参数值 | 起始支持版本 |
|---|---|---|---|---|
| uuid | 资源的UUID,唯一标示该资源 | 4.6.0 | ||
| state | 改变为的状态 | 是 |
|
4.6.0 |
| userTags | 用户标签,请参见 创建用户标签(CreateUserTag) | 是 | 4.6.0 | |
| systemTags | 系统标签,请参见 创建系统标签(CreateSystemTag) | 是 | 4.6.0 | |
| timeout | 是 |
更新云主机调度策略(UpdateVmSchedulingRule)
管理员可以使用UpdateVmSchedulingRule更新云主机调度策略。例如:
UpdateVmSchedulingRule uuid=8c25d94fe3154d598c88689f552b1a60参数(Parameters)
| 名字 | 描述 | 可选的 | 可选的参数值 | 起始支持版本 |
|---|---|---|---|---|
| uuid | 资源的UUID,唯一标示该资源 | 4.6.0 | ||
| name | 资源名称 | 是 | 4.6.0 | |
| description | 资源的详细描述 | 是 | 4.6.0 | |
| mode | 是 | 4.6.0 | ||
| userTags | 用户标签,请参见 创建用户标签(CreateUserTag) | 是 | 4.6.0 | |
| systemTags | 系统标签,请参见 创建系统标签(CreateSystemTag) | 是 | 4.6.0 | |
| timeout | 是 |
从云主机调度组校验调度策略(ValidateVmSchedulingRule)
管理员可以使用ValidateVmSchedulingRule从云主机调度组校验调度策略。例如:
ValidateVmSchedulingRule vmGroupUuid=b17f127e89764c78a6bebe4d56354fcd rule=AFFINITY mode=SOFT参数(Parameters)
| 名字 | 描述 | 可选的 | 可选的参数值 | 起始支持版本 |
|---|---|---|---|---|
| vmGroupUuid | vm调度组uuid | 4.6.0 | ||
| hostGroupUuid | 物理机调度组uuid | 是 | 4.6.0 | |
| rule | 调度规则 |
|
4.6.0 | |
| mode | 执行模式 |
|
4.6.0 | |
| zoneUuid | 区域UUID | 是 | 4.6.0 | |
| userTags | 用户标签,请参见 创建用户标签(CreateUserTag) | 是 | 4.6.0 | |
| systemTags | 系统标签,请参见 创建系统标签(CreateSystemTag) | 是 | 4.6.0 | |
| timeout | 是 |
