15.6. 配置#
HA组件被紧密集成到了Proxmox VE API中。因此,你既能够通过ha-manager命令行配置HA,也可以通过WebGUI配置HA,两种方式都很简便,更进一步,还可以用自动化工具直接调用API配置HA。
HA配置文件全部保存在/etc/pve/ha/
目录中,因此可以被自动复制到集群所有节点,所有节点都共享使用相同的HA配置。
15.6.1. 资源#
资源配置文件/etc/pve/ha/resources.cfg保存了ha-manager管理的所有资源列表。资源列表中的资源配置格式如下:
<type>: <name>
<property> <value>
...
每条资源配置信息都以冒号分隔的资源类型和资源名称开始,这也是ha-manager命令用于标识HA资源的ID(例如vm:100或ct:101),而后续配置行包含了附加属性:
comment: <string>
描述信息。
group: <string>
HA组标识符。
max_relocate: <integer> (0 -N) (default = 1)
资源启动失败后尝试重新部署最大次数。
max_restart: <integer> (0 -N) (default = 1)
资源启动失败后尝试重新启动最大次数。
state: <disabled | enabled | ignored | started | stopped> (default =started)
资源的指定状态。CRM将根据该状态值管理相关资源。请注意enabled是started的别名。
started
CRM将尝试启动资源,并在成功启动后将状态设置为started。如果遭遇节点故障或启动失败,CRM将尝试恢复资源。如果所有尝试均告失败,状态将被设为error。
stopped
CRM将努力确保资源处于停止状态。但在遭遇节点时,CRM还是会尝试将资源重新部署到其他节点。
disabled
CRM将努力确保资源处于停止状态。但在遭遇节点时,CRM不会将资源重新部署到其他节点。设置该状态的主要目的是将资源从error状态恢复出来,因为这是error状态的资源唯一可以被设置的状态。
ignored
该状态表示资源不再接受HA管理,CRM和LRM也不再管理相关资源。所有Proxmox将努VE API将绕过HA组件,直接对相关资源进行操作。对该资源执行的CRM命令将直接返回,而不做任何操作。同时,在节点发生故障时,资源也不会被自动故障转移。
以下是一个实际生产中的例子,其中包含了一个虚拟机和一个容器。可以看到,配置文件的语法其实非常简单,所以你可以用文本编辑器直接读取或修改这些配置文件:
配置示例(/etc/pve/ha/resources.cfg)
vm: 501
state started
max_relocate 2
ct: 102
# Note: use default settings for everything
以上配置示例是由命令行工具ha-manager生成的:
ha-manager add vm:501 --state started --max_relocate 2
ha-manager add ct:102
15.6.2. 组#
HA的组配置文件/etc/pve/ha/groups.cfg用于定义集群节点服务器组。一个资源可以被指定只能在一个组内的节点上运行。组配置示例如下:
group: <group>
nodes <node_list>
<property> <value>
...
comment: <string>
描述信息。
nodes: <node>[:<pri>]{,<node>[:<pri>]}*
节点组成员列表,其中每个节点都可以被赋予一个优先级。绑定在一个组上的资源会优先选择在最高优先级的节点上运行。如果有多个节点都被赋予最高优先级,资源将会被平均分配到这些节点上运行。优先级的值只有相对大小意义。
nofailback: <boolean> (default = 0)
CRM会尝试在最高优先级的节点运行资源。当有更高优先级的节点上线后,CRM将把资源迁移到更高优先级节点。设置nofailback后,CRM将继续保持资源在原节点运行。
restricted: <boolean> (default = 0)
绑定到restricted组的资源将只能够在该组的节点运行。如果该组的节点全部关机,则相关资源将停止运行。而对于非restricted组而言,如果该组的节点全部关机,相关资源可以转移到集群内的任何节点运行,一旦该组节点重新上线,相关资源会立刻迁移回到该组节点上运行。可以通过设置只有一个成员的非restricted组实现更好表现。
指定资源在固定节点运行是很常见的做法,但通常也会允许资源在其他节点运行。为此,你可以设置一个只有一个节点的非restricted组:
ha-manager groupadd prefer_node1 --nodes node1
对于节点较多的集群而言,可以考虑制定更加详尽的故障转移策略。例如,你可以指定一组资源固定在node1节点运行。一旦node1节点不可用,你可以将相关资源平均分配到node2和node3节点运行。如果node2和node3也遭遇故障,则可以进一步转移到node4运行。为达到该效果,你可以设置节点列表如下:
ha-manager groupadd mygroup1 -nodes "node1:2,node2:1,node3:1,node4"
另一个例子是,如果某个资源需要用到只有特定节点,比如node1和node2,才具有的硬件或其他资源。我们就需要确保HA管理器不在其他节点运行该资源。为此,我们需要创建一个由指定节点构成的restricted组:
ha-manager groupadd mygroup2 -nodes "node1,node2" -restricted
以上命令创建的配置文件如下:
配置文件示例(/etc/pve/ha/groups.cfg)
group: prefer_node1
nodes node1
group: mygroup1
nodes node2:1,node4,node1:2,node3:1
group: mygroup2
nodes node2,node1
restricted 1
选项nofailback主要用于在管理操作中避免意外的资源迁移。例如,如果你需要将一个资源迁移到一个优先级较低的节点运行,就需要设置nofailback选项来告诉HA管理器不要立刻把资源迁移回原来的高优先级节点。
另一种可能场景是,在节点因故障被隔离后,相关资源会自动迁移到其他节点运行,而管理员在把故障节点重新恢复加入集群后,可能会希望先查明故障原因并检测该节点是否能稳定运行。这时可以设置nofailback选项组织HA管理器立刻把相关资源迁移故障节点运行。