可组合的 HA 架构¶
https://blueprints.launchpad.net/tripleo/+spec/composable-ha
自从 Newton 以来,以下服务由 pacemaker 管理
克隆和主/从资源:galera, redis, haproxy, rabbitmq
主动/被动资源:VIPs, cinder-volume, cinder-backup, manila-share
目前,无法像我们今天通过可组合角色对非 pacemaker 服务那样,以相同的方式组合上述服务。本规范旨在解决此限制,并让操作员在控制平面的组合方面更加灵活。
问题描述¶
目前 tripleo 没有实现任何逻辑来将特定的 pacemaker 管理服务分配给角色/节点。
由于我们缺乏硬性性能数据,我们通常支持三个控制器节点。这被认为是一个限制可扩展性的因素,并且普遍希望能够将特定节点分配给特定的 pacemaker 管理服务(例如,仅三个节点用于 galera,仅五个节点用于 rabbitmq)
现在,如果操作员在 N 个控制器上部署,他将在相同的 N 个节点上获得 N 个非 A/P pacemaker 服务的克隆实例。我们希望能够更加灵活。例如,在最初的 3 个节点上部署 galera,在剩余的 5 个节点上部署 rabbitmq,等等。
操作员还可以选择 A/P 资源将在哪些节点上运行,这也是期望的。
我们目前还存在 pacemaker 集群的 16 个节点的可扩展性限制。
提议的变更¶
概述¶
这里的提议是保持现有集群的当前形式,但以两种方式对其进行扩展:A) 允许操作员将特定服务包含在自定义节点中,并让 pacemaker 仅在该节点上运行该资源。例如,操作员可以定义以下自定义节点
节点 A pacemaker galera
节点 B pacemaker rabbitmq
节点 C pacemaker VIPs, cinder-volume, cinder-backup, manila-share, redis, haproxy
使用上述定义,操作员可以实例化任意数量的 A、B 或 C 节点,并扩展到总共 16 个节点。Pacemaker 将仅将资源放置在适当的节点上。
B) 允许操作员通过 pacemaker remote 扩展集群超出 16 个节点。例如,操作员可以定义以下内容
节点 A pacemaker galera rabbitmq
节点 B pacemaker-remote redis
节点 C pacemaker-remote VIPs, cinder-volume, cinder-backup, manila-share, redis, haproxy
第二种情况将允许操作员扩展超出 16 个节点限制。与场景 1) 的唯一区别在于集群的仲裁仅由节点 A 的节点获得。
这将通过基于节点属性匹配的位置规则来控制节点上的放置。
替代方案¶
讨论和评估了一些替代设计:A) 每个服务一个集群
一种可能的架构是为每个 HA 服务创建一个单独的 pacemaker 集群。这主要由于以下原因而被排除在外
无法在容器之外完成
会产生大量的网络流量
将导致 pacemaker 资源和集群的管理/监控呈指数级增长
每个服务仍然限制为 16 个节点
必须编写一个新的容器 fencing agent
一个集群,仅为非 A/P 服务设置 clone-max 属性
这将仍然是一个集群,但与今天不同,克隆和主/从资源在每个控制器上运行,我们将引入变量来控制资源可以在其上运行的最大节点数。例如,10 个控制器,galera 的 clone-max 设置为 3,rabbitmq 设置为 5,redis 设置为 3。虽然这会比较容易实现并且几乎不会改变当前的语义,但该设计已被排除在外
我们仍然会有 16 个节点的限制
它不会提供对哪些服务驻留在哪些节点上的精细控制
安全影响¶
与现有状态相比,没有关于安全方面的变化。
其他最终用户影响¶
没有特别的影响,除了在放置 pacemaker 管理资源方面增加了灵活性。
性能影响¶
这里的性能影响是,随着可扩展性的增加,操作员可以为某些 pacemaker 管理服务专门分配特定节点。代码方面没有变化,只是在控制平面上部署服务的一种更灵活和可扩展的方式。
其他部署者影响¶
本提案旨在采用 Newton 中引入的自定义角色所使用的方法来定制节点上运行的服务。使用完全相同的方法,可以对今天由 pacemaker 管理的 HA 服务进行操作。
开发人员影响¶
无影响
实现¶
负责人¶
- 主要负责人
michele
- 其他贡献者
cmsj, abeekhof
工作项¶
我们需要完成以下工作
在 puppet 中添加位置规则约束支持
使 puppet-tripleo 在服务配置文件所在的节点上设置节点属性
创建相应的定位规则
添加一个 puppet-tripleo pacemaker-remote 配置文件
依赖项¶
不需要额外的依赖项。
测试¶
我们需要在 CI 中测试 pacemaker 管理服务的灵活放置。这可以在今天的 CI 限制内完成(即,在三个控制器 HA 作业中,我们可以确保放置是定制的并且正在工作)
文档影响¶
无影响
参考资料¶
Red Hat HA 团队内部的大部分讨论