暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

群组复制MySQL Group Replication

在通常的IT环境下,如果需要保证系统连续不断的运行,需要创建一个容统。最常方法是使用冗余的组件,即使是部分组件出现故障,系统也能够继续期运行。基于这种要求,来了一系列挑,系的复性非常高。对于数据库来说,不仅仅是管理一台服务器,而且需要维护和管理多台服器。除了保证系统持续可用以外,解决常见的分布式系统问题,例如网分区或裂情况。

分布式数据库面临的挑是如何将数据和数据复制的逻辑与多个服器间进行一致性协调逻辑相融合。也就是说,要多个服器根据系的状以及系经历的每一次数据更改达成一致。可以将其概括使服器在每个数据态转换上都达成协议,从而使它都作一个数据库执行,或者最达到同一状意味着它需要作(分布式)状机运行。

MySQL群组复制为分布式状机复制提供了服器之协调能力。服器属于同一组时,它会自动进协调该群组可以在主模式下运行,其中仅有一个服器接受更新处理。或者,在多主模式下运行,在模式下,所有服器都可以同时接受更新处理。

群组复制包括一个内置的员资格服,可以使群视图保持一致,并且在任何时间点均可用于所有服器。服器可以离开并加入该组视图将相更新。有器可能会意外离开该组,在种情况下,故障检测机制会自动检测到此情况,并通知群组视图已更改。

群组复制有一个内置的脑裂保机制于要提交的事,群的大多数成员必在全局事务顺序中就定事序达成一致。每个服器分决定提交或中止事,但是所有服器都做出相同的决定。如果存在网分区,致成无法达成协议,那么系将无法继续运行。

所有些均由通信系GCS协议提供支持。提供故障检测机制,员资格服以及安全有序的消息传递些属性是建系的关可确保在服一致地复制数据。的核心是基于Paxos算法的实现。它作为群通信引擎。

主从复

传统MySQL复制提供了一种简单的主从复制方法。有一个主服器,有一个或多个器。主数据库执行事,将其提交,然后(因此异步)将它们发送到从据,以重新行(基于句的复制中)或用(在基于行的复制中)。是一个非共享系,默情况下所有服器都具有数据的完整副本。

半同步复制,它添加了一个同步步意味着主服器在提交等待器确接收到事。只有这样,主服器才会恢复提交操作。

半同步复制,它添加了一个同步步意味着主服器在提交等待器确接收到事。只有这样,主服器才会恢复提交操作。

群组复制场景的示

以下示例是群组复制的典型用例。

·      性复制 -需要非常流的复制基础架构境,其中服器的数量必须动态增加或减少,并且副作用要尽可能少。例如,用于云的数据

·      高度可用的分片 -分片是实现写入横向展的一种流行方法。使用MySQL群组复制实现高度可用的分片,其中每个分片都映射到一个复制

·      主从复制的替代方法 -在某些情况下,使用个主服器会成为单争点。在某些情况下,写整个群可能会更具展性。

·      自治系 -为了使用自化功能部署MySQL群组复制

多主模式和单主模

群组复制主模式或多主模式运行。群的模式是一个群的配置置,由group_replication_single_primary_mode
 
统变量指定,所有成都必相同。ON
表示主模式,是默模式,OFF
表示多主模式。

群组复制运行,不能手更改group_replication_single_primary_mode
。在MySQL 8.0.13中,可以使用 group_replication_switch_to_single_primary_mode()
 
 group_replication_switch_to_multi_primary_mode()
 UDF
群组复制仍在运行时,将群从一种模式移至另一种模式。UDF管理更改群模式的程,并确保数据的安全性和一致性。在早期版本中,要更改群的模式,必停止群组复制并更改所有成上的group_replication_single_primary_mode
。然后对群组进行完全重新引(服器使用group_replication_bootstrap_group=ON
行引新操作配置的更改)。

群组复制不会理客端故障移。MySQL Router 8.0的中件,代理,接器或用程序本身来理。

单主模式

主模式(group_replication_single_primary_mode=ON
)中,该组有一个为读写模式的主服器。中的其他成模式(super-read-only=ON
)。主服器通常是引导该组的第一台服器。加入该组的所有其他服器将与主服器通信,并自动设模式。

主模式下,群组复制制将一台服器用于数据写入,与多主模式相比,一致性检查格性低,并且不需要特小心地DDL句。通过选项 group_replication_enforce_update_everywhere_checks
 
启用或禁用群格一致性检查。在主模式下部署或将群更改为单主模式,必将此系统变 OFF

选定主服器的成可以通以下方式行更改:

·       如果有的主数据自愿或意外离开该组会自动选择一个新的主数据

·       可以使用group_replication_set_as_primary()
 UDF 
