개요
기억의 해시된 서비스를 운영하며 장애 발생 시 시스템을 자동으로 복구하거나, 무중단 서비스를 실행하기 위해 고가용성(HA, High Availability) 구성이 필요합니다. 본 \uud3b8시팅에서는 CentOS 7.9 환경에서 대표적인 오픈소스 고가용성 구성 도구인 DRBD와 Pacemaker를 이용하여 고가용성 환경을 구축하는 방법을 자세히 다룰 것입니다.
DRBD란?
정의
DRBD(Distributed Replicated Block Device)는 네트워크를 통해 블록 장치를 실시간으로 복제하는 커널 레벨의 소프트웨어입니다.
동작 원리
- DRBD는 Primary/Secondary 구조로 작동
- Primary는 읽기/쓰기 가능, Secondary는 읽기 만 가능
- 데이터는 local disk에 쓰기 전에 peer로 전송
/dev/drbd0
같은 값의 가상 블록 장치 형태
주요 특징
- 실시간 데이터 복제
- 카널 모듈 기반, 높은 성능
- 네트워크 기반 RAID 1 같은 기술
Pacemaker란?
정의
Pacemaker는 고가용성을 위한 리소스 클래스터 관리 소프트웨어입니다.
동작 원리
- Corosync를 통해 노드가 같이 통신
- 리소스 상태 모니터링
- 장애 발생시 자동 failover
- 바위의 절제가능
주요 특징
- 다양한 리소스 가능
- 동설성/순서 조정 가능
- 안정성과 확장성 가지
DRBD + Pacemaker 함께 사용하는 이유
- DRBD로 데이터 복제
- Pacemaker로 리소스 모니터링 및 failover 처리
함계해서 시스템 전체의 HA 구성 가능
예시 구성 가능 리소스
- DRBD 장치 → Filesystem → IP → Apache/DB
사전 준비사항
항목 | 설명 |
---|---|
OS | CentOS 7.9 (모든 노드 동일) |
서비 수 | 2대 (Node1, Node2) |
패키지 | drbd, pacemaker, pcs, corosync |
시간 동기화 | chronyd 또는 ntpd 필수 |
방화범 | 관련 포트 오픈 (TCP 7789, TCP 2224, UDP 5404~5405) |
SELinux | permissive 또는 비활성화 권장 |
설치 및 구성 절차
DRBD 설치 및 설정
yum install -y epel-release elrepo-release
yum install -y drbd-dkms drbd-utils kmod-drbd
⚠️ 설치 오류 발생 시 대안
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* elrepo: ftp.yz.yamagata-u.ac.jp
* epel: d2lzkl7pfhq30w.cloudfront.net
No package drbd-dkms available.
Package drbd-utils-9.17.0-1.el7.x86_64 already installed and latest version
No package kmod-drbd available.
# 위와 같이 패키지 설치가 안될 경우 아래 방법으로 설치
yum install -y epel-release gcc make flex bison patch \
kernel-devel-$(uname -r) elfutils-libelf-devel \
openssl-devel xmlto asciidoc wget
cd /usr/src
wget https://linbit.com/downloads/drbd/9.0/drbd-9.0.29-1.tar.gz
tar -xzf drbd-9.0.29-1.tar.gz
cd drbd-9.0.29-1
make clean
make KDIR=/usr/src/kernels/$(uname -r)
make install
depmod -a
modprobe drbd
lsmod | grep drbd
modinfo drbd
✅ 추가 구성요소 개발 정보
- ✅ drbd-dkms
- DKMS 기반으로 커널 업데이트 시 자동으로 모듈 재컴파일
/usr/src/drbd*/
에 소스가 저장되어 관리
✅ drbd-utils
- 리소스 설정 및 제어를 위한 명령어 모음 (drbdadm, drbdsetup 등)
/etc/drbd.d/*.res
설정 파일 기반으로 동작
✅ kmod-drbd
- 정적 커널 모듈 방식으로
/lib/modules/$(uname -r)/extra/drbd.ko
에 설치 - 안정성이 높은 환경에 적합하지만 커널 업데이트 시 수동 재설치 필요
/etc/drbd.d/r0.res 설정 예시
resource r0 {
device /dev/drbd0; # DRBD 장치 이름 (가상 블록 디바이스)
disk /dev/sdb1; # 실제 물리 디스크 또는 파티션 경로
meta-disk internal;
on node1 {
address 192.168.1.1:7789;
node-id 0;
}
on node2 {
address 192.168.1.2:7789;
node-id 1;
}
}
# 실제 물리 디스크는 반드시 umount & 초기화되어 있어야 합니다.
# 아래는 예시입니다.
umount /dev/sdb1
wipefs -a /dev/sdb1
drbdadm create-md r0
drbdadm up r0
# UP 확인 명령어
drbdsetup status
########################################
# 여기까지 Primary & Secondary 모두 수행 #
########################################
# Primary로 승격
drbdadm -- --overwrite-data-of-peer primary r0
# drbdadm -- --overwrite-data-of-peer primary r0 명령어가 안될 경우 아래 명령어 실행
# Primary로 강제 승격
drbdadm -- --force primary r0
📊 DRBD 프로토콜 종류 요약
프로토콜 | 설명 |
---|---|
A | 가장 빠름, 쓰기 완료를 로컬 디스크에만 반영 후 ACK → 원격 노드로 전송은 하지만 기다리지 않음 → ⚠ 데이터 유실 가능성 존재 |
B | 로컬 디스크 + 원격 노드 메모리에 도달해야 ACK → 네트워크 전송 성공까지는 보장 |
C | 가장 안전함. 로컬 + 원격 디스크 기록 완료까지 대기 후 ACK → 동기식 복제 방식 → 💡 실무에서 가장 많이 사용 |
📌 실무 권장사항
- 데이터 무결성이 중요한 경우 → Protocol C 사용 권장
- 비동기 복제가 필요하거나 성능이 우선인 경우 → Protocol A 또는 B도 가능 (주의 필요)
5.2 Filesystem 및 Mount(Primary 노드)
mkfs.ext4 /dev/drbd0
mkdir /data
mount /dev/drbd0 /data
5.3 Pacemaker 및 Corosync 설치
yum install -y pacemaker pcs corosync
systemctl enable pcsd --now
echo password | passwd hacluster --stdin
cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf
systemctl enable --now pacemaker corosync
5.4 클래스터 구성
pcs cluster auth node1 node2
pcs cluster setup --name mycluster node1 node2
pcs cluster start --all
pcs cluster enable --all
# 오류 발생 시 Error: nodes availability check failed, use --force to override. WARNING: This will destroy existing cluster on the nodes. You should remove the nodes from their clusters instead to keep the clusters working properly.
# 모든 노드에서 클러스터 삭제
pcs cluster stop --all
pcs cluster destroy
5.5 리소스 등록
pcs property set stonith-enabled=false
pcs resource defaults resource-stickiness=100
pcs resource create drbd_res ocf:linbit:drbd drbd_resource=r0 op monitor interval=15s
# Master(Primary)에서 진행
pcs resource master drbd_master drbd_res \
master-max=1 \ # 동시에 master가 될 수 있는 노드는 1개
master-node-max=1 \ # 한 노드에서 master가 될 수 있는 인스턴스는 최대 1개
clone-max=2 \ # 클러스터 전체에서 클론 인스턴스는 최대 2개 (노드 2개)
clone-node-max=1 \ # 한 노드당 1개만 클론 인스턴스 생성
notify=true # 상태 변화 시 notification (promote/demote) 동작 활성화
pcs resource create fs_res Filesystem device=/dev/drbd0 directory=/data fstype=ext4
pcs resource create vip_res IPaddr2 ip=192.168.1.100 cidr_netmask=24
pcs constraint order promote drbd_master then start fs_res
pcs constraint order start fs_res then start vip_res
pcs constraint colocation add fs_res with drbd_master INFINITY with-rsc-role=Master
pcs constraint colocation add vip_res with fs_res INFINITY
# 에러 발생
pcs resource create drbd_res ocf:linbit:drbd drbd_resource=r0 op monitor interval=15s
Error: Agent 'ocf:linbit:drbd' is not installed or does not provide valid metadata: Metadata query for ocf:linbit:drbd failed: Input/output error, use --force to override
# 해결 방법
mkdir -p /usr/lib/ocf/resource.d/linbit/
wget -O /usr/lib/ocf/resource.d/linbit/drbd https://raw.githubusercontent.com/LINBIT/drbd-utils/master/scripts/drbd.ocf
chmod +x /usr/lib/ocf/resource.d/linbit/drbd
/usr/lib/ocf/resource.d/linbit/drbd meta-data #스크립트 정상 동작 확인 명령
다시 pcs resource create drbd_res ocf:linbit:drbd drbd_resource=r0 op monitor interval=15s
# 에러 발생
/usr/lib/ocf/resource.d/linbit/drbd: line 636:
/usr/lib/ocf/resource.d/linbit/drbd.shellfuncs.sh: No such file or directory
wget -O /usr/lib/ocf/resource.d/linbit/drbd.shellfuncs.sh https://raw.githubusercontent.com/LINBIT/drbd-utils/master/scripts/drbd.shellfuncs.sh
chmod +x /usr/lib/ocf/resource.d/linbit/drbd.shellfuncs.sh
# 다시 확인
/usr/lib/ocf/resource.d/linbit/drbd meta-data
6. 구축 확인 사항
pcs status
으로 리소스 상태 확인drbdadm status
로 동기화 여부 확인- vip ping 테스트
- 노드 장애 시 failover 동작 확인
페일오버(failover) 테스트
구성 지운
[node-001] ← DRBD Master + /dev/drbd0 → /data + VIP: 192.168.0.100 + NFS Server
[node-002] ← DRBD Secondary (Pacemaker + DRBD standby)
[node-003] ← NFS Client (VIP 이용 /data 마운트)
NFS Server 설치 (노드 2개 당)
yum install -y nfs-utils
/data 공유 가이드 설정 (node-001 / node-002 모두)
echo "/data *(rw,no_root_squash,sync)" > /etc/exports
exportfs -r
systemctl restart nfs
systemctl enable nfs
node-003 mount 및 node-001 (node-001 / node-003)
아래와 같이 작업을 한 후 node-003에서 확인하였을 때 VIP로 연결한 파일서버는 끊기지 않고 정상 사용 가능한 것을 확인할 수 있다.
# node-003
mount -t nfs [VIP]:/mount_target /mount_point
ex) mount -t nfs 192.168.0.100:/data /data
# node-001
reboot or init 0
마무리 및 실무 핀
사용 장점
- DRBD + Pacemaker = 실시간 복제 + failover 가능
- 오픈소스로 무중단 서비스 구성 가능
권장 구성
- STONITH(노드 강제 복구) 활성화
- quorum, fencing 고도
- 리소스 의연관 명확히 설정
유의 사항
- DRBD는 네트워크 품질에 매우 무게기
- Filesystem은 항상 primary 노드에서만 mount
- 장애 후 sync 시 성능 저하 가능