기술 가이드

CentOS에서 DRBD 설치 및 설정 가이드

6 min read 리눅스 업데이트됨 19 Oct 2025
CentOS에서 DRBD 설치 및 설정 가이드
CentOS에서 DRBD 설치 및 설정 가이드

개요

이 튜토리얼은 서버에 DRBD를 설치하고 구성하는 방법을 설명합니다. 먼저 DRBD가 무엇인지와 어떤 용도로 사용되는지 간단히 정의합니다.

DRBD(Distributed Replicated Block Device)는 소프트웨어 기반의 공유-없음(shared-nothing) 복제 스토리지 솔루션입니다. 하드디스크, 파티션, 논리 볼륨 같은 블록 디바이스의 내용을 미러링하여 고가용성(예: 페일오버, 재해 복구) 환경을 구축할 때 사용합니다. 본 문서는 DRBD의 실제 설치·구성·검증·테스트 절차에 초점을 맞춥니다.

중요: 본 가이드는 CentOS/Red Hat/Oracle Linux 6 계열을 기준으로 작성했습니다. 다른 배포판이나 더 최신 커널/DRBD 버전에서는 명령어와 패키지·옵션이 다를 수 있으니 버전 호환성을 먼저 확인하세요.

아키텍처 개요

이 예시에서는 다음과 같은 단순한 2노드 구성으로 진행합니다:

  • 서버 A: 호스트명 OEL641, IP 192.168.43.101, DRBD 디스크: /dev/sdb1, 마운트 폴더: /folderA
  • 서버 B: 호스트명 OEL642, IP 192.168.43.102, DRBD 디스크: /dev/sdb1, 마운트 폴더: /folderB

텍스트 다이어그램:

+———————————–+ +—————————–+ | [ DRBD Server A ] | 192.168.43.101 | 192.168.43.102 | [ DRBD Server B ] | | OEL641 +———————-+———————–+ OEL642 | | folderA | | folderB | +———————————–+ +—————————–+

이 가이드는 /dev/sdb1 같은 빈 블록 디바이스가 준비되어 있다고 가정합니다.

1. 사전 준비

  • 루트 또는 sudo 권한 계정
  • 두 서버 서로 간 SSH 접속(예: scp, ssh 가능)
  • 빈 블록 디바이스(/dev/sdb 또는 유사)
  • 인터넷 연결(패키지 다운로드)

중요: 프로덕션 환경에서는 DRBD 메타데이터 초기화와 파일시스템 생성이 데이터를 모두 지우므로 반드시 백업 후 진행하세요.

2. 설치 단계

시스템을 업데이트하고 DRBD 빌드에 필요한 종속 패키지를 설치합니다. 두 서버에서 동일하게 수행하세요.

yum -y update   
yum -y install gcc make automake autoconf libxslt libxslt-devel flex rpm-build kernel-devel

위 명령 실행 결과(패키지 상태 출력)는 원문 예시와 동일한 출력 블록으로 제공됩니다.

빌드를 위한 RPM 디렉터리 구조를 생성합니다:

mkdir -p /root/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

DRBD 소스와 drbd-utils를 다운로드합니다:

wget http://oss.linbit.com/drbd/drbd-utils-latest.tar.gz http://oss.linbit.com/drbd/8.4/drbd-8.4.7-1.tar.gz

아카이브를 해제하고 컴파일·패키징합니다(원문과 동일한 순서 사용).

tar -zxvf drbd-8.4.7-1.tar.gz  
tar -zxvf drbd-utils-latest.tar.gz

DRBD 커널 모듈(RPM) 빌드:

cd drbd-8.4.7-1   
# make km-rpm

빌드가 성공하면 /root/rpmbuild/RPMS/i686(또는 x86_64)에 RPM 파일들이 생성됩니다. drbd-utils도 마찬가지로 빌드합니다:

cd ..  
cd drbd-utils-8.9.6   
./configure   
make rpm

생성된 RPM들을 설치합니다(아키텍처에 따라 파일명이 다를 수 있습니다):

cd /root/rpmbuild/RPMS/i686  
rpm -Uvh drbd-xen* drbd-udev* drbd-pacemaker* drbd-bash-completion* drbd-utils-*.rpm drbd-km-*.rpm drbd-8*

위 작업을 두 서버 모두에서 동일하게 수행합니다.

중요: 만약 배포판이 64비트(x86_64)라면 rpm 경로와 패키지 이름이 i686 대신 x86_64로 나타납니다.

3. 검증 단계

이제 OEL641(서버 A)에서 호스트명과 DRBD 모듈 상태를 확인합니다.

uname -n
OEL641

DRBD 커널 모듈을 로드하고 lsmod로 확인합니다:

modprobe drbd  
lsmod |grep drbd
drbd 341783 0  
libcrc32c 841 1 drbd

다음으로 파티션을 생성합니다. 예제에서는 /dev/sdb를 사용하여 /dev/sdb1 파티션을 만듭니다. fdisk를 사용한 단계는 원문 코드 블록을 그대로 따라하세요:

