MGR架构优化

https://cdn.modb.pro/db/23301

1.设置 group_replication_member_expel_timeout 驱逐超时时间

设置标准:由较慢的网络或机器、具有较高意外瞬时中断的网络或计划中的网络中断导致的不必要的驱逐,请考虑增加驱逐超时和自动重新加入尝试

默认是: <= 8.0.20 为0 ,即检测到立即驱出集群

      >=8.0.21为5 秒检测周期后的 5 秒等待周期,总时间周期为 10 秒,即检测10s内复制组组员脱离集群,就驱除集群

可以在线修改,立即生效,每个节点都要修改,主节点修改不会同步到从库,最大值3600(>=8.0.14)

与其相关的变量:

① group_replication_message_cache_size 设置组复制 (XCom) 的组通信引擎中的消息缓存可用的最大内存量。

XCom 消息缓存保存作为共识协议的一部分在组成员之间交换的消息(及其元数据)。在其他功能中,消息缓存用于恢复在一段时间无法与其他组成员通信后重新连接到组的成员丢失的消息。 

使其包含成员成功返回所需的所有丢失消息。

默认值:8.2.20版本之前1G,8.0.21版本默认128M,可以在线修改,每个节点的配置应该一样

② group_replication_autorejoin_tries 成员因怀疑超时或失去多数而被驱逐时,尝试自动加入的次数

默认值:8.0.20 默认值为0,可以在线修改

③ group_replication_unreachable_majority_timeout 指定遭受网络分区且无法连接到多数的成员在离开组之前等待的秒数

默认值为0,可以在线修改

 

2.事物大小限制

如果单个事务产生的消息内容过大,以至于通过网络无法在5秒的时间内在组成员之间成功复制消息时,则可能会怀疑该成员失败了,进而导致其被驱逐出组,因为组通信引擎使用的单个线程被处理消息占用时间太长,使得某些组成员将接收状态报告为失败,事务过大可能导致该成员一直忙于处理事务或者由于事务过大导致内存分配问题,进而导致系统变慢。为避免这些问题,可以采用以下措施进行适当缓解:

  • 如果由于消息过大而导致发生了不必要的驱逐,那么可以使用系统变量group_replication_member_expel_timeout来为被怀疑失败的成员在被驱逐出组之前设置一个额外的等待时间(缓冲时间)。在最初的5秒钟检测期之后,会按照该系统变量设置的时间进行等待而不立即执行驱逐(最多一个小时),但是,当超过该系统变量设置的怀疑等待时间之后成员仍然未恢复组通讯的,则仍然会被驱逐出组。

  • 在可能的情况下,请尝试限制组复制中的事务大小。例如:使用LOAD DATA语句加载一个大文件之前,先将这个大文件拆分为小文件进行逐个加载。

  • 使用系统变量group_replication_transaction_size_limit设置复制组允许接收的最大事务大小。在MySQL 8.0中,该系统变量的默认最大事务大小为150000000字节(大约143 MB)。超过此大小的事务将被回滚,并且不会将该事务发送到组复制的组通信系统(GCS)中进行分发。请根据你的实际情况调整该系统变量的大小(注意:处理事务的时长与事务的大小成正比)。

  • 使用系统变量group_replication_compression_threshold指定一个消息大小,当消息大小超过该系统变量设置的值时将被执行压缩。该系统变量默认为1000000字节(1 MB),大于该系统变量大小的消息将被组复制的组通信系统(GCS)自动压缩(消息大小大于系统变量group_replication_compression_threshold设置的值但小于系统变量group_replication_transaction_size_limit设置的值时,消息才会被执行压缩)。有关更多信息,请参见"6.3. 消息压缩"。

  • 使用系统变量group_replication_communication_max_message_size指定一个消息大小,当消息大小超过该系统变量设置的值时将被执行分段。该系统变量的默认值是10485760字节(10 MiB),因此超过该大小的消息将会被自动分段(如果压缩后的消息仍然超过group_replication_communication_max_message_size系统变量设置的限制大小,则GCS在压缩完成之后再执行消息分段,每一个消息段的大小即为该系统变量设置的大小)。如果要使用消息分段,则组中所有的成员必须使用MySQL 8.0.16以上的版本,且组中的组复制通讯协议版本也必须要支持消息分段。有关更多信息,请参见"6.4. 消息分段"。

如果将以上组复制相关的限制性的系统变量值设置为0值,则表示禁用这些限制(事务大小限制、消息大小限制、消息分段限制等)。即,这就意味着关闭了所有这些保障措施。此时,组复制的每个成员可以处理的消息大小上限为每个成员中的系统变量slave_max_allowed_packet的值,,该系统变量的默认值为1073741824字节(1 GB,也是该系统变量的最大值)。超过该系统变量设置的消息大小的事务将失败。另外,单纯针对复制组来说,组成员可以发起并尝试传输给组的最大消息大小限制是4294967295字节(大约4 GB)。这是组复制(Paxos变体,XCom)的组通信引擎所能接收的包大小的硬限制。当有组成员试图广播超过这个硬限制大小的消息时将会广播失败。

 

3.流控

 

group_replication_flow_control_mode:指定是否开启流控,可取值为quota和disable。缺省值为quota,表示启用流控限额,如果指定为disable则禁用流控。
group_replication_flow_control_certifier_threshold:如果认证队列中的事务数超过该变量值触发认证流控,缺省值为25000,值域为0-2147483647。
group_replication_flow_control_applier_threshold:如果复制应用队列中的事务数超过该变量值触发应用流控,缺省值为25000,值域为0-2147483647。

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2022-01-28 16:26  学的都会  阅读(153)  评论(0编辑  收藏  举报