本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Active/passive AWS IoT Greengrass V2 服务
在此设置中,您一次只能在一个实例上 AWS IoT Greengrass V2 作为 systemd 服务运行。Pacemaker 将 DRBD 复制、文件系统装载和 AWS IoT Greengrass V2 服务作为有序资源进行管理。如果主实例出现故障,Pacemaker 会将备用实例的 DRBD 提升为主实例,挂载文件系统并启动。 AWS IoT Greengrass V2
重要
在继续操作先决条件和集群设置之前,请完成中的所有步骤。
警告
除非另有说明,否则仅在主实例上运行以下命令。
附加 DRBD 资源
在继续操作之前,请验证 Pacemaker 是否正在运行。
sudo systemctl status pacemaker
在创建任何资源之前禁用 STONITH。如果未配置屏蔽设备,则如果启用 STONITH(默认),Pacemaker 将拒绝启动资源。
sudo pcs property set stonith-enabled=false
警告
为了简化本教程,此处禁用 STONITH。在生产环境中,您必须启用 STONITH 并配置隔离代理(例如,用于 Amazon EC2 实例),fence_aws以防止大脑分裂和数据损坏。
在主实例上卸载 DRBD 设备并关闭所有实例上的 DRBD,这样 Pacemaker 就可以完全控制 DRBD 生命周期。
# On the primary instance only sudo umount /greengrass/v2 # On all instances sudo drbdadm down greengrass
在 Pacemaker 中创建 DRBD 资源。
sudo pcs resource create drbd-greengrass \ ocf:linbit:drbd drbd_resource=greengrass \ op monitor interval=15s role=Promoted \ op monitor interval=30s role=Unpromoted
将资源配置为可升级,以便一次只有一个实例是主实例。设置clone-max为集群中的实例数量。
sudo pcs resource promotable drbd-greengrass \ promoted-max=1 promoted-node-max=1 clone-max=2 clone-node-max=1 notify=true
附加文件系统资源
所有 AWS IoT Greengrass V2 资源都存储在/greengrass/v2。此步骤告诉 Pacemaker 在提升的实例上的该路径上安装 DRBD 设备。这样可以确保 AWS IoT Greengrass V2 数据目录在故障转移期间被复制并可用。
在禁用状态下创建文件系统资源。在所有约束条件都到位后,您将启用它。
sudo pcs resource create fs_greengrass Filesystem \ device="/dev/drbd0" \ directory="/greengrass/v2" \ fstype="ext4" \ op start timeout=15s \ op stop timeout=15s \ --disabled
验证资源
验证资源是否已创建并传播到所有实例。
sudo pcs status
配置并附上 AWS IoT Greengrass V2 systemd 资源
-
规定 AWS IoT Greengrass V2。由于您之前已卸载 DRBD 设备,因此请启用维护模式并重新安装它进行配置:
# Enable maintenance mode to prevent Pacemaker from interfering sudo pcs property set maintenance-mode=true # Check which node Pacemaker promoted to Primary sudo pcs status | grep drbd-greengrass # On the Promoted node, mount the DRBD device sudo mount /dev/drbd0 /greengrass/v2使用自动配置在主实例 AWS IoT Greengrass V2 上进行配置。按照安装 AWSAWS IoTAWS IoT Greengrass V2 核心软件中的说明进行操作,并自动配置资源。
确保 AWS IoT Greengrass V2 已将其安装到
/greengrass/v2目录( DRBD-mounted 路径)。配置完成后,卸载设备并禁用维护模式:sudo umount /greengrass/v2 sudo pcs property set maintenance-mode=false -
禁用该 AWS IoT Greengrass V2 服务,以便 Pacemaker 可以代替 systemd 对其进行管理。
sudo systemctl disable greengrass sudo systemctl stop greengrass -
在所有备用实例上安装运行时必备组件。 AWS IoT Greengrass V2 需要自动置备器在 DRBD-replicated 目录之外安装的 Java 和其他依赖项。在每个备用实例上安装相同的 JDK 版本。有关先决条件的完整列表,请参阅AWS IoT Greengrass V2 要求。
-
在其他实例上创建 systemd 单元文件。将 AWS IoT Greengrass V2 systemd 单元文件复制到备用实例,这样 Pacemaker 就可以在故障转移期间在任何实例上启动服务。
# On the primary instance, view the unit file location systemctl show -p FragmentPath greengrass将该文件复制到彼此实例上的相同路径。然后在每个备用实例上重新加载 systemd,使其识别新的单元文件。
# On each standby instance sudo systemctl daemon-reload -
附加 AWS IoT Greengrass V2 资源。
sudo pcs resource create greengrass systemd:greengrass \ op monitor interval=10s \ op start timeout=60s \ op stop timeout=60s \ --disabled
创建资源限制
创建约束顺序,以便 Pacemaker 在故障转移期间按正确的顺序管理资源。
sudo pcs constraint order promote drbd-greengrass-clone then start fs_greengrass sudo pcs constraint colocation add fs_greengrass with Promoted drbd-greengrass-clone score=INFINITY sudo pcs resource group add greengrass-group fs_greengrass greengrass sudo pcs constraint location greengrass-group prefersinstance1=200
既然限制已经到位,就启用资源。
sudo pcs resource enable fs_greengrass sudo pcs resource enable greengrass
验证资源限制的最终状态。
sudo pcs constraint show
输出应显示以下约束:
-
位置限制-
greengrass-group资源组首选主实例。 -
主机托管约束 — 与升级版一起
fs_greengrass运行drbd-greengrass-clone,与一起greengrassfs_greengrass运行。 -
顺序限制 — DRBD 在文件系统启动之前升级,文件系统在启动之前启动。 AWS IoT Greengrass V2
验证故障转移
模拟故障转移以验证设置是否有效。
-
检查初始状态。验证主实例上是否 AWS IoT Greengrass V2 正在运行。
sudo pcs status -
模拟主实例故障。将主节点置于待机模式以触发资源迁移。
sudo pcs node standbyprimary-node-name -
验证故障转移。在备用实例上,检查集群状态。DRBD、文件系统和 AWS IoT Greengrass V2 资源现在应该在备用实例上运行。
sudo pcs status -
恢复失败的实例。
sudo pcs node unstandbyprimary-node-name当节点恢复在线状态时,它会作为备用实例重新加入集群。在故障转移期间升级的实例仍为主实例。
问题排查
如果资源进入故障状态,则可以使用以下命令对其进行清理并重新启动。
sudo pcs resource cleanup