这种做法同时也带来了许多的问题,其中最尖锐的就是系统复杂度非常高。具体来说,需要维护和管理多台服
务器,而不仅仅是一台服务器。此外,随着业务数据的不断增加,集群内的服务器数量也越来越多,架构也越
来越复杂。伴随而来的就是经典的分布式系统问题,例如脑裂这种情况。
因此,最终需要解决的问题就是如何要让多个服务器就系统的状态以及系统所经历的每一次数据变更在集群间
达成一致。可以将其概括为使服务器上的每个MySQL实例在状态转换上都达成统一协议,从而使它们看起来像
是作为一个整体在运行,最终的结果就是需要集群间的不同成员对外展示的信息在最终达到一个一致的状态。
这意味着它们需要以(分布式)状态机来运行。
MySQL组复制为这种分布式状态机服务之间的数据复制提供了强大的协调能力。在同一个集群中的MySQL
server,它们会自动进行协调。该集群可以在具有自动选主的单主模式下运行,其中仅一个MySQL server接受
写入更新。也可以在多主要模式下运行,在该模式下,所有MySQL server都可以接受写入更新,即使这些写入
更新是同一时刻发生的。这种分布式协调能力,也可以使得这些并发请求能够正常执行,而不至于在集群内产
生数据冲突。
MySQL server可以离开或者加入集群,并且将相应的视图更新。有时MySQL server可能会意外被踢出集群,在
这种情况下,故障检测机制会检测到此情况并通知集群视图已更改。这些都是自动的。对于写入完成要提交的
事务,不管是在单主还是多主模式下,集群的大多数成员必须在全局事务顺序中就给定事务的顺序达成一致。
然后每个MySQL server自行决定提交或回滚事务,(集群中的每一个节点按照同样的顺序对需要写入的事务做
冲突认证检测)但是同一个集群内的所有MySQL server最后做出决定好对外展示的结果都应该是一致的。
如果存在网络分区,导致集群内成员之间无法达成一个一致性的结果,那么在解决此问题之前,系统会一直处
于一个阻塞的状态。因此,组复制还有一个内置的自动裂脑保护机制。通过这种内置的机制来防止发生网络分
区时,可能导致数据不一致的问题。
所有上面提到的这些特性都由(GCS)协议提供支持。GCS协议提供故障检测机制,组成员之间数据的一致性以
及安全且完全有序的消息传递。所有这些属性对于在一个可以实现分布式数据复制的集群来说是至关重要的,
Paxos算法的实现可确保在不同的组成员之间来实现分布式数据复制的一致性。
03
主从复制
传统的MySQL复制使用一种简单的主从复制方法。master执行事务,提交事务,然后将它们稍后(异步)发送
到slave以重新执行(在基于语句的复制中)或应用(在基于行的复制中)。默认情况下,所有server均具有数
据的完整副本。
评论