fdisk -l

(출력 블록 생략 — 원문 참조)

fdisk /dev/sdb

(fdisk 상호작용 출력 블록 포함)

마찬가지로 OEL642에서도 동일하게 파티션을 생성합니다.

4. DRBD 리소스 파일 구성

두 서버에서 동일한 DRBD 리소스 정의 파일을 생성해야 합니다. /etc/drbd.d/s1.res 파일을 만듭니다:

cd /etc/drbd.d/  
vi s1.res

파일 내용(예시):

resource s1 {  
on OEL641 {  
device /dev/drbd1;  
disk /dev/sdb1;  
address 192.168.43.101:7799;  
meta-disk internal;  
}  
on OEL642 {  
device /dev/drbd1;  
disk /dev/sdb1;  
address 192.168.43.102:7799;  
meta-disk internal;  
}  
}

파일을 두 번째 서버로 복사합니다:

scp /etc/drbd.d/s1.res root@OEL642:/etc/drbd.d/s1.res

메타데이터를 생성합니다(두 서버에서 각각 실행):

drbdadm create-md s1

출력 예시는 원문을 참고하세요. s1은 리소스 이름입니다.

5. DRBD 서비스 시작 및 동기화

OEL641에서 DRBD 상태를 확인하고 서비스를 시작합니다:

/etc/init.d/drbd status

[root@OEL641 ~]# /etc/init.d/drbd start

초기 시작 시 DRBD 스크립트는 피어를 기다립니다. OEL642에서도 동일하게 서비스 시작을 실행해야 양쪽이 연결되어 동기화가 진행됩니다.

양쪽이 연결되면 상태 확인:

/etc/init.d/drbd status

예시 상태(원문 참조)에서는 OEL641이 Primary, OEL642가 Secondary가 되도록 초기화를 수행합니다:

drbdadm -- --overwrite-data-of-peer primary s1
/etc/init.d/drbd status

상태가 “Primary/Secondary”로 바뀌고 동기화가 진행되면 데이터가 복제됩니다(초기 동기화는 시간이 소요될 수 있음).

6. DRBD 테스트

Primary 노드(OEL641)에서 DRBD 디바이스에 파일시스템을 만들고 마운트하여 테스트 파일을 생성합니다(Primary에서만 mkfs 수행).

mkfs.ext3 /dev/drbd1
mkdir /folderA  
mount /dev/drbd1 /folderA  
df -h

파일 생성:

dd if=/dev/zero of=/folderA/testfile bs=1M count=30
ls -lh /folderA

결과: /folderA/testfile(약 30MB) 생성.

이제 Primary를 Secondary로 전환하고 다른 노드에서 Primary로 올려 복제된 파일을 확인합니다:

umount /folderA  
drdadm secondary s1

OEL642에서:

mkdir /folderB  
drdadm primary s1  
mount /dev/drbd1 /folderB  
ls -lh /folderB

복제된 파일이 /folderB에서 보이면 성공입니다.

문제 해결(트러블슈팅) 및 주의사항

중요: DRBD와 관련된 주요 실패 시나리오와 해결책을 정리합니다.

  • 네트워크 연결 문제: 두 노드 간 포트(기본 7799)가 방화벽에 의해 차단되면 연결되지 않습니다. 방화벽 규칙을 확인하고 포트를 허용하세요.
  • 호스트명 불일치: 리소스 파일의 on 은 uname -n의 결과와 일치해야 합니다. 일치하지 않으면 DRBD가 리소스를 바인딩하지 못합니다.
  • 메타데이터 초기화 위험: drbdadm create-md는 대상 디스크의 기존 데이터를 삭제합니다. 실수로 실행하지 않도록 확인하세요.
  • 서로 다른 디스크 크기: 양쪽 블록 장치 크기가 일치하지 않으면 sync 오류 또는 용량 부족 문제가 발생합니다.
  • 커널 모듈 버전 불일치: DRBD 커널 모듈이 커널 버전과 호환되어야 합니다. 커널 업데이트 후 DRBD 모듈을 재빌드해야 할 수 있습니다.

진단 명령 요약:

/etc/init.d/drbd status
cat /proc/drbd
dmesg | tail
ss -tunlp | grep 7799
ping 

대안 및 확장 접근법

  • 배포판 패키지 이용: 소스 빌드 대신 배포판 제공 DRBD 패키지(혹은 Linbit의 공식 저장소)를 사용하면 빌드/의존성 관리가 쉬워집니다.
  • DRBD + Pacemaker: DRBD를 Pacemaker와 함께 사용하면 자동 장애 조치(HA)를 구성할 수 있습니다.
  • 파일 레벨 복제: DRBD가 블록 레벨 복제이므로 파일 단위 복제(rsync, DRBD의 대체로 GlusterFS, Ceph 등)와 요구사항에 따라 선택하세요.

운영 관점의 점검표 (역할별)

