Galera Cluster 的局限以及它所不适应的场合

Galera Cluster 是主流的MySQL 多活多主高可用方案之一,即使在 InnoDB Cluster (Group Replication)发布以后。

Galera Cluster 是主流的MySQL 多活多主高可用方案之一,即使在 InnoDB Cluster (Group Replication)发布以后。

Galera Cluster 是主流的MySQL 多活多主高可用方案之一,即使在 InnoDB Cluster (Group Replication)发布以后。

重要的话说三遍:)

然而 Galera Cluster 所采用的技术方案,以及它所依赖的一些技术,使得它在标准的MySQL基础上有一些限制。

首先,它只支持 InnoDB系列的引擎。这对于很多应用而言不是大的问题。InnoDB是最广泛使用的MySQL 引擎, Group Replication 也是要求InnoDB。

第二,它不支持XA分布式事务协议。XA分布式事务协议,在传统的企业应用中很常用 …

Continue Reading

为什么 MySQL Galera Cluster 要求至少三个节点

节点数量的重要性是在发生网络故障的情况下体现出来的。在发生网络故障时,节点可能被分隔为多个互不连通的子集合,Galera Cluster 采用多数票 Quorum 的机制来选择一个票数多的子集合为其活集群,把其他的子集合作为故障节点排除在外,从而避免了数据不一致的问题。如果只有两个节点或者偶数个节点,如果发生了网络故障,那么可能分割出来的子集合节点数相同,无法通过多数票机制选出活集群。如果有三个或奇数个节点,如果发生了一次网络故障,那么割裂出来的子集合节点数肯定是一边多,一边少,从而能顺利地选出多的子集合为活集群。

上面基于节点数的多数票机制是一种简化的描述。Galera Cluster采用的多数票机制是可以给每个节点配置投票权数的。默认情况下是一个节点一票,可以设置为0到255的数字,而且这个数字是可以动态配置的。当集群发生了故障导致新的活集群内节点数量变为偶数时,可以通过动态调整投票权数,使得总票数为奇数。如果将节点的权重设置为0,则该节点作为slave存在。这是在Galera Cluster中实现类似传统的Master Slave 模式的方法。

此外, Galera Cluster 还支持一种只投票但不实际存放数据的节点类型 Arbitrator,它也有助于形成奇数票来帮助处理网络故障下的活集群选择。

上文中使用了“子集合”、“活集群”的说法,只是形象的描述。在 Galera Cluster的文档中,由网络故障 (network …

Continue Reading