OpenStack 从一开始就可以扩展到数千个节点,并跨越不同的数据中心和地理区域。因此,Openstack 云可以分为三个主要的分级区域:区域、可用性区域和主机聚合。
Region
每个地理区域上都有自己完整的 Openstack 部署,包括自己的 API 端点、网络和计算资源。不同区域共享一套 Keystone 和 Horizon 服务,以提供访问控制和 Web 界面。
Availability Zone
在一个区域内,计算节点可以在逻辑上分组为可用性区域(AZ):当启动一个新的虚拟机实例时,我们可以指定我们希望它在哪个可用性区域内实例化,甚至可以指定一个可用性区域内运行虚拟机实例的特定节点。
Host Aggregates
除了 AZ 之外,计算节点还可以在逻辑上分组为 主机聚合(Host Aggregates)。
主机聚合有元数据来标记计算节点组,例如,所有装有固态硬盘的节点都可以属于一个主机聚合,而另一个主机聚合可能包含所有装有 10 GB 网卡的节点。
一个计算节点可以同时隶属于一个 "主机聚合 "和一个 "可用性区域",因为它们不会发生冲突(使用的调度不一样)。此外,一个计算节点可以属于多个主机聚合。主机聚合只对管理员可见,也可用于在同一 AZ 中混合使用管理程序,例如节省许可证成本:一些供应商为其管理程序提供免费访客。
一个节点不会属于两个 AZ
Cells
OpenStack 计算单元允许您以分布式方式运行云。云中的主机被划分为称为单元的组。单元以树形方式配置。顶级单元("API 单元")有一个运行 nova-api 服务的主机,但没有 nova-compute 服务。
这样就可以使用单个 API 服务器来控制对多个云安装的访问。除了常规的新星调度程序选择主机外,还引入了第二级调度(单元选择),为控制虚拟机的运行位置提供了更大的灵活性。
与单个 API 端点不同,区域的每个安装都有一个单独的 API 端点,从而实现了更加独立的分离。想要跨站点运行实例的用户必须明确选择一个区域。但是,不需要运行新服务的额外复杂性。
设计上:
可用区不在数据库中建模;相反,它们是通过将特定的元数据信息附加到聚合来定义的。 将此特定元数据添加到聚合使得聚合从最终用户的角度可见,从而允许用户将实例调度到特定的主机集,这些主机属于总量。在比较可用区和主机聚合时,还需要注意一些其他差异:
- 一台主机可以是多个聚合的一部分,但只能位于一个可用区中。
- 默认情况下,主机是默认可用区域的一部分,即使它不属于聚合。可以使用 config 选项配置此默认可用区域的名称
default_availability_zone。
此外,其他服务,例如网络服务 和块存储服务,也提供可用区功能。然而,这些不同服务之间这些功能的实现存在很大差异。有关这些其他服务实现此功能的更多信息,请参阅这些其他服务的文档。
关于 AZ 不存在数据库表,只是一个 键值对,作为 metadata
openstack aggregate set --property availability_zone=az002 myaz
# 可以为主机组配置 az meta, 然后为租户配置 az meata,从而实现用户只使用某主机组
openstack server create --availability-zone ZONE:HOST:NODE ... SERVER
# 可以指定 `ZONE`、`ZONE:HOST`和`ZONE::NODE`, ZONE:HOST:NODE 调度虚拟机