任命特定成新的主数据库。

·      如果使用group_replication_switch_to_single_primary_mode()
 UDF
将以多主模式运行的群更改主模式运行,将自动选举一个新的主数据库,或者可以通UDF指定新的主数据库。

当所有都运行MySQL 8.0.13或更高版本,才能使用UDF。自动选择新的主服器或手指定新的主服,它会自动设写,而其他将保持为从器,并保持只如下图:

选举或任命新的主服务器,可能会有一些数据应用积压(旧的主服务器上已经用的更改)。在种情况下,写事可能会致冲突并回,而只可能会取旧数据,直到新的主服务器赶上旧的主服务器。群组复制可以通过流量控制机制最大程度地减少快速成和慢成的差异。从MySQL 8.0.14开始,可以使用 group_replication_consistency
 统变量,用于配置的事一致性,以防止出问题 BEFORE_ON_PRIMARY_FAILOVER
(或任何更高的一致性)将新事保留在新出的主服务器上,直到用了数据积压。如果没有为群组使用流量控制和事一致性保,最佳实践是在将新的主用程序重新路由到主服务器之前,等待新主服务器用其复制相关的中日志。

选举主成员算法

动选举过程包括每个成员查的最新视图,潜在的新主成员排序选择最合适的成。每个成都按照其MySQL Server版本中的主成员选举算法在本地做出自己的决定。由于所有成都必做出相同的决定,因此,如果其他正在运行低版本的MySQL Server整其主要选举算法,从而使其与该组有最低MySQL Server版本的成具有相同的行

选举主成员的因素如下:

1.  的第一个因素是哪个或哪些成运行最低的MySQL Server版本。如果所有都在运行MySQL 8.0.17或更高版本,首先按其行版的丁程序员进行排序。如果任何成运行的是MySQL Server 5.7MySQL 8.0.16或更低版本,首先按其行版的主版本员进行排序,并且忽略丁程序版本。

2. 如果有多个成正在运行最低的MySQL Server版本,的第二个因素是每个成的成重,具体由成上的系统变group_replication_member_weight
指定。如果中的任何成正在运行MySQL5.7统变量不可用),将忽略此因素。

group_replication_member_weight
 
统变量指定在0-100内的数。所有成的默重均50,将低于重以降低其排序,将高于重以增加其排序。可以使用此功能来先使用更好的硬件,或确保在划的主要维护将故障移到特定成

3. 如果有多个成正在运行最低的MySQL Server版本,并且多个成中具有最高成重(或忽略了成重),的第三个因素是每个成所生成的服UUID序,由系统变server_uuid
指定。服UUID最低的成选为主服器。

查找主数据库

要了解以主服器模式部署当前是哪个服器,使用performance_schema.replication_group_members
表中的MEMBER_ROLE
列。例如:

选举或任命新的主服务器,可能会有一些数据应用积压(旧的主服务器上已经用的更改)。在种情况下,写事可能会致冲突并回,而只可能会取旧数据,直到新的主服务器赶上旧的主服务器。群组复制可以通过流量控制机制最大程度地减少快速成和慢成的差异。从MySQL 8.0.14开始,可以使用 group_replication_consistency
 统变量,用于配置的事一致性,以防止出问题 BEFORE_ON_PRIMARY_FAILOVER
(或任何更高的一致性)将新事保留在新出的主服务器上,直到用了数据积压。如果没有为群组使用流量控制和事一致性保,最佳实践是在将新的主用程序重新路由到主服务器之前,等待新主服务器用其复制相关的中日志。

选举主成员算法

动选举过程包括每个成员查的最新视图,潜在的新主成员排序选择最合适的成。每个成都按照其MySQL Server版本中的主成员选举算法在本地做出自己的决定。由于所有成都必做出相同的决定,因此,如果其他正在运行低版本的MySQL Server整其主要选举算法,从而使其与该组有最低MySQL Server版本的成具有相同的行

选举主成员的因素如下:

1.  的第一个因素是哪个或哪些成运行最低的MySQL Server版本。如果所有都在运行MySQL 8.0.17或更高版本,首先按其行版的丁程序员进行排序。如果任何成运行的是MySQL Server 5.7MySQL 8.0.16或更低版本,首先按其行版的主版本员进行排序,并且忽略丁程序版本。

2. 如果有多个成正在运行最低的MySQL Server版本,的第二个因素是每个成的成重,具体由成上的系统变group_replication_member_weight
指定。如果中的任何成正在运行MySQL5.7统变量不可用),将忽略此因素。

group_replication_member_weight
 
统变量指定在0-100内的数。所有成的默重均50,将低于重以降低其排序,将高于重以增加其排序。可以使用此功能来先使用更好的硬件,或确保在划的主要维护将故障移到特定成

