【MGR】MySQL Group Replication 要求与限制

目录

17.3 Requirements and Limitations

17.3.1 Group Replication Requirements

Infrastructure

Server Instance Configuration

17.3.2 Group Replication Limitations

Limit on Group Size

Limits on Transaction Size


17.3 Requirements and Limitations

这个部分列出并解释了组复制的要求和限制。

17.3.1 Group Replication Requirements

Infrastructure

InnoDB存储引擎。数据必须存储在InnoDB事务性存储引擎中。事务乐观地执行,然后在提交时检查冲突。如果存在冲突,为了在群组中保持一致性,某些事务将被回滚。这意味着需要一个事务性存储引擎。此外,当与组复制一起操作时,InnoDB提供了一些额外的功能,以实现更好的管理和处理冲突。使用其他存储引擎,包括临时MEMORY存储引擎,可能会导致组复制出现错误。在将实例与组复制一起使用之前,请将其他存储引擎中的任何表转换为使用InnoDB。您可以通过设置组成员上的disabled_storage_engines系统变量来防止使用其他存储引擎,例如:

disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"

主键。每个要由群组复制的表必须具有定义的主键,或者主键等效项,其中等效项是非空唯一键。此类键作为表中每行的唯一标识符是必需的,使系统能够确定哪些事务通过确定每个事务已修改的确切行而发生冲突。

IPv4网络。MySQL组复制使用的群组通信引擎仅支持IPv4。因此,组复制需要IPv4网络基础设施。

网络性能。MySQL组复制设计为部署在服务器实例非常接近的群集环境中。网络延迟和网络带宽都可能影响群组的性能和稳定性。所有群组成员之间必须始终保持双向通信。如果服务器实例的入站或出站通信被阻止(例如,由防火墙或连接问题导致),该成员将无法在群组中运行,并且群组成员(包括存在问题的成员)可能无法为受影响的服务器实例报告正确的成员状态。

Server Instance Configuration

在作为群组成员的服务器实例上必须配置以下选项。

唯一服务器标识符。使用server_id系统变量为服务器配置唯一的服务器ID,这是复制拓扑中所有服务器所需的。默认的服务器ID为0,复制拓扑中的服务器无法相互连接。服务器ID必须是介于1和(232)−1之间的正整数,并且必须与复制拓扑中任何其他服务器正在使用的任何其他服务器ID不同。

二进制日志打开。设置--log-bin[=log_file_name]。MySQL Group Replication会复制二进制日志内容,因此需要将二进制日志打开才能运行。此选项默认已启用。请参阅5.4.4节,“二进制日志”。

副本更新被记录。设置--log-slave-updates。服务器需要记录通过复制应用程序应用的二进制日志。群组中的服务器需要记录它们从群组中接收并应用的所有事务。这是因为恢复是通过依赖群组中参与者的二进制日志来进行的。因此,即使对于那些未在服务器本身上启动的事务,每个事务的副本也需要存在于每个服务器上。

二进制日志行格式。设置--binlog-format=row。组复制依赖于基于行的复制格式,以在群组中的服务器之间一致地传播更改。它依赖于基于行的基础架构,能够提取检测群组中不同服务器上同时执行的事务之间冲突所需的信息。请参阅16.2.1节,“复制格式”。

关闭二进制日志校验和。设置--binlog-checksum=NONE。由于复制事件校验和的设计限制,组复制无法使用它们,因此必须将其禁用。

全局事务标识符打开。设置gtid_mode=ON和enforce_gtid_consistency=ON。组复制使用全局事务标识符跟踪每个服务器实例上确切提交的事务,从而能够推断出哪些服务器执行了可能与其他地方已提交的事务冲突的事务。换句话说,显式事务标识符是框架的基本组成部分,以便确定哪些事务可能发生冲突。请参阅16.1.3节,“使用全局事务标识符进行复制”。

复制信息存储库。设置master_info_repository=TABLE和relay_log_info_repository=TABLE。复制应用程序需要将源和副本元数据写入mysql.slave_master_info和mysql.slave_relay_log_info系统表。这确保了Group Replication插件具有一致的可恢复性和复制元数据的事务管理。请参阅16.2.4.2节,“复制元数据存储库”。

事务写集提取。设置--transaction-write-set-extraction=XXHASH64,以便在收集行以将其记录到二进制日志时,服务器还收集写集。写集基于每行的主键,并且是标识已更改的行的简化和紧凑视图的标签。然后,此标签用于检测冲突。

小写表名。在所有群组成员上将--lower-case-table-names设置为相同的值。对于InnoDB存储引擎的使用,设置为1是正确的,这是组复制所必需的。请注意,此设置不是所有平台的默认设置。

