我想在我们的生产环境中使用Galera集群,但我有一些担心;
我想要澄清所有前面提到的points.Also,我们有超过600个数据库正在生产,galera能在这个环境中工作吗?
谢谢
发布于 2017-09-25 20:54:01
这是一个需要一次性处理的LOT。有两个问题:表创建(请参阅第5点)和使用这些表的应用程序。我试试看:
1)每个表必须至少定义一个显式主键。
当您创建一个表时,您不能拥有任何没有的表,没有主键。表由字段和索引创建。必须将其中一个索引声明为主键。
2)每个表必须在InnoDB或XtraDB存储引擎下运行。
创建表时,必须具有ENGINE=InnoDB或ENGINE=XtraDB。Galera不处理默认的MyISAM类型表。
3)把你的大交易分批分批处理。例如,与其让一个事务插入100,000行,不如将其拆分为较小的块,例如,每个事务插入1000行。
这与您的架构无关,而是与您的应用程序有关。尽量不要有一个INSERT在一个transaction中包含大量数据的应用程序。Note认为这是可行的,但风险很大。这不是的一个要求,而是一个建议。
4)应用程序可以容忍非顺序的自动增量值。
使用群集,您可以更新多个服务器。如果某个字段是自动递增的,则每个群集成员都可能尝试增加同一个字段.您的应用程序应该永远不会假设下一个ID与上一个ID相关。对于自动增量字段,不要强制一个值,让DB处理它。
5)模式更改的处理方式不同。
架构是表和索引的描述,而不是添加、删除或检索信息的事务。您有多个服务器,因此必须小心处理架构更改,以便所有服务器都能赶上。
6)通过向单个节点发送写操作来处理热点/Galera死锁。
这是与应用程序和DB相关的。死锁是一种情况,其中应用程序的两个不同部分试图获得一个值(ValueA),因为DB要锁定它,以便对其进行更改,然后尝试获取另一个值(ValueB),用于相同的用途。如果另一个部分试图首先锁定ValueB,然后是ValueA,那么我们就会陷入死锁,因为每个应用程序都锁定了另一个应用程序的下一个值。为了避免这种情况,最好只将tp写入集群中的一台服务器,并使用其他服务器进行读取。请注意,您仍然可以在应用程序中使用死锁。但你可以避免加雷拉制造这种局面。
https://stackoverflow.com/questions/46413704
复制相似问题