选择以下组复制组升级方法之一:
该方法支持在服务器运行新版本时不生成工作负载到组中,而是作为次要服务器加入组中。在该方法中,只有一个组,每个服务器实例从组中删除、升级然后重新加入组。
该方法非常适合单主模式组。在单主模式下,如果您需要在升级过程中保持主服务器不变(除了升级自己时),那么它应该是最后一个被升级的成员。主服务器不能保持为主服务器,除非它是组中运行的最低MySQL Server版本。升级主服务器后,您可以使用group_replication_set_as_primary()
函数重新任命它为主服务器。如果您不介意哪个成员是主服务器,成员可以以任何顺序升级。组将根据成员的最低MySQL Server版本选举新的主服务器,遵循第 20.1.3.1 节,“单主模式”中的选举政策。
对于多主模式组,在滚动升级过程中,主服务器的数量将减少,导致写入可用性的降低。这是因为如果成员加入组时运行的MySQL Server版本高于现有组成员的版本,它将自动保持只读模式 (super_read_only=ON
)。
有关组中版本兼容性和升级过程中的行为的完整信息,请参阅第 20.8.1 节,“组中不同成员版本的组合”。
在该方法中,您从组中删除成员,升级它们,然后使用升级的成员创建第二个组。对于多主模式组,在该过程中,主服务器的数量将减少,导致写入可用性的降低。这不会影响单主模式组。
因为旧组仍在运行,而您正在升级成员,因此您需要新组来赶上旧组执行的任何事务。因此,您需要在新组中配置一个服务器作为旧组的副本,以确保新组赶上旧组。因为该方法依赖异步复制通道来从一个组复制数据到另一个组,因此它遵循异步源副本复制的相同假设和要求,见第 19 章 复制。对于单主模式组,异步复制连接到旧组必须将数据发送到新组的主服务器,而对于多主模式组,异步复制通道可以连接到任何主服务器。
该过程是:
-
从原始组中删除成员,一个接一个,见第 20.8.3.2 节,“升级组复制成员”
-
升级成员的服务器版本,见第 3 章 升级 MySQL。您可以按照就地升级或 provision 方法升级。
-
使用升级的成员创建新组,见第 20 章 组复制。在这种情况下,您需要在每个成员上配置新的组名(因为旧组仍在运行并使用旧名称),引导初始升级的成员,然后添加剩余的升级成员。
-
设置异步复制通道 zwischen 旧组和新组,参见 第 19.1.3.4 节,“使用 GTIDs 设置复制”。将旧主服务器配置为异步复制源服务器,将新组成员配置为基于 GTID 的副本。
在将应用程序重定向到新组之前,您必须确保新组具有足够的成员数量,例如,使组能够处理成员故障。发出 SELECT * FROM performance_schema.replication_group_members
并比较初始组大小和新组大小。等待所有旧组数据传播到新组,然后断开异步复制连接并升级任何缺失的成员。
在这种方法中,您创建了一个由运行新版本的成员组成的第二组,并将旧组缺失的数据复制到新组中。这假设您拥有足够的服务器来同时运行两个组。由于在此过程中主要服务器的数量没有减少,因此对于多主模式下的组来说,写入可用性没有减少。这使得滚动复制升级非常适合多主模式下的组。这不影响单主模式下的组。
因为旧组在新组成员配置期间保持在线,因此您需要新组来赶上旧组执行的任何事务。因此,在新组中配置一个服务器作为旧组主服务器的副本,以确保新组赶上旧组。由于这种方法依赖于异步复制通道来从一个组复制数据到另一个组,因此它受异步源副本复制的相同假设和要求的支持,参见 第 19 章,《复制》。对于单主模式下的组,异步复制连接必须将数据发送到新组的主服务器,而对于多主模式下的组,异步复制通道可以连接到任何主服务器。
该过程是:
-
部署足够的成员,使新组能够处理成员故障
-
从旧组成员备份现有数据
-
使用旧成员的备份来配置新组成员,参见 第 20.8.3.4 节,“使用 mysqlbackup 进行组复制升级”。
Note您必须将备份还原到与备份相同的 MySQL 版本,然后执行就地升级。有关说明,请参见 第 3 章,《升级 MySQL》。
-
创建一个新的组,包括升级的成员,参见 第 20 章,《组复制》。在这种情况下,您需要在每个成员上配置一个新的组名(因为旧组仍在运行并使用旧名称),引导初始升级的成员,然后添加剩余的升级成员。
-
设置异步复制通道 zwischen 旧组和新组,参见 第 19.1.3.4 节,“使用 GTIDs 设置复制”。将旧主服务器配置为异步复制源服务器,将新组成员配置为基于 GTID 的副本。
一旦新组缺失的数据量足够小,可以快速传输,您必须将写操作重定向到新组。等待所有旧组数据传播到新组,然后断开异步复制连接。