多线程应用程序。可以将Group Replication成员配置为多线程副本,从而使事务可以并行应用。对slave_parallel_workers启用非零值会在成员上启用多线程应用程序,并且可以指定高达1024个并行应用程序线程。如果这样做,则还需要以下设置:

slave_preserve_commit_order=1 此设置是必需的,以确保并行事务的最终提交与原始事务的顺序相同。Group Replication依赖于围绕所有参与成员都按照相同顺序接收并应用提交的事务的保证建立的一致性机制。

slave_parallel_type=LOGICAL_CLOCK 与slave_preserve_commit_order=1一起需要此设置。它指定用于决定在副本上允许哪些事务并行执行的策略。

将slave_parallel_workers=0设置为禁用并行执行,并为副本提供单个应用程序线程和无协调线程。在此设置下,slave_parallel_type和slave_preserve_commit_order选项无效且被忽略。

17.3.2 Group Replication Limitations

Group Replication存在以下已知限制。请注意,对于多主模式组的限制和问题在故障转移事件期间也可能适用于单主模式集群,因为新选举的主服务器正在清除其应用程序队列中的旧主服务器的内容。

提示

Group Replication是基于GTID的复制构建的,因此您还应该注意16.1.3.6节,“使用GTID进行复制的限制”。

Gap Locks 间隙锁。 Group Replication的并发事务的认证过程不考虑间隙锁,因为间隙锁的信息在InnoDB之外不可用。有关更多信息,请参见间隙锁。

注意

对于多主模式的组,除非您的应用程序依赖REPEATABLE READ语义,否则我们建议使用READ COMMITTED隔离级别与Group Replication一起使用。InnoDB在READ COMMITTED中不使用间隙锁,这将InnoDB内部的本地冲突检测与Group Replication执行的分布式冲突检测进行了对齐。对于单主模式的组,只有主服务器接受写入,因此READ COMMITTED隔离级别对Group Replication不重要。

Table Locks and Named Locks. 表锁和命名锁。认证过程不考虑表锁(参见13.3.5节,“LOCK TABLES和UNLOCK TABLES语句”)或命名锁(参见GET_LOCK())。

Replication Event Checksums。由于复制事件校验和的设计限制,Group Replication目前无法使用它们。因此,请设置--binlog-checksum=NONE。

SERIALIZABLE Isolation Level。默认情况下,多主模式组不支持SERIALIZABLE隔离级别。将事务隔离级别设置为SERIALIZABLE会使Group Replication拒绝提交该事务。

Concurrent DDL versus DML Operations 并发DDL与DML操作。在使用多主模式时,不支持并发针对同一对象但在不同服务器上执行的数据定义语句和数据操作语句。在对对象执行数据定义语言(DDL)语句期间,对相同对象但在不同服务器实例上执行并发数据操作语言(DML)语句可能会导致未检测到的DDL在不同实例上执行冲突。

Foreign Keys with Cascading Constraints 具有级联约束的外键。多主模式组(所有成员都配置为group_replication_single_primary_mode=OFF)不支持具有多级外键依赖关系的表,特别是具有定义的级联外键约束的表。这是因为导致由多主模式组执行的级联操作的外键约束可能导致在组的成员之间未检测到的冲突,并导致组的成员之间的数据不一致。因此,我们建议在用于多主模式组的服务器实例上设置group_replication_enforce_update_everywhere_checks=ON,以避免未检测到的冲突。

在单主模式下,这不是问题,因为它不允许将并发写入多个组成员,因此没有未检测到冲突的风险。

MySQL Enterprise Audit和MySQL Enterprise Firewall。在版本5.7.21之前,MySQL Enterprise Audit和MySQL Enterprise Firewall在mysql系统数据库中使用MyISAM表。Group Replication不支持MyISAM表。

Multi-primary Mode Deadlock 多主模式死锁。当组处于多主模式时,SELECT .. FOR UPDATE语句可能导致死锁。这是因为锁不在组的成员之间共享,因此可能不会达到对此类语句的期望。

Replication Filters 复制过滤器。不能在配置为Group Replication的MySQL服务器实例上使用复制过滤器,因为在某些服务器上过滤事务会使组无法达成一致状态。

Limit on Group Size

单个复制组中的最大MySQL服务器数量为 9。如果更多成员尝试加入该组,则其请求将被拒绝。这个限制是从测试和基准测试中确定的,作为一个安全边界,在稳定的局域网上,该组的性能表现可靠。

Limits on Transaction Size

