配置在线组
更改组的主要成员
本节说明如何更改单主要组中的哪个成员为主。用于更改组模式的功能可以在任何成员上运行。
更改哪个成员为主
使用group_replication_set_as_primary()
UDF更改哪个成员是单主要组中的主要成员。如果在多主组的成员上发布,则此功能无效。只有主要成员才能写入该组,因此,如果该成员上正在运行异步通道,则在停止异步通道之前不允许进行任何切换。
如果在运行8.0.17或更高版本的MySQL服务器的成员上发出UDF,并且所有成员都在运行8.0.17或更高版本的MySQL服务器,则只能指定一个新的主要成员,该成员运行版本中最低的MySQL Server版本。组,基于补丁程序版本。采取此保护措施是为了确保该组保持与新功能的兼容性。如果任何成员在MySQL 8.0.13和MySQL 8.0.16之间运行MySQL服务器版本,则不会对该组强制实施此保护措施,您可以指定任何新的主要成员,但是建议选择运行最低版本的主要成员组中的MySQL Server版本。
server_uuid
通过发出以下命令,传递要成为组新主成员的成员的:
SELECT group_replication_set_as_primary(member_uuid);
在操作运行期间,您可以通过发出以下命令来检查其进度:
SELECT event_name, work_completed, work_estimatedFROM performance_schema.events_stages_currentWHERE event_name LIKE "%stage/group_rpl%"; +---------------------------------------------------------------------------------- +---------------- +---------------- + | event_name | work_completed | work_estimated | +---------------------------------------------------------------------------------- +---------------- +---------------- + | stage/group_rpl/Primary Election: Waiting for members to turn on super_read_only | 3 | 5 | +---------------------------------------------------------------------------------- +---------------- +---------------- +
更改组的模式
本节说明如何更改组在单或多主数据库中运行的模式。用于更改组模式的功能可以在任何成员上运行。
更改为单主模式
使用group_replication_switch_to_single_primary_mode()
UDF,通过发出以下命令,将以多主要模式运行的组更改为单主要模式:
SELECT group_replication_switch_to_single_primary_mode()
当您更改为单主要模式时,也将按照单主要模式(group_replication_enforce_update_everywhere_checks=OFF
)的要求在所有组成员上禁用严格的一致性检查。
如果没有传递任何字符串,则在结果单主节点组中选举新的主节点,遵循“单主节点模式”中所述的选举策略。要覆盖选举过程并将多主要组的特定成员配置为该过程中的新主要server_uuid
成员,请获取该成员的并将其传递给 group_replication_switch_to_single_primary_mode()
。例如问题:
SELECT group_replication_switch_to_single_primary_mode(member_uuid);
如果在运行8.0.17或更高版本的MySQL服务器的成员上发出UDF,并且所有成员都在运行8.0.17或更高版本的MySQL服务器,则只能指定一个新的主要成员,该成员运行版本中最低的MySQL Server版本。组,基于补丁程序版本。采取此保护措施是为了确保该组保持与新功能的兼容性。如果未指定新的主要成员,则选举过程将考虑组成员的补丁程序版本。
如果任何成员在MySQL 8.0.13和MySQL 8.0.16之间运行MySQL服务器版本,则不会对该组强制实施此保护措施,您可以指定任何新的主要成员,但是建议选择运行最低版本的主要成员组中的MySQL Server版本。如果未指定新的主要成员,则选举过程将仅考虑组成员的主要版本。
在操作运行期间,您可以通过发出以下命令来检查其进度:
SELECT event_name, work_completed, work_estimatedFROM performance_schema.events_stages_currentWHERE event_name LIKE "%stage/group_rpl%"; +---------------------------------------------------------------------------- +---------------- +---------------- + | event_name | work_completed | work_estimated | +---------------------------------------------------------------------------- +---------------- +---------------- + | stage/group_rpl/Primary Switch: waiting for pending transactions to finish | 4 | 20 | +---------------------------------------------------------------------------- +---------------- +---------------- +
更改为多主模式
使用group_replication_switch_to_multi_primary_mode()
UDF,通过发出以下命令,将以单主要模式运行的组更改为多主要模式:
SELECT group_replication_switch_to_multi_primary_mode()
经过一些协调的组操作以确保数据的安全性和一致性之后,属于该组的所有成员都将成为主成员。
当您将以单主要模式运行的组更改为以多主要模式运行时,如果运行的MySQL服务器版本高于最低版本,则运行MySQL 8.0.17或更高版本的成员将自动置于只读模式。在组中。运行MySQL 8.0.16或更低版本的成员不执行此检查,并且始终处于读写模式。
在操作运行期间,您可以通过发出以下命令来检查其进度:
SELECT event_name, work_completed, work_estimatedFROM performance_schema.events_stages_currentWHERE event_name LIKE "%stage/group_rpl%"; +---------------------------------------------------------------------- +---------------- +---------------- + | event_name | work_completed | work_estimated | +---------------------------------------------------------------------- +---------------- +---------------- + | stage/group_rpl/Multi -primary Switch: applying buffered transactions | 0 | 1 | +---------------------------------------------------------------------- +---------------- +---------------- +
使用组复制组写入共识
本节说明如何随时检查和配置组的最大共识实例数。此最大值称为组的事件范围,是该组可以并行执行的共识实例的最大数量。这使您可以微调组复制部署的性能。例如,默认值10适用于在LAN上运行的组,但是对于在较慢的网络(如WAN)上运行的组,请增加此数字以提高性能。
检查组的写入并发
使用group_replication_get_write_concurrency()
UDF通过发出以下命令在运行时检查组的事件范围值:
SELECT group_replication_get_write_concurrency();
配置组的写并发
使用group_replication_set_write_concurrency()
UDF通过发出以下命令来设置系统可以并行执行的共识实例的最大数量:
SELECT group_replication_set_write_concurrency(instances);
instances
新的共识实例的最大数量在哪里。该GROUP_REPLICATION_ADMIN
权限才能使用这个UDF。
设置组的通信协议版本
从MySQL 8.0.16开始,组复制具有组通信协议的概念。可以显式管理组复制通信协议的版本,并将其设置为容纳您希望该组支持的最旧的MySQL Server版本。这使得可以由不同MySQL Server版本的成员组成组,同时确保向后兼容。MySQL 5.7.14的版本允许压缩消息,而MySQL 8.0.16的版本也允许消息分段。组的所有成员必须使用相同的通信协议版本,以便组成员可以处于不同的MySQL Server版本,但仅发送所有组成员都可以理解的消息。
如果版本为X的MySQL服务器ONLINE
的通信协议版本小于或等于X,则该MySQL服务器只能加入并达到该复制组的状态。当新成员加入复制组时,它将检查由复制组声明的通信协议版本。该组的现有成员。如果加入成员支持该版本,则即使该成员支持其他通信功能,它也会加入该组并使用该组宣布的通信协议。如果加入成员不支持通信协议版本,则将其从组中驱逐。
如果两个成员尝试加入同一成员资格更改事件,则只有在两个成员的通信协议版本已经与组的通信协议版本兼容的情况下,他们才能加入。组中具有不同通信协议版本的成员必须隔离加入。例如:
- 一个MySQL Server 8.0.16实例可以成功加入使用通讯协议版本5.7.24的组。
- 一个MySQL Server 5.7.24实例无法成功加入使用通讯协议版本8.0.16的组。
- 两个MySQL Server 8.0.16实例不能同时加入使用通讯协议版本5.7.24的组。
- 两个MySQL Server 8.0.16实例可以同时加入使用通讯协议版本8.0.16的组。
您可以使用group_replication_get_communication_protocol()
UDF 检查组正在使用的通信协议,该 UDF返回该组支持的最旧的MySQL Server版本。组中所有现有成员都返回相同的通信协议版本。例如:
SELECT group_replication_get_communication_protocol(); +------------------------------------------------ + | group_replication_get_communication_protocol() | +------------------------------------------------ + | 8.0.16 | +------------------------------------------------ +
请注意,group_replication_get_communication_protocol()
UDF返回该组支持的最低MySQL版本,该最低版本可能与传递给group_replication_set_communication_protocol()
UDF 的版本号以及使用UDF的成员上安装的MySQL Server版本不同。
如果需要更改组的通信协议版本,以便可以加入早期版本的成员,请使用group_replication_set_communication_protocol()
UDF指定要允许的最早成员的MySQL Server版本。如果可能的话,这会使组退回到兼容的通信协议版本。该GROUP_REPLICATION_ADMIN
权限才能使用这个UDF,当你发出声明,没有广大的损失所有现有组成员必须在线。例如:
SELECT group_replication_set_communication_protocol("5.7.25");
如果将复制组的所有成员升级到新的MySQL Server版本,则该组的通信协议版本不会自动升级以匹配。如果您不再需要早期版本的成员支持,则可以使用group_replication_set_communication_protocol()
UDF将通信协议版本设置为已将成员升级到的新MySQL Server版本。例如:
SELECT group_replication_set_communication_protocol("8.0.16");
该group_replication_set_communication_protocol()
所以它在同一时间上的组的所有成员执行UDF被实现为一组动作。组操作开始缓冲消息,并等待已完成的所有传出消息的传递完成,然后更改通信协议版本并发送缓冲的消息。如果成员在更改通信协议版本后随时尝试加入该组,则该组成员会宣布新的协议版本。
每当使用AdminAPI操作更改集群拓扑时,MySQL InnoDB集群都会自动透明地管理其成员的通信协议版本。InnoDB群集始终使用最新的通信协议版本,该版本当前是该群集的一部分或加入该群集的所有实例都支持。有关详细信息,请参见 InnoDB群集和组复制协议。