【问题标题】:Alarmingly low performance with galera clustergalera 集群的低性能令人震惊
【发布时间】:2017-06-02 22:43:00
【问题描述】:

我的目标是利用我的 galera 集群中两个节点的足够 cpu 资源,以便我的端到端堆栈可以支持更多的 TPS。现在,我的完整堆栈受到 36vcpu 的单个 mariadb 服务器的限制,它可以达到 10000 TPS。

我想通过在一个 galera 集群中使用 2 个 DB 节点来支持近 20000 TPS(因为 1 可以支持大约 10000 TPS - 这受到 CPU 的限制)。在这个时候,我不关心裂脑和其他复制或边界线场景。我最初在 galera 中使用 ha 代理负载均衡器的 2 个节点对其进行了测试,但结果非常糟糕(仅限 3500 TPS)。 我是否正在尝试实现 galera 无法做到的事情?请给点意见。

我可以通过任何其他机制来集群我的数据库以使应用程序超出一个节点上 10000 TPS 的限制?

【问题讨论】:

  • 我不是 MySQL 集群方面的专家,但我认为因为你的目标是速度而不是复制,所以你应该看看像 NDB 这样的 MySQL 的 Shared-Nothing 集群架构,而不是复制——像 Galera 这样的集中集群。
  • 您不能在生产系统中使用具有 2 个节点的 Galera。如果一个节点崩溃并重新同步另一个节点用于重新同步,那么您的集群就会关闭!查看负载也很重要。对于高读取负载 Galera 是最好的。还要考虑网络中的多播,因此节点只能发送到 1 个地址而不是每个节点。优化my.cnf。最后使用 MaxScal 代替 HaProxy。

标签: mysql mariadb database-administration percona galera


【解决方案1】:

每个事务(在 Galera 中)必须在 COMMIT 时间与所有其他节点交谈,以确认该事务将在任何地方工作。最终,这些节点必须执行交易。取决于许多因素,这项工作可能会或可能不会比原始节点的工作量少很多。

所有形式的复制都涉及在从站上重复在主站上发生的“写入”。诀窍是尽量减少奴隶的努力;但这只能部分完成。

如果独立服务器最大处理 10K 事务,any 复制设置不太可能跨 2 个节点执行 20K。 也许有 3 个或更多节点可以获得 20K。

Galera 似乎在 4-5 个节点上达到顶峰。也就是说,同步变得势不可挡,从而限制了扩展。

Oracle 的“InnoDB Cluster”看起来很有希望超过 5 个节点。它现在在 5.7 和 8.0 中有些可用。

NDB Cluster 依赖于“最终一致性”,这是与 Galera 或 InnoDB Cluster 的“异步”(常规复制)、“半同步”或“同步”非常不同的模型。如果事务从不相互冲突,或者至少不是来自不同的节点,NDB 或许会大放异彩。

已经进行了超过 10K 的实验。试试this

请描述您的“交易”;可能还有其他技术可以提高性能。例如,一个 100 行的 INSERT 运行速度大约是 100 个单行 INSERTs 的 10 倍; CPU 中的大部分节省。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    相关资源
    最近更新 更多