### 23.6.5 执行 NDB 集群的滚动重启

[](<>)[](<>)[](<>)[](<>)[](<>)

本节讨论如何执行 NDB Cluster 安装的滚动重启，之所以这么称呼是因为它涉及依次停止和启动（或重新启动）每个节点，以便集群本身保持运行。这通常作为滚动升级或滚动降级的一部分完成，其中集群的高可用性是强制性的，并且不允许整个集群停机。在我们提到升级的地方，这里提供的信息通常也适用于降级。

可能需要滚动重启的原因有很多。这些将在接下来的几段中描述。

**配置更改。** [](<>)更改集群的配置，例如向集群添加 SQL 节点，或将配置参数设置为新值。

**NDB Cluster 软件升级或降级。**将集群升级到 NDB Cluster 软件的新版本（或将其降级到旧版本）。这通常被称为“滚动升级”（或“滚动降级”，当恢复到旧版本的 NDB Cluster 时）。

**更改节点主机。**在运行一个或多个 NDB Cluster 节点进程的硬件或操作系统中进行更改。

**系统重置（集群重置）。** [](<>)重置集群，因为它已达到不需要的状态。在这种情况下，通常需要重新加载一个或多个数据节点的数据和元数据。这可以通过以下三种方式中的任何一种来完成：

