本节讨论如何执行 NDB 集群安装的滚动重启,之所以这样称呼,是因为它涉及到依次停止和启动(或重启)每个节点,以便集群本身保持运行。这通常作为滚动升级或滚动降级的一部分来完成,其中集群的高可用性是强制性的,并且不允许整个集群出现停机时间。在我们提到升级的地方,这里提供的信息通常也适用于降级。
滚动重启可能是有益的,原因有很多。在接下来的几段中将对此进行描述。
配置更改。 要更改集群的配置,例如将 SQL 节点添加到集群,或将配置参数设置为新值。
NDB 集群软件升级或降级。 要将集群升级到较新版本的 NDB 集群软件(或将其降级到较旧版本)。这通常被称为“滚动升级”(或“滚动降级”,当恢复到旧版本的 NDB 集群时)。
节点主机上的更改。 要更改运行一个或多个 NDB 集群节点进程的硬件或操作系统。
系统重置(集群重置)。 要重置集群,因为它已达到不希望的状态。在这种情况下,通常希望重新加载一个或多个数据节点的数据和元数据。这可以通过以下三种方式之一来完成
使用
--initial
选项启动每个数据节点进程(ndbd或可能ndbmtd),这将强制数据节点清除其文件系统并从其他数据节点重新加载所有 NDB 集群数据和元数据。这还会强制删除与这些对象关联的所有磁盘数据对象和文件。在执行重启之前,使用ndb_mgm客户端
START BACKUP
命令创建备份。升级后,使用ndb_restore恢复节点。有关更多信息,请参见第 25.6.8 节“NDB 集群的在线备份”和第 25.5.23 节“ndb_restore - 恢复 NDB 集群备份”。
资源回收。 要释放先前通过连续INSERT
和DELETE
操作分配给表的内存,供其他 NDB 集群表重新使用。
执行滚动重启的过程可以概括如下
停止所有集群管理节点(ndb_mgmd进程),重新配置它们,然后重新启动它们。(请参见使用多个管理服务器进行滚动重启。)
依次停止、重新配置,然后重新启动每个集群数据节点(ndbd进程)。
可以通过在ndb_mgm客户端中为每个数据节点发出
RESTART
来更新某些节点配置参数。其他参数要求使用管理客户端STOP
命令完全停止数据节点,然后通过调用ndbd或ndbmtd可执行文件(视情况而定)从系统 shell 重新启动它。(在大多数 Unix 系统上,也可以使用诸如kill之类的 shell 命令来停止数据节点进程,但最好使用STOP
命令,而且通常更简单。)注意在 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 节点,这仍然适用。
在升级所有管理节点和数据节点之前,不能使用特定于“新”版本的功能。
除了 NDB 引擎版本更改之外,这也适用于可能应用的任何 MySQL 服务器版本更改,因此在规划升级时不要忘记考虑这一点。(对于 NDB 集群的在线升级通常是这样。)
在节点重启期间,任何 API 节点都无法执行架构操作(例如数据定义语句)。部分由于此限制,在线升级或降级期间也不支持架构操作。此外,在升级或降级期间无法执行本机备份。
使用多个管理服务器进行滚动重启。 对具有多个管理节点的 NDB 集群执行滚动重启时,应记住,ndb_mgmd会检查是否有任何其他管理节点正在运行,如果有,则尝试使用该节点的配置数据。为了避免这种情况发生,并强制ndb_mgmd重新读取其配置文件,请执行以下步骤
执行滚动重启以更新集群的配置时,可以使用ndbinfo.nodes
表的config_generation
列来跟踪哪些数据节点已使用新配置成功重启。请参见第 25.6.17.48 节“ndbinfo nodes 表”。