我们的团队正在 aws 上管理许多 cassandra 集群,我们的一个问题是,当用户要求我们生成新集群时,由于生产流量不足,他们无法预测需要多少节点。大多数情况下,最终会出现过度配置的情况。由于我们为如此多的客户管理如此多的集群,随着时间的推移,很难检查所有集群以手动决定过度配置。
是否有一个开源项目或框架以科学的方式解决这个问题。
答案1
Cassandra 通过 JMX 公开了许多指标,您可以使用它们来评估集群负载。监控它的常用开源工具之一是 Graphite,我见过人们使用 collectd 将 JMX(和其他数据)提供给 Graphite。
对于 DSE,OpsCenter 会自动收集并显示指标(免责声明,我是 OpsCenter 开发人员,因此有偏见)。
除非您对集群负载随时间的变化有非常深入的了解,否则我会避免将这些工具中的触发器提供给 AWS 自动扩展组。您可能会因为草率地缩减(取出副本集中的多个节点,直到您无法再满足一致性级别,而无需等待重新平衡完成)或甚至添加节点(如果集群负载过重,则添加节点会暂时产生更多负载以将数据复制到新节点,这可能会导致级联故障)而导致集群中断。除非您对添加/删除节点的条件非常有信心,否则您可以在很大程度上使用自动监控/警报建议的手动触发添加/删除。
答案2
根据我通过 Google 快速搜索找到的信息(一,二),Cassandra 支持动态地向正在运行的集群添加和删除节点。Netflix 有一篇有趣的文章这里。
基于此,您可能可以找到一种方法来使用自动扩展来随着需求的变化而更改节点数量。您可能(或可能不需要)需要根据某种 Cassandra 特定信息创建自定义指标并将其发送到 CloudWatch,但除此之外,该过程应该相当简单。例如,您可以在添加或删除额外节点之前为整个集群的平均 CPU 利用率设置阈值。您可能需要小心不要过快删除节点,以防发生一些重新平衡 - 自动扩展确实支持这一点。
但是,我没有使用过 Cassandra,所以我可能完全错了,如果我错了,我相信有人会纠正我。我希望这些想法能给你一些可以自己研究和开发的想法。