如何管理集群¶
集群形成后,使用 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 set
或 incus 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
命令。此命令将替换群集所有服务器上的证书。