亲和组
概览
亲和组 (Affinity Group):一种针对IaaS资源的简单编排策略,可用于保障业务的高性能和高可用。
功能原理
目前,ZStack Cloud提供基于云主机的两种亲和组策略:图 1. 反亲和组 (非强制) 与反亲和组 (强制)

- 反亲和组(非强制):将亲和组内的云主机尽量分配到不同物理机上,当没有更多物理机可分配时,回归普通分配策略。
- 反亲和组(强制):将亲和组内的云主机严格分配到不同物理机上,当没有更多物理机可分配时,则分配失败。

应用场景
以下介绍反亲和组(非强制)和反亲和组(强制)策略的应用场景。
- 反亲和组(非强制)策略应用场景举例:希望Hadoop不同角色的节点尽量分散部署在不同的物理机上,提高系统整体性能。
- 例如:用户部署Hadoop系统,对于namenode、datanode、jobtracker、tasktracker等不同角色,事先并不能预知总共有多少个节点,但显然部署到不同物理机上效率更高。采用反亲和组(非强制)策略,可使Hadoop集群尽量分散部署在不同物理机上,分散IO压力提高系统整体性能。
- 反亲和组(强制)策略应用场景举例:承载主备数据库的两台云主机要求部署在不同的物理机上,保障业务高可用。
- 例如:用户部署两台业务云主机分别承载主备MySQL数据库,并要求主备数据库不能同时宕机,因此两台云主机必须部署在不同物理机上。由于部署自动化,用户事先并不能预知哪些物理机上有资源,采用反亲和组(强制)策略,可选出两个不同的物理机分别运行这两台云主机,保障业务高可用。
清单
属性
示例
{
"inventories": [
{
"appliance": "VROUTER",
"createDate": "Mar 10, 2018 2:11:07 PM",
"description": "affinity.group.for.virtual.router",
"lastOpDate": "Mar 10, 2018 2:11:07 PM",
"name": "affinity.group.for.virtual.router",
"policy": "ANTISOFT",
"type": "HOST",
"usages": [],
"uuid": "d271b2fe242911e88fe0fa0754e77200",
"version": "1.0"
}
],
"success": true
}
操作(Operations)
创建亲和组(CreateAffinityGroup)
管理员可以使用CreateAffinityGroup创建亲和组。例如:
CreateAffinityGroup name=affinity-group-test policy=antiSoft参数(Parameters)
| 名字 | 描述 | 可选的 | 可选的参数值 | 起始支持版本 |
|---|---|---|---|---|
| name | 亲和组名称 | 2.2 | ||
| description | 亲和组的详细描述 | 是 | 2.2 | |
| policy | 亲和组规则 |
|
0.6 | |
| type | 亲和组类型。目前支持物理主机亲和,未来将增加网络亲和、路由器亲和、数据中心或机架亲和等多种类型。 | 是 |
|
2.2 |
| resourceUuid | 资源uuid | 是 | 2.2 | |
| userTags | 用户标签,请参见 创建用户标签(CreateUserTag) | 是 | 2.2 | |
| systemTags | 系统标签,请参见 创建系统标签(CreateSystemTag) | 是 | 2.2 | |
| timeout | 是 |
删除亲和组(DeleteAffinityGroup)
管理员可以使用DeleteAffinityGroup删除亲和组。例如:
DeleteAffinityGroup uuid=1b8fa10dfe5a4cad81c341787f764c7c参数(Parameters)
| 名字 | 描述 | 可选的 | 可选的参数值 | 起始支持版本 |
|---|---|---|---|---|
| uuid | 亲和组uuid | 2.2 | ||
| deleteMode | 删除模式 | 是 | 2.2 | |
| userTags | 用户标签,请参见 创建用户标签(CreateUserTag) | 是 | 2.2 | |
| systemTags | 系统标签,请参见 创建系统标签(CreateSystemTag) | 是 | 2.2 | |
| timeout | 是 |
查询亲和组(QueryAffinityGroup)
管理员可以使用QueryAffinityGroup查询亲和组。例如:
QueryAffinityGroup appliance=vrouterQueryAffinityGroup usages.resourceUuid=aa9acd98a8fb4958bcaa6ecb3a712a16原生域查询(Primitive Fields of Query)
嵌套和扩展域查询(Nested and Expanded Fields of Query)
| 域(Field) | 清单(Inventory) | 描述 | 起始支持版本 |
|---|---|---|---|
| usages | usages inventory | 2.2 |
更新亲和组(UpdateAffinityGroup)
管理员可以使用UpdateAffinityGroup更新亲和组。例如:
UpdateAffinityGroup uuid=acfc6a1e958148ab8e47d91cb7b26e7a参数(Parameters)
| 名字 | 描述 | 可选的 | 可选的参数值 | 起始支持版本 |
|---|---|---|---|---|
| uuid | 亲和组uuid | 2.2 | ||
| name | 亲和组名称 | 是 | 2.2 | |
| description | 亲和组的详细描述 | 是 | 2.2 | |
| userTags | 用户标签,请参见 创建用户标签(CreateUserTag) | 是 | 2.2 | |
| systemTags | 系统标签,请参见 创建系统标签(CreateSystemTag) | 是 | 2.2 | |
| timeout | 是 |
添加云主机到亲和组(AddVmToAffinityGroup)
管理员可以使用AddVmToAffinityGroup添加云主机到亲和组。例如:
AddVmToAffinityGroup affinityGroupUuid=acfc6a1e958148ab8e47d91cb7b26e7a \
uuid=9f3461b9021242268c51afe872662285参数(Parameters)
| 名字 | 描述 | 可选的 | 可选的参数值 | 起始支持版本 |
|---|---|---|---|---|
| affinityGroupUuid | 亲和组uuid | 2.2 | ||
| uuid | 资源的uuid | 是 | 2.2 | |
| userTags | 用户标签,请参见 创建用户标签(CreateUserTag) | 是 | 2.2 | |
| systemTags | 系统标签,请参见 创建系统标签(CreateSystemTag) | 是 | 2.2 | |
| timeout | 是 |
从亲和组移除云主机(RemoveVmFromAffinityGroup)
管理员可以使用RemoveVmFromAffinityGroup从亲和组移除云主机。例如:
RemoveVmFromAffinityGroup affinityGroupUuid=acfc6a1e958148ab8e47d91cb7b26e7a \
uuid=9f3461b9021242268c51afe872662285参数(Parameters)
| 名字 | 描述 | 可选的 | 可选的参数值 | 起始支持版本 |
|---|---|---|---|---|
| affinityGroupUuid | 亲和组uuid | 2.2 | ||
| uuid | 资源的uuid | 是 | 2.2 | |
| userTags | 用户标签,请参见 创建用户标签(CreateUserTag) | 是 | 2.2 | |
| systemTags | 系统标签,请参见 创建系统标签(CreateSystemTag) | 是 | 2.2 | |
| timeout | 是 |
改变亲和组的使用状态(ChangeAffinityGroupState)
管理员可以使用ChangeAffinityGroupState改变亲和组的使用状态。例如:
ChangeAffinityGroupState uuid=d8d6f572284611e8a675fa0754e77200 stateEvent=disable参数(Parameters)
| 名字 | 描述 | 可选的 | 可选的参数值 | 起始支持版本 |
|---|---|---|---|---|
| uuid | 资源的uuid | 2.3 | ||
| stateEvent | 是 |
|
2.3 | |
| systemTags | 系统标签,请参见 创建系统标签(CreateSystemTag) | 2.3 | ||
| userTags | 用户标签,请参见 创建用户标签(CreateUserTag) | 2.3 | ||
| timeout | 2.3 |
获取可绑定云主机的亲和组(GetCandidateAffinityGroupForAttachingVm)
管理员可以使用GetCandidateAffinityGroupForAttachingVm获取可绑定云主机的亲和组。例如:
GetCandidateAffinityGroupForAttachingVm vmUuid=2cbb6f64b4e03753b8fb63f497bb003a参数(Parameters)
| 名字 | 描述 | 可选的 | 可选的参数值 | 起始支持版本 |
|---|---|---|---|---|
| vmUuid | 云主机UUID | 4.0.0 | ||
| systemTags | 系统标签,请参见 创建系统标签(CreateSystemTag) | 4.0.0 | ||
| userTags | 用户标签,请参见 创建用户标签(CreateUserTag) | 4.0.0 | ||
| timeout | 4.0.0 |
获取可绑定亲和组的云主机(GetCandidateVMForAttachingAffinityGroup)
管理员可以使用GetCandidateVMForAttachingAffinityGroup获取可绑定亲和组的云主机。例如:
GetCandidateVMForAttachingAffinityGroup affinityGroupUuid=2cbb6f64b4e03753b8fb63f497bb003a参数(Parameters)
| 名字 | 描述 | 可选的 | 可选的参数值 | 起始支持版本 |
|---|---|---|---|---|
| affinityGroupUuid | 亲和组uuid | 4.0.0 | ||
| systemTags | 系统标签,请参见 创建系统标签(CreateSystemTag) | 4.0.0 | ||
| userTags | 用户标签,请参见 创建用户标签(CreateUserTag) | 4.0.0 | ||
| timeout | 4.0.0 |
创建云主机时获取可加入非亲和组(GetCandidateAffinityGroupForCreatingVm)
管理员可以使用GetCandidateAffinityGroupForCreatingVm在创建云主机时获取当前状态下可加入的非亲和组。例如:
GetCandidateAffinityGroupForCreatingVm zoneUuid=2cbb6f64b4e03753b8fb63f497bb003a参数(Parameters)
| 名字 | 描述 | 可选的 | 可选的参数值 | 起始支持版本 |
|---|---|---|---|---|
| zoneUuid | 区域UUID | 4.1.0 | ||
| clusterUuid | 集群UUID | 是 | 4.1.0 | |
| hostUuid | 物理机UUID | 是 | 4.1.0 | |
| systemTags | 系统标签,请参见 创建系统标签(CreateSystemTag) | 4.1.0 | ||
| userTags | 用户标签,请参见 创建用户标签(CreateUserTag) | 4.1.0 | ||
| timeout | 4.1.0 |
标签(Tags)
用户可以使用resourceType=AffinityGroupVO在亲和组上创建用户标签。
例如:
CreateUserTag tag=Test1 resourceUuid=d271b2fe242911e88fe0fa0754e77200 \
resourceType=AffinityGroupVO