Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  Group Replication  /  Frequently Asked Questions

20.10 常见问题

本节提供了常见的问题答案。

一个组最多可以包含9个服务器。尝试将第10个服务器添加到已经有9个成员的组中,将导致加入请求被拒绝。这一限制是通过测试和基准测试确定的,作为稳定的局域网上组件的可靠界限。

组中的服务器通过打开对等TCP连接来连接到组中的其他服务器。这些连接仅用于内部通信和消息传递之间的服务器。在这个地址是由group_ replication_local_address变量配置的。

引导标志 instructs a member to创建一个组并作为初始种子服务器。第二个加入组的成员需要向已经引导了组的成员动态更改配置,以便将其添加到组中。

一个成员需要在两个场景下引导组。在组最初创建时,或者在关闭并重新启动整个组时。

您可以永久将用户凭证设置为group_replication_recovery渠道的凭证,使用CHANGE REPLICATION SOURCE TO语句。您可以在每次启动 Group Replication 时,在START GROUP_REPLICATION语句中指定它们。

使用CHANGE REPLICATION SOURCE TO设置的用户凭证在服务器上的复制元数据存储库中以明文形式存储,但是START GROUP_REPLICATION指定的用户凭证仅在内存中保存,并且在STOP GROUP_REPLICATION语句或服务器关闭时被删除。使用START GROUP_REPLICATION指定用户凭证因此可以帮助保护组复制服务器免受未经授权的访问。但是,这种方法与自动启动组复制(由group_replication_start_on_boot系统变量指定)不兼容。更多信息,请见第20.6.3.1节,“分布式恢复的安全用户凭证”

可以使用组复制来扩展我的写入负载吗?

不是直接的,但是MySQL Group复制是一个共享 nothing 全部复制解决方案,其中所有服务器在组中复制相同数量的数据。因此,如果组中的一个成员在事务提交操作中写入N字节到存储器,那么大致N字节也将被写入其他成员的存储器,因为事务在整个组中被复制。

然而,考虑到其他成员不需要像原始成员一样执行事务时所需的相同处理量,他们可以更快地应用变化。事务在行转换格式下被复制,而不是重新执行事务(基于行的格式).

此外,因为变化是在基于行的格式下传播和应用,这意味着它们将以优化和紧凑的格式接收,并可能减少与原始成员相比的IO操作数量。

总之,您可以通过在组中的不同成员之间分散冲突免费事务来扩展处理能力。您也可以缩小一小部分的IO操作,因为远程服务器只需要接收必要的变化以便于读取、修改和写入稳定存储器。

组复制是否需要更多的网络带宽和CPU资源,相比于简单复制,并在相同的工作负载下?

由于服务器需要不断地与其他服务器进行同步,以满足同步目的,这将产生一些额外的负载。很难确定具体的增加量,也取决于组的大小(三个服务器对比九个服务器在组中的带宽要求会有所不同).

此外,内存和 CPU footprint 也更大,因为服务器同步部分和组消息部分需要执行更多复杂的工作。

可以在广域网络上部署 组复制吗?

是的,但是每个成员之间的网络连接必须可靠且具有合适的性能。低延迟、高带宽的网络连接对优化性能是必需的。

如果网络带宽本身是一个问题,那么第20.7.4节,“消息压缩”可以用来降低所需的带宽。然而,如果网络丢包,导致重传和更高的端到端延迟,那么吞吐量和延迟都会受到负面影响。

Warning

当任何组成员之间的网络往返时间(RTT)达到5秒或以上时,您可能会遇到问题,因为内置的故障检测机制可能会被错误地触发。

这取决于连接问题的原因。如果连接问题是暂时的,并且重新连接速度足够快,以至于故障检测器不 aware 它,那么服务器可能不会从组中移除。如果是“长”连接问题,那么故障检测器最终会怀疑问题并将服务器从组中移除。

有两个设置可以增加成员在组中的可能性或重新加入组的可能性:

  • group_ replication_member_expel_timeout 将 suspicion 创建后到成员驱逐的时间增加。您可以设置等待期限最长为 1 小时。默认情况下,等待期限为 5 秒。

  • group_replication_autorejoin_tries 在 expulsion 或 unreachable 多数超时后,使成员尝试重新加入群组。成员将在 5 分钟内进行指定次数的自动重新加入尝试。这一特性默认是活动的;成员将进行三次自动重新加入尝试。

如果服务器被驱逐出群组,并且所有自动重新加入尝试都失败,您需要手动将其重新加入。在其他字样,这意味着在您从群组中明确地删除了服务器后,您需要手动重新加入该服务器(或使用脚本自动完成该操作)。

