25.6.5 执行 NDB 集群的滚动重启
本节讨论如何执行一个名为“滚动重启”的NDB集群安装的操作过程,这个过程涉及逐一停止和启动(或重启)每个节点,以保持整个集群的运行状态。这通常在进行“滚动升级”或“滚动降级”时执行,升级或降级时高可用性对集群至关重要,不允许集群整体的停机时间。在这里提到的升级信息,也普遍适用于降级。
进行滚动重启有多种原因,这些在接下来的几段中将会详细描述。
配置变更。 为了改变集群的配置,比如向集群添加一个SQL节点,或者设置一个配置参数为新值。
NDB 集群软件升级或降级。 为了将集群升级到更高版本的NDB集群软件(或者降级到旧版本)。这通常被称为“滚动升级”(或“滚动降级”,当回退到旧版本NDB集群时)。
节点主机上的变更。 为了在运行一个或多个NDB集群节点进程的硬件或操作系统上进行更改。
系统重置(集群重置)。 为了因为集群达到不理想状态而重置。在这种情况下,通常希望重新加载一个或多个数据节点的数据和元数据。这可以通过以下三种方式之一完成:
-
在每个数据节点进程上启动(使用ndbd,或者可能是ndbmtd)并使用
--initial
选项,这将强制数据节点清空其文件系统,并从其他数据节点重新加载所有 NDB 集群数据和元数据。此外,还会移除与这些对象关联的所有磁盘数据文件。 -
使用ndb_mgm客户端执行
START BACKUP
命令在进行重启之前创建备份。升级后,使用ndb_restore命令恢复节点或节点。请参阅第 25.6.8 节,“NDB 集群在线备份”,以及第 25.5.23 节,“ndb_restore — 恢复 NDB 集群备份”,获取更多信息。
资源恢复。 为了释放由连续INSERT
和DELETE
操作分配的表内存给其他NDB集群表重用。
进行滚动重启的过程可以概括如下:
-
首先停止所有集群管理节点(ndb_mgmd进程),然后重新配置它们,最后重启它们。(参见使用多个管理服务器进行滚动重启)。
-
接着,每个集群数据节点(ndbd进程)停止、重新配置,然后重启。
某些节点配置参数可以通过对每个数据节点执行
RESTART
命令来更新,这种操作使用了ndb_mgm客户端。其他参数则需要完全停止数据节点,使用管理客户端的STOP
命令,然后从系统shell中重新启动它,通过执行适当的ndbd或ndbmtd可执行文件。通常,Unix系统上也可以使用类似kill的shell命令来停止数据节点进程,但更推荐并通常更简单的是使用STOP
命令。Note在Windows上,你也可以使用SC STOP和SC START命令,
NET STOP
和NET START
命令,或Windows服务管理器来停止和启动已安装为Windows服务的节点(请参阅第25.3.2.4节,“安装NDB集群进程为Windows服务”)。所需重启类型由每个节点配置参数的文档说明。请参阅第 25.4.3 节,“NDB 集群配置文件”。
-
停止、重新配置,然后逐个重启每个集群 SQL 节点(mysqld 进程)。
NDB 集群支持对节点进行灵活的升级顺序。当升级 NDB 集群时,您可以在升级管理节点、数据节点或两者之前先升级 API 节点(包括 SQL 节点)。换句话说,您可以在任意顺序下升级 API 和 SQL 节点。这有一些条件限制:
-
这项功能仅适用于在线升级。在生产环境中,长期使用不同 NDB 集群版本的节点混合运行是既不推荐也不支持的。
-
您必须在升级之前先将所有相同类型(管理、数据或 API 节点)的节点升级。这对于任何节点升级顺序都是成立的。
-
您必须在升级集群的 API 和 SQL 节点之前先升级所有管理节点。无论您如何升级这些节点,这一点都成立。
-
“新” 版本特有的功能不能在所有管理节点和数据节点都未升级前使用。
这同样适用于可能伴随的任何 MySQL 服务器版本变更,以及 NDB 引擎版本变更,因此在规划升级时不要忘记考虑这一点。(对于在线升级 NDB 集群来说,这一点是普遍适用的。)
在节点重启期间,任何API节点都无法执行架构操作(如数据定义语句)。由于这一限制,架构操作也不能在在线升级或降级过程中进行。此外,在升级或降级进行时,无法执行原生备份。
多个管理服务器的滚动重启. 在进行多个管理节点的NDB集群滚动重启时,请注意ndb_mgmd会检查是否有其他管理节点正在运行,如果是,则尝试使用该节点的配置数据。为了避免这种情况发生,并强制ndb_mgmd重新读取其配置文件,请执行以下步骤:
在进行滚动重启以更新集群配置时,您可以使用 config_generation
列来自 ndbinfo.nodes
表来跟踪哪些数据节点已经成功重启以使用新的配置。请参阅 第 25.6.17.48 节,“The ndbinfo nodes 表”。