

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 主動/被動 AWS IoT Greengrass V2 服務
<a name="pacemaker-tutorial-setup1"></a>

在此設定中，您一次在一個執行個體上以系統化服務 AWS IoT Greengrass V2 的形式執行。Pacemaker 會以排序資源的形式管理 DRBD 複寫、檔案系統掛載 AWS IoT Greengrass V2 和服務。如果主要執行個體失敗，Pacemaker 會將待命執行個體的 DRBD 提升為主要執行個體、掛載檔案系統並啟動 AWS IoT Greengrass V2。

**重要**  
在繼續[先決條件和叢集設定](pacemaker-tutorial-prerequisites.md)之前，請先完成 中的所有步驟。

**警告**  
除非另有說明，否則僅在主要執行個體上執行下列命令。

## 連接 DRBD 資源
<a name="pacemaker-tutorial-setup1-drbd-resource"></a>

在繼續之前，請確認 Pacemaker 正在執行。

```
sudo systemctl status pacemaker
```

在建立任何資源之前停用 STONITH。如果未設定圍欄裝置，如果啟用 STONITH （預設值），則 Pacemaker 會拒絕啟動資源。

```
sudo pcs property set stonith-enabled=false
```

**警告**  
STONITH 會在此處停用，以簡化本教學課程。在生產環境中，您必須啟用 STONITH 並設定圍欄代理程式 （例如，`fence_aws`針對 Amazon EC2 執行個體），以防止大腦分割和資料損毀。

在主要執行個體上卸載 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
```

## 連接檔案系統資源
<a name="pacemaker-tutorial-setup1-fs-resource"></a>

所有 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
```

## 驗證資源
<a name="pacemaker-tutorial-setup1-verify-resources"></a>

確認已建立資源並傳播至所有執行個體。

```
sudo pcs status
```

## 佈建和連接 AWS IoT Greengrass V2 系統化資源
<a name="pacemaker-tutorial-setup1-greengrass-resource"></a>

1. **佈建 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 核心軟體](https://docs.aws.amazon.com/greengrass/v2/developerguide/quick-installation.html)中的指示。

   確定 AWS IoT Greengrass V2 已安裝至 `/greengrass/v2`目錄 (DRBD 掛載路徑）。佈建後，卸載裝置並停用維護模式：

   ```
   sudo umount /greengrass/v2
   sudo pcs property set maintenance-mode=false
   ```

1. **停用 AWS IoT Greengrass V2 服務**，讓 Pacemaker 可以管理它，而不是系統化。

   ```
   sudo systemctl disable greengrass
   sudo systemctl stop greengrass
   ```

1. **在所有待命執行個體上安裝執行期先決條件。** AWS IoT Greengrass V2 需要自動佈建器在 DRBD 複寫目錄之外安裝的 Java 和其他相依性。在每個待命執行個體上安裝相同的 JDK 版本。如需先決條件的完整清單，請參閱 [AWS IoT Greengrass V2 需求](https://docs.aws.amazon.com/greengrass/v2/developerguide/setting-up.html)。

1. **在其他執行個體上建立系統化單位檔案。**將 AWS IoT Greengrass V2 系統化單元檔案複製到待命執行個體，讓 Pacemaker 可以在容錯移轉期間在任何執行個體上啟動服務。

   ```
   # On the primary instance, view the unit file location
   systemctl show -p FragmentPath greengrass
   ```

   將該檔案複製到彼此執行個體上的相同路徑。然後，在每個待命執行個體上重新載入系統化，以便識別新的單位檔案。

   ```
   # On each standby instance
   sudo systemctl daemon-reload
   ```

1. **連接 AWS IoT Greengrass V2 資源。**

   ```
   sudo pcs resource create greengrass systemd:greengrass \
     op monitor interval=10s \
     op start timeout=60s \
     op stop timeout=60s \
     --disabled
   ```

## 建立資源限制條件
<a name="pacemaker-tutorial-setup1-constraints"></a>

建立限制順序，讓 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 prefers {{instance1}}=200
```

現在啟用具有限制的資源。

```
sudo pcs resource enable fs_greengrass
sudo pcs resource enable greengrass
```

驗證資源限制的最終狀態。

```
sudo pcs constraint show
```

輸出應會顯示下列限制：
+ **位置限制** – `greengrass-group` 資源群組偏好主要執行個體。
+ **主機代管限制 – **使用提升的 `fs_greengrass`執行`drbd-greengrass-clone`，並使用 `greengrass`執行`fs_greengrass`。
+ **順序限制** – DRBD 會在檔案系統啟動之前提升，而檔案系統也在之前啟動 AWS IoT Greengrass V2。

## 驗證容錯移轉
<a name="pacemaker-tutorial-setup1-failover"></a>

模擬容錯移轉以驗證設定是否正常運作。

1. **檢查初始狀態。**驗證 AWS IoT Greengrass V2 是否在主要執行個體上執行。

   ```
   sudo pcs status
   ```

1. **模擬主要執行個體失敗。**將主節點置於待命模式以觸發資源遷移。

   ```
   sudo pcs node standby {{primary-node-name}}
   ```

1. **驗證容錯移轉。**在待命執行個體上，檢查叢集狀態。DRBD、檔案系統 AWS IoT Greengrass V2 和資源現在應該在待命執行個體上執行。

   ```
   sudo pcs status
   ```

1. **復原失敗的執行個體。**

   ```
   sudo pcs node unstandby {{primary-node-name}}
   ```

   當節點重新上線時，它會將叢集重新加入為待命執行個體。在容錯移轉期間提升的執行個體仍是主要執行個體。

**疑難排解**  
如果資源進入失敗狀態，您可以使用下列命令進行清除並重新啟動。  

```
sudo pcs resource cleanup
```