-   启动每个数据节点进程（[**ndbd**](mysql-cluster-programs-ndbd.html)或者可能[**ndbmtd**](mysql-cluster-programs-ndbmtd.html)) 与[`- 最初的`](mysql-cluster-programs-ndbd.html#option_ndbd_initial)选项，它强制数据节点清除其文件系统并从其他数据节点重新加载所有 NDB Cluster 数据和元数据。

    从 NDB 8.0.21 开始，这也强制删除所有磁盘数据对象和与这些对象关联的文件。

-   使用创建备份[**数据库\_毫克**](mysql-cluster-programs-ndb-mgm.html)客户[`开始备份`](mysql-cluster-backup-using-management-client.html)执行重启之前的命令。升级后，使用[**数据库\_恢复**](mysql-cluster-programs-ndb-restore.html).

    看[第 23.6.8 节，“NDB Cluster 的在线备份”](mysql-cluster-backup.html)， 和[第 23.5.23 节，“ndb_restore - 恢复 NDB Cluster 备份”](mysql-cluster-programs-ndb-restore.html)， 了解更多信息。

-   采用[**mysql转储**](mysqldump.html)在升级之前创建备份；之后，使用恢复转储[`加载数据`](load-data.html).

**资源回收。** [](<>)通过连续释放先前分配给表的内存[`插入`](insert.html)和[`删除`](delete.html)操作，供其他 NDB Cluster 表重用。

执行滚动重启的过程可以概括如下：

1.  停止所有集群管理节点（[**数据库\_管理**](mysql-cluster-programs-ndb-mgmd.html)进程），重新配置它们，然后重新启动它们。（看[使用多个管理服务器滚动重启](mysql-cluster-rolling-restart.html#mysql-cluster-rolling-restart-multiple-ndb-mgmd).)

2.  停止，重新配置，然后重新启动每个集群数据节点（[**ndbd**](mysql-cluster-programs-ndbd.html)过程）依次。

    一些节点配置参数可以通过发布来更新[`重新开始`](mysql-cluster-mgm-client-commands.html#ndbclient-restart)对于每个数据节点[**数据库\_毫克**](mysql-cluster-programs-ndb-mgm.html)客户按照上一步。其他参数要求使用管理客户端完全停止数据节点[`停止`](mysql-cluster-mgm-client-commands.html#ndbclient-stop)命令，然后通过调用[**ndbd**](mysql-cluster-programs-ndbd.html)要么[**ndbmtd**](mysql-cluster-programs-ndbmtd.html)可酌情执行。（一个shell命令，如[**杀**](kill.html)也可以在大多数 Unix 系统上用于停止数据节点进程，但是`停止`命令是首选，通常更简单。）

    笔记

    在 Windows 上，您还可以使用**停止**和**SC 开始**命令，`净停止`和`网络开始`命令或 Windows 服务管理器来停止和启动已作为 Windows 服务安装的节点（请参阅[第 23.3.2.4 节，“将 NDB 集群进程安装为 Windows 服务”](mysql-cluster-install-windows-service.html)）。

    所需的重新启动类型在每个节点配置参数的文档中都有说明。看[第 23.4.3 节，“NDB 集群配置文件”](mysql-cluster-config-file.html).

3.  停止、重新配置，然后重新启动每个集群 SQL 节点 ([**mysqld**](mysqld.html)过程）依次。

[](<>)

NDB Cluster 支持升级节点的灵活顺序。升级 NDB Cluster 时，您可以在升级管理节点、数据节点或两者之前升级 API 节点（包括 SQL 节点）。换言之，您可以按任意顺序升级 API 和 SQL 节点。这受以下规定的约束：

-   此功能仅用作在线升级的一部分。来自不同 NDB Cluster 版本的节点二进制文件的混合既不打算也不支持在生产环境中连续、长期使用。

-   在升级任何数据节点之前，必须先升级所有管理节点。无论您升级集群的 API 和 SQL 节点的顺序如何，这都是正确的。

-   在升级所有管理节点和数据节点之前，不得使用特定于“新”版本的功能。

    除了 NDB 引擎版本更改之外，这也适用于任何可能适用的 MySQL 服务器版本更改，因此在计划升级时不要忘记考虑到这一点。（这对于一般 NDB Cluster 的在线升级来说是正确的。）

    在节点重启期间，任何 API 节点都不可能执行模式操作（例如数据定义语句）。部分由于此限制，在线升级或降级期间也不支持模式操作。

[](<>)**使用多个管理服务器滚动重启。**  [](<>) [](<>)在执行具有多个管理节点的 NDB Cluster 的滚动重启时，您应该记住[**数据库\_管理**](mysql-cluster-programs-ndb-mgmd.html)检查是否有任何其他管理节点正在运行，如果是，则尝试使用该节点的配置数据。为了防止这种情况发生，并强制[**数据库\_管理**](mysql-cluster-programs-ndb-mgmd.html)要重新读取其配置文件，请执行以下步骤：

1.  停止所有 NDB Cluster[**数据库\_管理**](mysql-cluster-programs-ndb-mgmd.html)过程。

2.  全部更新`配置文件`文件。

3.  开始单[**数据库\_管理**](mysql-cluster-programs-ndb-mgmd.html)和[`--重新加载`](mysql-cluster-programs-ndb-mgmd.html#option_ndb_mgmd_reload), [`- 最初的`](mysql-cluster-programs-ndb-mgmd.html#option_ndb_mgmd_initial)，或根据需要选择两个选项。

4.  如果你开始了第一个[**数据库\_管理**](mysql-cluster-programs-ndb-mgmd.html)与[`- 最初的`](mysql-cluster-programs-ndb-mgmd.html#option_ndb_mgmd_initial)选项，您还必须启动任何剩余的[**数据库\_管理**](mysql-cluster-programs-ndb-mgmd.html)使用过程`- 最初的`.

    无论开始第一个时使用的任何其他选项[**数据库\_管理**](mysql-cluster-programs-ndb-mgmd.html)，你不应该开始任何剩余的[**数据库\_管理**](mysql-cluster-programs-ndb-mgmd.html)第一个使用之后的过程[`--重新加载`](mysql-cluster-programs-ndb-mgmd.html#option_ndb_mgmd_reload).

5.  正常完成数据节点和 API 节点的滚动重启。

    在执行滚动重启以更新集群的配置时，您可以使用`config_generation`的列[`ndbinfo.no​​des`](mysql-cluster-ndbinfo-nodes.html)表以跟踪哪些数据节点已使用新配置成功重新启动。看[第 23.6.14.47 节，“ndbinfo 节点表”](mysql-cluster-ndbinfo-nodes.html).