관리자 (시스템 운영자):

  • 루트 권한 확인
  • 네트워크(포트 7799) 및 방화벽 규칙 확인
  • 양쪽 노드의 시간 동기화(NTP) 확인
  • /dev/sdb 크기 및 파티션 일치 확인

개발자/배포 담당자:

  • DRBD 리소스 파일(s1.res) 검토
  • 서비스 재시작 시 애플리케이션의 파일 잠금/마운트 정책 확인

보안 담당자:

  • DRBD 제어 트래픽을 전용 네트워크로 분리 권장
  • SSH 키 교환 및 루트 사용 제한

체크리스트: 배포 전 확인 사항

  • DRBD 패키지 빌드/설치 완료(양측)
  • /etc/drbd.d/s1.res의 호스트명·IP 일치
  • drbdadm create-md를 수행할 디스크 백업 완료
  • 방화벽에서 7799 허용 또는 전용 네트워크 구성
  • 초기 동기화 시간 예측 및 유지보수 윈도우 확보

간단한 운영 SOP(핵심 명령 모음)

  • 상태 확인: /etc/init.d/drbd status 또는 cat /proc/drbd
  • 메타데이터 생성: drbdadm create-md
  • Primary로 전환: drbdadm primary (또는 –overwrite-data-of-peer로 강제)
  • Secondary로 전환: drbdadm secondary
  • 로그 확인: dmesg | tail, /var/log/messages

의사결정 흐름 (Mermaid)

다음 다이어그램은 DRBD 노드 전환/문제 해결의 기본 흐름을 간단히 나타냅니다.

flowchart TD
  A[노드 부팅] --> B{DRBD 드라이버 로드됨?}
  B -- 아니오 --> C[modprobe drbd 및 로그 확인]
  B -- 예 --> D{피어 연결됨?}
  D -- 아니오 --> E[네트워크/방화벽 확인]
  D -- 예 --> F{리소스 상태 확인}
  F -- Primary 없음 --> G[drbdadm --overwrite-data-of-peer primary s1]
  F -- Primary 존재 --> H[필요시 전환: drbdadm primary/secondary]
  G --> H
  E --> D

용어 1줄 요약(글로서리)

  • DRBD: 블록 장치 레벨에서 두 노드 간 데이터를 실시간으로 복제하는 소프트웨어 미러링.
  • Primary: 마운트되어 쓰기가 가능한 DRBD 측 노드.
  • Secondary: 일반적으로 마운트되지 않고 동기화만 수신하는 노드.

보안 및 규정 고려 사항

  • 데이터가 민감하거나 규제 대상일 경우 전송 중 암호화(TLS/IPsec)를 적용하거나 DRBD 전용 네트워크를 사용하세요.
  • DRBD 자체는 데이터 전송 암호화를 기본 제공하지 않습니다. 암호화가 필요하면 네트워크 계층에서 처리하세요.

마이그레이션 및 호환성 팁

  • 커널 업그레이드 후에는 DRBD 커널 모듈을 재컴파일해야 할 경우가 많습니다.
  • DRBD 메이저 버전 간에는 메타데이터 포맷이 달라 마이그레이션 전략을 사전 수립해야 합니다.

요약

  • DRBD는 고가용성 환경에서 블록장치 미러링을 제공하는 강력한 도구입니다.
  • 본 가이드는 CentOS/Oracle Linux 6 기준으로 소스 빌드→설치→구성→동기화→테스트까지의 전체 흐름을 다룹니다.
  • 주요 주의사항: 메타데이터 초기화는 데이터 삭제이며, 호스트명·네트워크·디스크 크기 일치가 핵심입니다.

중요: 실제 운영 환경에서는 테스트 환경에서 절차를 충분히 검증한 뒤 프로덕션에 적용하세요.

감사합니다. 문제 해결이 필요하면 상태 출력(/etc/init.d/drbd status, cat /proc/drbd), dmesg, 네트워크 상태를 함께 제공하면 원인 파악이 빠릅니다.

공유하기: X/Twitter Facebook LinkedIn Telegram
저자
편집

유사한 자료

Debian 11에 Podman 설치 및 사용하기
컨테이너

Debian 11에 Podman 설치 및 사용하기

Apt-Pinning 간단 소개 — Debian 패키지 우선순위 설정
시스템 관리

Apt-Pinning 간단 소개 — Debian 패키지 우선순위 설정

OptiScaler로 FSR 4 주입: 설치·설정·문제해결 가이드
그래픽 가이드

OptiScaler로 FSR 4 주입: 설치·설정·문제해결 가이드

Debian Etch에 Dansguardian+Squid(NTLM) 구성
네트워크

Debian Etch에 Dansguardian+Squid(NTLM) 구성

안드로이드 SD카드 설치 오류(Error -18) 완전 해결
안드로이드 오류

안드로이드 SD카드 설치 오류(Error -18) 완전 해결

KNetAttach로 원격 네트워크 폴더 연결하기
네트워킹

KNetAttach로 원격 네트워크 폴더 연결하기