如果单个事务导致的消息内容足够大,以至于在5秒窗口内无法在网络上的组成员之间复制该消息,则成员可能会因为忙于处理该事务而被怀疑失败,并被驱逐。大型事务也可能因为内存分配问题而导致系统变慢。为避免这些问题,请使用以下缓解措施:

  • 在可能的情况下,尽量限制事务的大小。例如,将与LOAD DATA一起使用的文件拆分为较小的块。
  • 使用系统变量group_replication_transaction_size_limit来指定组接受的最大事务大小。在MySQL 5.7.37及更早版本中,该系统变量默认为零,但从MySQL 5.7.38开始,在MySQL 8.0中,默认值为最大事务大小为150000000字节(约143 MB)。超过此限制的事务将被回滚,并且不会发送到Group Replication的Group Communication System (GCS)以分发到组中。根据组需要容忍的最大消息大小调整此变量的值,要注意处理事务所需的时间与其大小成正比。

注意

当从MySQL 5.7.37或更早版本升级到MySQL 5.7.38或更高版本时,如果您的Group Replication服务器以前接受的事务大于新的默认限制,并且您允许group_replication_transaction_size_limit默认为旧的零限制,那么在升级到新默认值后,这些事务将开始失败。您必须指定一个适当的大小限制,允许组容忍的最大消息大小(这是推荐的解决方案),或者指定零设置以恢复先前的行为。

  • 使用系统变量group_replication_compression_threshold来指定应用压缩的消息大小。该系统变量默认为1000000字节(1 MB),因此大消息会自动进行压缩。当Group Replication的Group Communication System (GCS)接收到一个由group_replication_transaction_size_limit设置允许但超过group_replication_compression_threshold设置的消息时,会执行压缩。如果将系统变量值设置为零,则取消压缩。有关更多信息,请参阅17.9.7.2节,“消息压缩”。

如果您已禁用消息压缩并且未指定最大事务大小,则复制组成员上的应用程序线程可处理的消息的上限大小为成员的slave_max_allowed_packet系统变量的值,其默认值和最大值为1073741824字节(1 GB)。当接收成员尝试处理超过此限制的消息时,该消息会失败。复制组成员可以生成并尝试传输到组的消息的上限大小为4294967295字节(约4 GB)。这是接受Group Replication(一种Paxos变体)的组通信引擎(XCom)所接受的数据包大小的硬限制,在GCS处理消息后接收它们。当发起成员尝试广播超过此限制的消息时,该消息会失败。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/730680.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

项目人都应该来看看!!揭秘项目崩盘背后的逻辑,NFG数藏成破局关键

每天五分钟一套互联网知识,大家好我是啊浩说模式 在投资领域,项目泡沫崩盘是一个屡见不鲜的现象。当某个项目或行业被过度炒作,市场参与者纷纷涌入,推动价格不断攀升,直至形成一个看似坚不可摧的泡沫。然而&#xff0c…

用FPGA CORDIC IP核实现信号的相位检测,计算相位角

用FPGA CORDIC IP核实现信号的相位检测 1.matlab仿真 波形仿真代码: 代码功能:生成一个点频信号s,求出s的实部和虚部;并且结算相位角atan2。画出图形,并且将Q和I数据写入文件中。 %代码功能:生成一个点…

