

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Active/passive 负载均衡器
<a name="pacemaker-tutorial-setup2"></a>

在此设置中，您一次在一个实例上作为负载均衡器运行 HAProxy。HAProxy 配置文件存储在 DRBD-replicated 存储器中，因此，当 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 systemd 单元文件**以使用 DRBD 装载路径中的配置。在每个实例上运行它。

   ```
   sudo systemctl edit haproxy
   ```

   添加以下几行以将配置文件路径更新为 DRBD 装载路径。

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

1. **重新加载系统。**在每个实例上运行它。

   ```
   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 并配置隔离代理（例如，用于 Amazon EC2 实例），`fence_aws`以防止大脑分裂和数据损坏。

## 验证故障转移
<a name="pacemaker-tutorial-setup2-failover"></a>

1. **检查初始状态。**验证 HAProxy 是否正在主实例上运行。

   ```
   sudo pcs status
   ```

1. **模拟故障转移。**将主节点置于待机模式以强制所有资源离开主节点。

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

1. **验证故障转移。**在备用实例上，检查集群状态。现在，DRBD、文件系统和 HAProxy 资源应该使用最新的配置文件在备用实例上运行。

   ```
   sudo pcs status
   ```

   故障实例恢复后，除非您将 Pacemaker 配置为迁移，否则负载均衡器服务将保留在备用实例上。

1. **使节点恢复联机。**

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