3. 如果有多个成正在运行最低的MySQL Server版本,并且多个成中具有最高成重(或忽略了成重),的第三个因素是每个成所生成的服UUID序,由系统变server_uuid
指定。服UUID最低的成选为主服器。

查找主数据库

要了解以主服器模式部署当前是哪个服器,使用performance_schema.replication_group_members
表中的MEMBER_ROLE
列。例如:

群组复制是最的一致性系意味着一旦入流量减慢或停止,所有将具有相同的数据内容。当流量在流动时,可以先在某些成务进行外放,特是在某些成的写入吞吐量比其他成少的情况下,过时取。在多主数据模式下,速度慢的成员还可能积压过多的事,从而致更大的冲突和认证了限制问题,可以激活和群组复制的流量控制机制,以最大程度地减少快慢成的差异。从MySQL 8.0.14开始,如果要为组中的每个事有一个事一致性保,可以使用系统变group_replication_consistency
来做到一点。可以选择适合群工作量和数据/写入置,同时需要提高一致性的同步性能的影响。可以为单个会话设置系统变量,以保护对敏感的事

事务检查

在多主模式下部署群组时,将检查以确保它模式兼容。在多主模式下部署群组复制时,将行以下格的一致性检查

·       如果事SERIALIZABLE隔离行,在与同步,其提交将失

·       如果事针对具有级联约束的外的表行的,在与同步,其提交将失

检查group_replication_enforce_update_everywhere_checks
统变量控制。在多主模式下,通常将系统变ON
,但是可以选择将系统变来禁用检查OFF
。在主要模式下部署,系统变量必须设OFF

数据定义语