20.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-数据分析工具数据类型编辑功能的实现

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易道云信息技术研究院VIP课 上一个内容:19.数据分析工具数据类型配置功能的实现 码云地址(master 分支&#…

unity学习(49)——服务器三次注册限制以及数据库化角色信息4--角色信息数据库化

1.此处下断开始调试,list函数内就有问题: 2. 现在的问题是只读不写!32行就是写入部分的代码: 3. 很奇怪,调试的时候确实是写进来了 程序正常执行后,文件中数据也没有消失 关闭服务器文件内容依旧正常。 players包含所…

Lc11. 盛最多水的容器

题目:给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 思路:定义两个指…

MySQL篇—执行计划之覆盖索引Using index和条件过滤Using where介绍(第三篇,总共三篇)

☘️博主介绍☘️: ✨又是一天没白过,我是奈斯,DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux,也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注❣…

正态性检验方法汇总

🍉CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一|统计学|干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项,参与研究经费10w、40w级横向 文…

提醒一下!今年考研的人不要太老实了!!

今年准备计算机考研的同学,别太老实了!别人说什么你就信什么 如果你的工作能力不足以支撑找到一个满意的工作,那我建议再沉淀两年! 很多同学其实有点眼高手低,在计算机专业,低于1w的工作看不上&#xff0…

操作系统引导

目录 一. 什么是操作系统引导 \quad 一. 什么是操作系统引导 \quad 什么是操作系统引导: 就是在开机的时候, 怎么让操作系统运行起来 操作系统是安装在C盘的 分区表用来说明C,D,E,F盘的存储空间 RAM一关机, 里面的数据就会被清空, ROM则不会 MBR里面的程序被读到RAM里面, 那…

蓝桥杯2023年-颜色平衡树(哈希表,dfs,map作返参)

题目描述 给定一棵树,结点由 1 至 n 编号,其中结点 1 是树根。树的每个点有一个颜色 Ci。 如果一棵树中存在的每种颜色的结点个数都相同,则我们称它是一棵颜色平衡树。 求出这棵树中有多少个子树是颜色平衡树。 思路 (map作返…

qt自定义时间选择控件窗口

效果如图&#xff1a; 布局如图&#xff1a; 参考代码&#xff1a; //DateTimeSelectWidget #ifndef DATETIMESELECTWIDGET_H #define DATETIMESELECTWIDGET_H#include <QWidget> #include <QDateTime>namespace Ui { class DateTimeSelectWidget; }class DateTim…

【方法论】快速撰写文章

快速撰写高质量技术文章的方法论 在技术写作领域&#xff0c;尤其是面对紧迫的截止日期时&#xff0c;快速而高效地撰写高质量文章是一项重要技能。本文将为您提供一套方法论&#xff0c;帮助您在短时间内产出优质的技术文章。 1. 明确主题和目标读者 首先&#xff0c;明确文…

单链表OJ题:LeetCode--141.环形链表

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下LeetCode中的第141道单链表OJ题&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; 数据结构与算法专栏&#xff1a;数据结构与算法 个 …

O2O:Sample Efficient Offline-to-Online Reinforcement Learning

IEEE TKDE 2024 paper Introduction O2O存在策略探索受限以及分布偏移问题&#xff0c;进而导致在线微调阶段样本效率低。文章提出OEMA算法首先使用离线数据训练乐观的探索策略&#xff0c;然后提出基于元学习的优化方法&#xff0c;减少分布偏移并提高O2O的适应过程。 Meth…

如何不解压直接读取gzip文件里面的文件

要在服务器上不解压缩的情况下读取gzip文件中的文件内容&#xff0c;您可以使用类似于zlib模块的库&#xff0c;这些库允许您在内存中对gzip数据进行操作而无需解压缩到磁盘上的文件。 在Python中&#xff0c;您可以使用gzip模块来实现这一目的。以下是一个示例代码&#xff0…

OpenHarmony教程指南-自定义通知推送

介绍 本示例主要展示了通知过滤回调管理的功能&#xff0c;使用ohos.notificationManager 接口&#xff0c;进行通知监听回调&#xff0c;决定应用通知是否发送。 效果预览 使用说明 1.在使用本应用时&#xff0c;需安装自定义通知角标应用&#xff1b; 2.在主界面&#xff…

重学SpringBoot3-WebMvcAutoConfiguration类

重学SpringBoot3-WebMvcAutoConfiguration类 是什么什么用生效条件作用 自定义配置的三种方式自定义配置举例1. 自定义 DispatcherServlet 配置2. 静态资源配置3. 自定义MVC配置4. 消息转换器5. 异常处理 是什么 org.springframework.boot.autoconfigure.web.servlet.WebMvcAut…

FPGA IBUFG

IBUFG和IBUFGDS的输入端仅仅与芯片的专用全局时钟输入管脚有物理连接&#xff0c;与普通IO和其它内部CLB等没有物理连接。 所以&#xff0c;IBUFG输入的不能直接接另外信号。 GTH transceiver primitives are called GTHE3_COMMON and GTHE3_CHANNEL in UltraScale FPGAs, an…

@RequestMapping与@GetMapping和@PostMapping等注解的区别

目录 前置知识 大致区别 使用场景上的注意事项 如何工作 使用案例 写法对比 前置知识 HTTP请求方法一共有9种&#xff0c;为&#xff1a;GET、POST、HEAD、OPTIONS、PUT、PATCH、DELETE、TRACE、CONNECTGET(获取资源) 本质就是发送一个请求来取得服务器上的某一资源&…

【Java代码审计】JNDI+RMI绕过高版本JDK的限制

【Java代码审计】JNDIRMI绕过高版本JDK的限制 1.高版本JDK利用注入导致的问题2.绕过分析3.Tomcat8绕过4.工具绕过 1.高版本JDK利用注入导致的问题 JDK 6u132、7u122、8u113 开始 com.sun.jndi.rmi.object.trustURLCodebase 默认值为false&#xff0c;运行时需加入参数 -Dcom.s…