

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 액티브/패시브 로드 밸런서
<a name="pacemaker-tutorial-setup2"></a>

이 설정에서는 한 번에 한 인스턴스에서 로드 밸런서로 HAProxy를 실행합니다. HAProxy 구성 파일은 DRBD 복제 스토리지에 저장되므로 Pacemaker가 대기 인스턴스로 장애 조치되면 구성을 즉시 사용할 수 있습니다.

**중요**  
계속하기 [사전 조건 및 클러스터 설정](pacemaker-tutorial-prerequisites.md) 전에의 모든 단계를 완료합니다.

**주의**  
달리 명시되지 않는 한 기본 인스턴스에서만 다음 명령을 실행합니다.

## 모든 인스턴스에 HAProxy 설치
<a name="pacemaker-tutorial-setup2-install-haproxy"></a>

Pacemaker가 관리할 수 있도록 HAProxy를 설치하고 서비스를 비활성화합니다. 각 인스턴스에서 이를 실행합니다.

```
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. DRBD 탑재 경로의 구성을 사용하도록 **HAProxy systemd unit 파일을 편집**합니다. 각 인스턴스에서 이를 실행합니다.

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

Pacemaker가 디바이스를 관리할 수 있도록 DRBD 디바이스를 마운트 해제하고 DRBD를 내립니다. 기본 인스턴스와 `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 systemd 리소스 연결
<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 리소스가 up-to-date 구성 파일이 있는 대기 인스턴스에서 실행되어야 합니다.

   ```
   sudo pcs status
   ```

   실패한 인스턴스가 복구되면 마이그레이션하도록 Pacemaker를 구성하지 않는 한 로드 밸런서 서비스는 대기 인스턴스에 남아 있습니다.

1. **노드를 다시 온라인 상태로 전환합니다.**

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