繁体   English   中英

Galera 集群问题

[英]Galera Cluster concerns

我想在我们的生产环境中使用 Galera 集群,但我有一些顾虑;

  1. 每个表必须至少定义一个显式主键。

  2. 每个表都必须在 InnoDB 或 XtraDB 存储引擎下运行。

  3. 分批拆分您的大笔交易。 例如,与其让一个事务插入 100,000 行,不如将其分解成更小的块,例如,每个事务插入 1000 行。

  4. 您的应用程序可以容忍非连续的自动递增值。

  5. 架构更改的处理方式不同。

  6. 通过向单个节点发送写入来处理热点/Galera 死锁。

我想对上述所有要点进行一些澄清。此外,我们有 600 多个生产数据库,galera 可以在这种环境中工作吗??

谢谢

一次性处理很多 有两个问题,表创建(invloves Schema ,参见第 5 点)和使用这些表的应用程序。 我会尽力:

1)每张表必须至少定义一个显式主键。

创建表时,不能有任何没有主键的表。 表是用字段和索引创建的。 这些索引之一必须声明为 PRIMARY KEY。

2)每张表必须运行在InnoDB或XtraDB存储引擎下。

创建表时,必须有ENGINE=InnoDBENGINE=XtraDB Galera 不处理默认的 MyISAM 类型表

3)分批整理你的大交易。 例如,与其让一个事务插入 100,000 行,不如将其分解成更小的块,例如,每个事务插入 1000 行。

这与您的架构无关,而是与您的应用程序有关。 尽量不要在一个transactionINSERT大量数据的应用程序。 请注意,这会起作用,但有风险。 不是要求,而是建议。

4) 您的应用程序可以容忍非连续的自动递增值。

使用集群,您可以更新多个服务器。 如果某个字段是自动递增的,则每个集群成员可能会尝试递增相同的字段。 您的应用程序永远不应该假设下一个 ID 与前一个 ID 相关。 对于自增字段,不要强加一个值,让 DB 处理它。

5)架构更改的处理方式不同。

Schema是表和索引的描述,而不是添加、删除或检索信息的事务。 您有多个服务器,因此必须小心处理架构更改,以便所有服务器都能赶上。

6) 通过向单个节点发送写入来处理热点/Galera 死锁。

这与应用程序和数据库相关。 死锁是一种情况,应用程序的 2 个不同部分尝试获取一个值 (ValueA),作为锁定它的数据库,以便可以更改它,然后尝试获取另一个值 (ValueB) 用于相同的用途。 如果另一部分尝试先锁定 ValueB ,然后是 ValueA ,我们就会陷入死锁,因为每个应用程序都锁定了另一个应用程序的下一个值。 为了避免这种情况,最好只写入集群中的一台服务器,并使用其他服务器进行读取。 请注意,您的应用程序中仍然可能存在死锁。 但是你可以避免 Galera 制造这种情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM