如何管理集群

集群形成后,使用 incus cluster list 查看其成员列表及其状态

user@host:~$ incus cluster list
+---------+----------------------------+------------------+--------------+----------------+-------------+--------+-------------------+| NAME    |            URL             |      ROLES       | ARCHITECTURE | FAILURE DOMAIN | DESCRIPTION | STATE  |      MESSAGE      |+---------+----------------------------+------------------+--------------+----------------+-------------+--------+-------------------+| server1 | https://192.0.2.101:8443   | database-leader  | x86_64       | default        |             | ONLINE | Fully operational ||         |                            | database         |              |                |             |        |                   |+---------+----------------------------+------------------+--------------+----------------+-------------+--------+-------------------+| server2 | https://192.0.2.102:8443   | database-standby | aarch64      | default        |             | ONLINE | Fully operational |+---------+----------------------------+------------------+--------------+----------------+-------------+--------+-------------------+| server3 | https://192.0.2.103:8443   | database-standby | aarch64      | default        |             | ONLINE | Fully operational |+---------+----------------------------+------------------+--------------+----------------+-------------+--------+-------------------+

要查看单个集群成员的更多详细信息,请运行以下命令

incus cluster show <member_name>

要查看集群成员的状态和使用信息,请运行以下命令

incus cluster info <member_name>

配置您的集群

要配置您的集群,请使用 incus config。例如

incus config set cluster.max_voters 5

请记住,一些 服务器配置选项 是全局的,而其他选项是本地的。您可以在任何集群成员上配置全局选项,更改将通过分布式数据库传播到其他集群成员。本地选项仅在您配置它们的服务器上设置(或者在您使用 --target 指定的目标服务器上设置)。

除了服务器配置之外,还有一些特定于每个集群成员的集群配置。请参阅 集群成员配置 以获取所有可用配置。

要设置这些配置选项,请使用 incus cluster setincus cluster edit。例如

incus cluster set server1 scheduler.instance manual

分配成员角色

要添加或删除集群成员的 成员角色,请使用 incus cluster role 命令。例如

incus cluster role add server1 event-hub

注意

您只能添加或删除那些没有被 Incus 自动分配的角色。

编辑集群成员配置

要编辑群集成员的所有属性,包括成员特定的配置、成员角色、故障域和群集组,请使用 incus cluster edit 命令。

疏散和恢复群集成员

在某些情况下,您可能需要清空给定群集成员上的所有实例(例如,进行例行维护,例如应用需要重新启动的系统更新,或执行硬件更改)。

为此,请使用 incus cluster evacuate 命令。此命令会迁移给定服务器上的所有实例,并将它们迁移到其他群集成员。然后,疏散的群集成员将转换为“已疏散”状态,这将阻止在该成员上创建任何实例。

您可以通过 cluster.evacuate 实例配置键控制每个实例的迁移方式。实例会干净地关闭,并遵守 boot.host_shutdown_timeout 配置键。

当疏散的服务器再次可用时,请使用 incus cluster restore 命令将服务器恢复到正常运行状态。此命令还会将疏散的实例从临时保存它们的服务器迁移回来。

群集修复

Incus 可以自动检测并从故障服务器中恢复。这是通过将 cluster.healing_threshold 配置设置为非零值来完成的。在领导者将群集成员标记为脱机后,实例将自动疏散到其他服务器。

当故障服务器再次可用时,您必须像手动疏散一样手动恢复它。

注意

此自动群集修复仅适用于共享存储上的实例,并且不使用任何本地设备。

警告

启用此功能可能会带来数据损坏的风险,因为如果由于部分连接问题导致服务器被判定为脱机。Incus 在服务器无法响应心跳数据包且也无法响应 ICMP 数据包时,会将服务器视为脱机。

至关重要的是要确保被视为脱机的服务器实际上是脱机的,并且没有继续运行其实例。自动实现此目标的一种方法是让一块软件监控 Incus 的 cluster-member-healed 事件,并通过与服务器的 BMC 或 PDU 交互,立即切断该服务器的电源。

删除群集成员

要从群集中干净地删除成员,请使用以下命令

incus cluster remove <member_name>

您只能干净地删除处于联机状态且在其上没有放置任何实例的成员。

处理脱机群集成员

如果群集成员永久脱机,您可以将其从群集中强制删除。确保在发现无法恢复该成员后立即执行此操作。如果您在群集中保留脱机成员,您可能会在将群集升级到较新版本时遇到问题。

要强制删除群集成员,请在仍然联机的群集成员之一上输入以下命令

incus cluster remove --force <member_name>

注意

强制删除群集成员将使该成员的数据库处于不一致状态(例如,该成员上的存储池将不会被删除)。因此,以后无法重新初始化 Incus,并且必须完全重新安装服务器。

升级群集成员

要升级群集,您必须升级其所有成员。所有成员必须升级到相同版本的 Incus。

注意

如果群集的任何成员脱机,请勿尝试升级群集。无法升级脱机成员,您的群集将最终处于阻塞状态。

要升级单个成员,只需升级主机上的 Incus 软件包并重新启动 Incus 守护程序。如果新版本的守护程序具有数据库模式或 API 更改,则升级的成员可能会转换为“阻塞”状态。在这种情况下,成员不会处理任何 Incus API 请求(这意味着 incus 命令不再适用于该成员),但任何正在运行的实例将继续运行。

如果存在其他尚未升级且因此运行旧版本的群集成员,就会发生这种情况。在未被阻塞的群集成员上运行 incus cluster list 以查看是否有任何成员被阻塞。

随着您继续升级群集的其他成员,它们都将转换为“阻塞”状态。当您升级最后一个成员时,阻塞的成员会注意到所有服务器现在都已更新,并且阻塞的成员会再次恢复运行。

更新群集证书

在 Incus 群集中,所有服务器上的 API 都会使用相同的共享证书进行响应,该证书通常是带有 10 年有效期的标准自签名证书。

证书存储在 /var/lib/incus/cluster.crt 中,并且在所有群集成员上都相同。

您可以用另一个证书替换标准证书,例如,通过 ACME 服务获得的有效证书(有关更多信息,请参阅 TLS 服务器证书)。为此,请使用 incus cluster update-certificate 命令。此命令将替换群集所有服务器上的证书。