Galera:预期用途是多主还是写一个读全部?

Galera: expected use is multi-master or write one and read all?

我第一次面对 db-heavy webapp 的真正扩展问题。

我们正在研究 Galera 和其他集群系统。

我问你Galera的理想使用方式是什么

我认为有 3 个节点

  1. 仅在一个节点上写入并从其他两个节点读取
  2. 写入和读取全部 3
  3. 使用平衡器写入循环

NOTE: this is not a opinion-related question. I am here to ask you to clarify what the goal of Galera, what is the intended, suggested, use

NOTE 2: we need scaling on reading operations than on writing

Galera 的目标是允许所有 3 种口味。

首选项取决于您的应用程序以及服务器的分布情况。

有些应用程序与主从结合得如此紧密,以至于 1 号可能是首选。

没有。 2可能是原来的设计。

没有。 3 是 2 号的变体,增加了一个平衡器。 (我同意 "round-robin" 作为首选方法。)

对于HA,3个(或更多)节点应该在地理上分散。但这会导致必要的延误,使事情变得复杂。

您是否正在寻找 write 缩放?如果是这样,请详细说明。 Galera 会给你 一些 写缩放,但不是很多。大多数复制方案都提供读取缩放。

有关 VARIABLES 和 slowlog 的进一步分析,请参阅 http://mysql.rjweb.org/doc.php/mysql_analysis -- 无论有没有 Galera,这都会有所帮助。

使用 Galera,您将在模式 1 中获得最佳性能。

如果在写入密集型环境中写入所有节点,死锁会大大增加。

您还应该知道,Galera 上的事务提交延迟明显高于单个节点或异步复制,因为提交不会 return 直到法定数量的节点确认它。这意味着您从 Galera 获得的性能通常 更差 写入。

Galera 的主要用例是在您无法承受因服务器故障而丢失交易的环境中,例如支付处理或其他受到严格监管的环境。另一个用例是,如果您的应用程序的编写方式使其对由于复制滞后而导致的竞争条件非常敏感。如果您的预期用途不属于这两个类别中的任何一个,那么 Galera 不太可能是您的最佳解决方案。