如果成员变得沉默,其他成员将从群组配置中删除它。在实际情况下,这可能发生在成员崩溃或网络断开时。

失败检测是在给定超时期限后对给定成员的检测,并创建一个不包含沉默成员的新配置。

没有定义自动将成员从组中驱逐的策略。你需要找到原因,修复问题或从组中删除成员。否则,如果服务器速度太慢,以致触发流量控制,那么整个组也会受到影响。流量控制可以根据您的需求进行配置。

没有在组中有特殊的成员负责触发重新配置。

任何成员都可以怀疑存在问题。所有成员需要自动同意某个成员已经失败。一个成员负责将其从组中驱逐,通过触发重新配置。哪个成员负责驱逐成员不是您可以控制或设置的。

是否可以使用组复制进行分片?

组复制旨在提供高度可用的副本集;数据和写入将在每个成员中 duplication。为了超出单个系统的规模,您需要构建在多个组复制集之上的orchestration 和分片框架,其中每个副本集维护和管理给定的分区或您的总数据集的一部分。这类设置,通常称为sharded cluster,允许您线性且无限地扩展读取和写入。

如何使用组复制与SELinux?

如果SELinux启用了,可以使用sestatus -v来验证,然后需要启用组复制通信端口的使用。请参阅Setting the TCP Port Context for Group Replication

如何使用iptables with 组复制?

如果iptables启用了,那么需要打开组复制端口,以便在机器之间进行通信。要查看每台机器上的当前规则,使用iptables -L。假设配置的端口是33061,通过以下命令启用对必要端口的通信:iptables -A INPUT -p tcp --dport 33061 -j ACCEPT

组复制使用的 replication 通道在异步源到副本复制中使用的 replication 通道行为相同,依赖于 relay log。在relay_log变量更改或未设置该选项且主机名称更改时,有可能出现错误。请参阅第19.2.4.1节,“The Relay Log”了解恢复程序的详细信息。或者,可以使用以下方法在组复制中解决问题:发出STOP GROUP_REPLICATION语句,然后是START GROUP_REPLICATION语句,以重新启动实例。组复制插件将创建group_replication_applier通道。

为什么组复制使用两个绑定地址?

组复制使用两个绑定地址,以便将网络流量分配到SQL地址和group_Replication_local_address之间。例如,假设服务器有两个网络接口,分别分配给网络地址203.0.113.1198.51.100.179。在这种情况下,您可以将203.0.113.1:33061设置为内部组网络地址,通过设置group_Replication_local_address=203.0.113.1:33061。然后,您可以将198.51.100.179用于hostname3306用于port。客户端SQL应用程序将连接到成员在198.51.100.179:3306上。这使您可以配置不同的规则在不同网络上。类似地,内部组通信可以与用于客户端应用程序的网络连接分开,以提高安全性。

组复制如何使用网络地址和主机名?

组播复制使用成员之间的网络连接,因此其功能直接受到主机名和端口配置的影响。例如,组播复制的分布式恢复过程创建一个连接到现有组成员的服务器,使用服务器的主机名和端口。当成员加入组时,它接收组成员信息,使用在performance_schema.replication_group_members表中列出的网络地址信息。组中的一个成员被选择为缺失数据的捐赠者,用于将数据从组传输到加入的成员。

这意味着,您使用主机名配置的任何值,例如SQL网络地址或组种子地址,都必须是完全合格的名称,并且在每个组成员中都可以解析。您可以通过DNS、正确配置的/etc/hosts文件或其他本地进程来确保这点。如果您想在服务器上配置MEMBER_HOST值,请使用--report-host选项在服务器加入组之前。

Important

分配的值将直接使用,不受skip_name_resolve系统变量的影响。

要在服务器上配置MEMBER_PORT,请使用report_port系统变量。

在服务器上启动 Group Replication 时,auto_increment_increment 的值将被更改为group_replication_auto_increment_increment 的值,该值默认为 7,auto_increment_offset 的值将被更改为服务器 ID。这些更改在 Group Replication 停止时将被撤销。这些建议避免了在组成员上写入时选择重复的自增值,从而导致事务回滚。Group Replication 的默认自增值 7 表示了在可用值数量和 permitted 最大复制组大小(9 个成员)之间取得平衡。

这些更改仅在auto_increment_incrementauto_increment_offset 都具有默认值(在这两个情况下都是 1)时才被执行。如果它们的值已经从默认值进行了修改,Group Replication 不会对它们进行更改。系统变量也不会在 Group Replication处于单主模式时被修改,在这种模式下,只有一个服务器写入。

如果组在单主模式下运行,可以有用地找到哪个成员是主要的。见第20.1.3.1.2节,“找到主要”