개요
이 튜토리얼은 서버에 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, 네트워크 상태를 함께 제공하면 원인 파악이 빠릅니다.