在多主模式下的群组复制拓扑中,行数据定义语句(DDL需要格外小心。

MySQL 8.0引入了原子数据定义语言(DDL句的支持,其中完整的DDL句作为单个原子事被提交或回。但是DDL句(原子或其他方式)束当前会于活的所有事,相当于在该语句之前行了COMMIT
操作一意味着DDL句不能在另一个事内,在START TRANSACTION ... COMMIT
的事控制句内行,也不能与同一事内的其他合。

群组复制基于乐观复制,乐观执句,并在必要。每个服都不会首先确保群组协议的安全。因此,在多主模式下复制DDL,需要格外小心。如果同一行模式更改(使用DDL)并更改象包含的数据(使用DML),当模式操作尚未完成并在各复制时,需要通同一服理更改。否,当操作中断或部分完成,可能致数据不一致。

版本兼容性

得最佳兼容性和性能,群中的所有成员应运行相同版本的MySQL Server,因此运行相同版本的群组复制。在多主模式下,重要,因所有成通常都将以写模式加入该组。如果中包含多个MySQL Server版本的成,某些成可能与其他成不兼容,因支持其他成不具的功能或缺少其他成具有的功能。了防止种情况,当新成加入(包括之前已升并重新启的成对组中的其余成员进行兼容性检查

些兼容性检查果在多主模式下尤其重要。如果加入成所运行的MySQL Server版本高于所运行的最低版本,它将加入该组,但保持只模式。(在主模式运行的中,无如何,新添加的成在任何情况下均默认为。)运行MySQL 8.0.17或更高版本的成检查兼容性会考虑该发行版的丁程序版本。运行MySQL 8.0.16或更低版本或MySQL 5.7的成员仅主要版本。

在具有使用不同MySQL Server版本的成的多主模式下运行的群中,群组复制管理运行MySQL 8.0.17或更高版本的成写状。如果成离开该组运行当前最低版本的成将自动设为读写模式。当您将以主模式运行的更改以多主要模式运行使用 group_replication_switch_to_multi_primary_mode()
 UDF群组复制会自将成员设正确的模式。如果成运行的MySQL器版本高于中存在的最低版本的成将自置于只模式,而运行最低版本的成写模式。

 

群组复制服

组成员身份

MySQL群组复制中,一器构成一个复制。群具有名称,名称采用UUID的形式。群组动态的,服器可以随离开(自愿或非自愿)并加入。每当服器加入或离开群组都会行自我整。

如果服器加入该组,它将通有服失的状来使自己更新至最新状。如果服器离开了该组,例如已被拆除以维护其余服器会注意到器已离开并自重新配置该组

群组复制具有员资格服了哪些服机状并参与该组机服器列表称视图中的每台服器都具有一致的视图,即在定的时间哪些成极参与的服器。

就事提交达成共,而且必就当前视图达成一致。如果有成同意将新服重新配置该组将器集成到其中,从而触发视图更改。如果服器自愿离开该组则该组将重新动态排列其配置,并触发视图更改。

在成自愿离开的情况下,它首先启动动态组重新配置,在此期,所有成在不离开服器的情况下就新视图达成一致。但是,如果成非自愿离开该组,例如由于意外停止或网络连接断开,它将无法启重新配置。在种情况下,群组复制的故障检测机制会在短时间已离开,并提出重新配置不包含故障成的群。与自愿退出的成,重新配置需要中大多数服器的同意。但是,如果小无法达成协议,例如,由于它的分区方式使得大多数服器都不在线,因此系无法动态更改配置,以防止出现脑裂情况。种情况需要管理的干

可能会短脱机,并尝试再次重新加入该组。在种情况下,重新加入的成会忘其先前的状,但是如果其他成向其送旨在用于其崩前状的消息,可能致出现问题,可能出现数据不一致。如果种情况的成参加XCom的共识协议有可能XCom在失前后做出不同的决定来同一共回合提供不同的价

应对这种可能性,从MySQL 5.7.22MySQL 8.0开始,服器在加入组时会被予唯一的标识符。这样群组复制就可以了解以下情况:同一台服器的新化身(具有相同的地址,但有一个新的标识符)正试图加入该组,而旧例仍被列。新的化身被阻止加入该组,直到可以通重新配置将旧的化身移除止。如果系统变group_replication_member_expel_timeout
有更多时间在被逐之前返回到该组,被怀疑的成可以重新加入,只要它实际上并未失即可。如果群组复制在服器上停止并重新启则该将成新的化身,并且在怀疑超之前不能重新加入。

故障检测

群组复制包括故障检测机制,机制能找到并告哪些服于静默状,并因此认为已死机。体而言,故障检测器是一种分布式服,可提供有关哪些服器可能死机(怀疑)的信息。服器静音会触发怀疑。如果服A时间段内未收到来自服B的消息,生超并引起怀疑。之后,如果群同意怀疑可能是真的,那么该组将确定定的服生了故障。意味着中的其余成将做出协调决策以排除定成

如果服器与中的其他服器隔离,怀疑所有其他服器均已失。无法与该组达成协议(因它无法达到法定人数),因此怀疑不会生任何后果。通过这种方式将服器与隔离,它将无法行任何本地事

容错

MySQL群组复制建立在Paxos分布式算法之上实现,以提供服器之的分布式协调。因此,它需要大多数服于活才能达到法定人数,从而做出决定。直接影响了系可以容忍的故障数量,而不会害自身及其整体功能。容忍f
 故障所需的服器数量(nn = 2 x f + 1

实际上,意味着要容忍一个故障,该组中必包含三台服器。这样一来,如果一台服生故障,仍然会有两台服器形成多数(三分之二),并使系统继续做出决定并继续运行。但是,如果第二台服生故障,则该组剩一台服器)将被阻挡,因没有多数服务器可以决定。

下表是明上述公式的内容。

可观察性

群组复制插件中内置了多自化功能。有可能需要了解幕后生的事情。群组复制和性能模式的检测变得很重要。可以通Performance Schema查询的整个状(包括视图,冲突统计信息和服)。可以接到中的个服器,并通在与群组复制相关的Performance Schema表上执行select句来取本地和全局信息。

群组复制插件体系结

MySQL Group Replication是一个MySQL插件,它基于有的MySQL复制基础结构,并利用了二制日志,基于行的日志记录和全局事务标识符等功能。它与当前的MySQL框架集成,例如Performance Schema或插件和服础结构。下提供了一个框,描述了MySQL群组复制体体系构。

群组复制插件框

MySQL群组复制插件包括一用于捕用和生命周期的APIAPI控制插件如何与MySQL Server交互。有一些接口可以使信息从服器流向插件,反之亦然。些接口将MySQL Server核心与群组复制插件隔离开,并且大多数是放置在事务执行管道中的子。在一个方向上,从服器到插件,会有事件通知,例如服器启,服器恢复,服器准接受接以及服器即将提交事。另一方面,插件会指示服如提交或中止正在行的事务,或将事务存储在中继日志的队列中。

群组复制插件体系构的下一是一组组件,件在将通知路由到它们时会做出反。捕获组负责跟踪与正在行的事相关的上下文。用程序负责在数据程事。恢复件管理分布式恢复,并负责选择捐献者,管理追赶程序并捐献者的故障做出反来使加入群的服器保持最新状

复制协议包含复制协议的特定逻辑。它理冲突检测,接收事并将其播到该组

群组复制插件体系构的最后两通信系GCSAPI,以及基于Paxos通信引擎(XCom)的实现GCS API是一个高API,它抽象了构建复制状机所需的属性。因此,它将消息传递层实现与插件的其余上分离。通信引擎理与复制的通信。

识别二维码快速访问在线手册!




最后修改时间:2020-02-19 09:14:51
文章转载自MySQL解决方案工程师,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论