

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

# 主動/被動負載平衡器
<a name="pacemaker-tutorial-setup2"></a>

在此設定中，您會一次在一個執行個體上執行 HAProxy 做為負載平衡器。HAProxy 組態檔案存放在 DRBD 複寫的儲存體中，因此當 Pacemaker 容錯移轉至待命執行個體時，組態會立即可用。

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

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

## 在所有執行個體上安裝 HAProxy
<a name="pacemaker-tutorial-setup2-install-haproxy"></a>

安裝 HAProxy 並停用服務，讓 Pacemaker 可以管理它。在每個執行個體上執行此操作。

```
sudo apt install -y haproxy
sudo systemctl disable haproxy
sudo systemctl stop haproxy
```

## 設定 HAProxy 的 DRBD 掛載
<a name="pacemaker-tutorial-setup2-drbd-mount"></a>

將 DRBD 裝置掛載至負載平衡器的目錄。

建立掛載點目錄。在每個執行個體上執行此操作。

```
sudo mkdir -p /drbd/loadbalancer/
```

在主要執行個體上掛載 DRBD 裝置。首先從先決條件卸載先前的掛載點。

```
sudo umount /greengrass/v2
sudo mount /dev/drbd0 /drbd/loadbalancer/
```

使用 驗證掛載`lsblk`。您應該會看到`drbd0`掛載在 `/drbd/loadbalancer`。

## 設定 HAProxy
<a name="pacemaker-tutorial-setup2-configure-haproxy"></a>

組態檔案必須位於 DRBD 掛載目錄中，才能複寫至容錯移轉執行個體。

1. **將 HAProxy 組態複製到** DRBD 掛載目錄。

   ```
   sudo mkdir -p /drbd/loadbalancer/etc/haproxy/
   sudo cp /etc/haproxy/haproxy.cfg /drbd/loadbalancer/etc/haproxy/haproxy.cfg
   ```

1. **編輯 HAProxy 系統化單位檔案**，以使用來自 DRBD 掛載路徑的組態。在每個執行個體上執行此操作。

   ```
   sudo systemctl edit haproxy
   ```

   新增以下行以更新 DRBD 掛載路徑的組態檔案路徑。

   ```
   [Service]
   Environment="CONFIG=/drbd/loadbalancer/etc/haproxy/haproxy.cfg"
   ```

1. **重新載入 systemd。**在每個執行個體上執行此操作。

   ```
   sudo systemctl daemon-reload
   ```

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

卸載 DRBD 裝置並關閉 DRBD，讓 Pacemaker 可以管理它。在主要執行個體和所有執行個體`drbdadm down`上執行卸載。

```
# On the primary instance only
sudo umount /drbd/loadbalancer

# On all instances
sudo drbdadm down greengrass
```

```
sudo pcs resource create drbd-greengrass \
  ocf:linbit:drbd drbd_resource=greengrass \
  op monitor interval=15s role=Promoted \
  op monitor interval=30s role=Unpromoted
```

```
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-setup2-fs-resource"></a>

```
sudo pcs resource create fs_loadbalancer Filesystem \
    device="/dev/drbd0" \
    directory="/drbd/loadbalancer" \
    fstype="ext4" \
    op start timeout=15s \
    op stop timeout=15s \
    --disabled
```

## 連接 HAProxy 系統化資源
<a name="pacemaker-tutorial-setup2-haproxy-resource"></a>

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

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

```
sudo pcs constraint colocation add haproxy with fs_loadbalancer
sudo pcs constraint order fs_loadbalancer then start haproxy
sudo pcs constraint colocation add fs_loadbalancer with Promoted drbd-greengrass-clone
sudo pcs constraint order promote drbd-greengrass-clone then start fs_loadbalancer
```

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

```
sudo pcs resource enable fs_loadbalancer
sudo pcs resource enable haproxy
```

停用此教學課程設定的 STONITH。

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

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

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

1. **檢查初始狀態。**確認 HAProxy 在主要執行個體上執行。

   ```
   sudo pcs status
   ```

1. **模擬容錯移轉。**將主節點置於待命模式，強制所有資源離開主節點。

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

1. **驗證容錯移轉。**在待命執行個體上，檢查叢集狀態。DRBD、檔案系統和 HAProxy 資源現在應在具有up-to-date組態檔案的待命執行個體上執行。

   ```
   sudo pcs status
   ```

   當失敗的執行個體復原時，負載平衡器服務會保留在待命執行個體上，除非您設定 Pacemaker 來遷移它。

1. **讓節點重新上線。**

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