DRBD(Distributed Replicated Block Device)는 RAID-1과 같은 RAID(Redundant Array of Independent Disk) 분류 아래에 분류된 데이터 미러링의 네트워크 버전을 제공한다.HA(High Availability) 및 RAID에 대한 간단한 소개부터 시작한 후 아키텍처와 DRBD의 사용에 대해 살펴본다.
고가용성은 증가된 가용성을 위한 시스템 설계 원칙이다. 가용성 또는 시스템 운영 연속성의 측정은 일반적으로 1년 동안의 가동 시간 백분율로 정의된다. 예를 들어, 특정 시스템의 가동 시간이 99%이면 일년 동안의 작동 중지 시간은 3.65일로 측정된다. 99%라는 값은 일반적으로 9 두 자리라고 한다. 이를 9 다섯 자리(99.999%)와 비교하면 최대 작동 중지 시간은 일년에 5.26분으로 떨어진다. 이는 상당한 차이이며 이를 달성하려면 주의깊은 설계와 높은 품질이 필요하다.
HA를 위해 가장 일반적인 구현 중 하나는 장애 복구에 대한 중복이다. 예를 들어, 이 모델에서는 사용 가능한 경로를 사용하고 실패 시 중복 경로를 사용하여 지정된 자원에 대한 다중 경로를 정의할 수 있다. 엔터프라이즈 디스크 드라이브는 이용자 수준의 드라이브에서 하나의 액세스 포트만 제공하는 것과 비교하여 두 개의 액세스 포트를 제공하기 때문에 이 개념을 잘 보여 준다.
필자가 보잉 757에서 이 기사를 작성한다. 두 날개에는 각각의 제트 엔진이 달려 있다. 엔진의 신뢰성은 믿을 만하지만 엔진 하나가 고장나더라도 다른 엔진 하나로 비행기는 안전하게 비행을 계속할 수 있다. 이것이 바로 중복을 통한 HA이며 다수의 애플리케이션과 시나리오에 적용된다.
필자의 첫 번째 작업은 정지 궤도 통신 위성을 만드는 대규모 방산업체를 위한 작업이었다. 이러한 위성의 중심에는 명령 및 원격 측정법(위성의 사용자 인터페이스), 전원 및 온도 관리와 지점 간 연결(전화 통화 및 텔레비전 컨텐츠 흐름 유지로도 알려져 있음)을 담당하는 내방사선 컴퓨팅 시스템이 있었다. 가용성을 위해 이 컴퓨팅 시스템은 두 개의 프로세서 및 버스 세트와 마스터가 응답하지 않는 경우 마스터와 슬레이브 사이에서 전환할 수 있는 기능을 사용하여 중복 설계되었다. 간단하게 말하면 시스템 설계상의 중복은 추가 하드웨어(및 소프트웨어)에 대한 비용을 감내하고 가용성을 높이는 일반적인 기술이다.
스토리지 시스템에서도 일반적으로 중복을 사용하는 것은 놀라운 일이 아니며 엔터프라이즈 클래스 설계에서는 특히 더 그렇다. 이러한 중복은 매우 일반적인 것이어서 각각 다양한 기능 및 특성을 가진 다양한 기본 알고리즘과 함께 표준 접근 방식(RAID)이 존재한다.
RAID는 캘리포니아 주립대학 버클리 캠퍼스에서 1987년에 처음 정의되었다. 기존의 RAID 레벨로는 중복이 아니라 성능을 위해 여러 디스크에서 스트라이핑을 구현하는 RAID-0와 정보 사본 두 개가 존재하도록 두 개의 디스크에서 미러링을 구현하는 RAID-1이 있다. RAID-1을 사용하면 디스크에 장애가 발생할 경우 다른 사본을 통해 여전히 정보를 얻을 수 있다. 기타 RAID 레벨로는 여러 디스크에서 분산 패리티 코드를 사용한 블록 레벨 스트라이핑을 포함하는 RAID-5와 이중 분산 패리티를 사용한 블록 레벨 스트라이핑을 포함하는 RAID-6가 있다. RAID-5는 단일 드라이브의 장애를 지원할 수 있지만 RAID-6는 패리티 정보를 통해 더 많은 용량이 소모되긴 해도 두 개의 드라이브 장애를 지원할 수 있다. RAID-1은 단순하지만 용량 활용 면에서는 낭비되는 측면이 있다. RAID-5와 RAID-6는 스토리지 용량 면에서는 더 절약되지만 프로세서에 패리티 계산 부담을 부과하지 않기 위해 추가적인 하드웨어 처리가 필요하다. 여느때와 마찬가지로 상충 관계가 많이 존재한다. 그림 1에서는 이러한 RAID-0 및 RAID-1 스키마에 대한 그래픽 요약을 제공한다.
그림 1. 레벨 1 및 1 Linux에 대한 RAID 스키마의 그래픽 요약
RAID 기술은 다수의 비표준 기술을 활용하여 계속 발전하고 있다. 이러한 기술에는 RAID-5의 쓰기 보류 문제점을 해결하는 Oracle의 RAID-Z 스키마, RAID-6를 확장하는 NetApp의 RAID-DP(진단 패리티용)와 홀수의 디스크에 대한 스트라이핑(RAID-0) 및 미러링(RAID-1)을 모두 구현하는 IBM의 RAID 1E(기능 개선용)가 포함된다. 다수의 기타 전통적이거나 비전통적인 RAID 스키마가 존재한다. 세부사항은 참고자료의 링크를 참조한다.
이제 아키텍처에 대해 자세히 살펴보기 전에 DRBD의 기본적인 오퍼레이션에 대해 알아본다. 그림 2에서는 독립적인 스토리지 자원을 제공하는 두 개의 독립적인 서버의 맥락에서 DRBD의 개요를 제공한다. 두 서버 중 하나는 일반적으로 기본 서버로 정의되고 다른 서버는 보조 서버로 정의된다(일반적으로 클러스터링 솔루션의 일부로 수행됨). 사용자는 DRBD 블록 디바이스에 전통적인 로컬 블록 디바이스로 액세스하거나 스토리지 영역 네트워크 또는 네트워크 접속 스토리지 솔루션으로 액세스한다. DRBD 소프트웨어는 사용자 기반 읽기 및 쓰기 오퍼레이션과 기타 동기화 오퍼레이션을 위해 기본 서버와 보조 서버 사이의 동기화를 제공한다.
그림 2. 오퍼레이션의 기본 DRBD 모델
능동/수동 모델에서 기본 노드는 모든 사용자의 읽기 및 쓰기 오퍼레이션을 위해 사용된다. 보조 노드는 클러스터링 솔루션에서 기본 노드가 작동 중지되었음을 발견하는 경우 기본 노드로 승격된다. 쓰기 오퍼레이션은 기본 노드를 통해 발생하며 로컬 스토리지와 보조 스토리지에 동시에 수행된다(그림 3 참조). DRBD는 완전한 동기 모드와 비동기 모드라는 두 가지 모드를 쓰기 오퍼레이션에 대해 지원한다.
완전한 동기 모드에서 쓰기 오퍼레이션은 쓰기 트랜잭션이 작성자에게 수신확인되기 전에 두 노드의 스토리지 모두에서 안전해야 한다. 비동기 모드에서 쓰기 트랜잭션은 쓰기 데이터가 로컬 노드의 스토리지에 저장되기 전에 수신확인된다. 피어 노드로의 데이터 복제가 백그라운드에서 발생한다. 데이터가 복제되기 전에 발생할 장애에 대한 창이 존재하기 때문에 비동기 모드는 안전성이 떨어지지만 완전한 동기 모드보다 빠르기 때문에 데이터 보호를 위해서는 가장 안전한 모드이다. 완전한 동기 모드를 권장하기는 하지만 지역적인 재해 복구 시나리오를 위한 광역 네트워크와 같이 먼 거리에서 복제가 발생하는 상황에서는 비동기 모드가 유용하다. 읽기 오퍼레이션은 로컬 디스크에 장애가 있는 경우가 아닌 한 로컬 스토리지를 사용하여 수행되며 로컬 디스크에 장애가 있는 경우에는 보조 노드를 통해 보조 스토리지에 액세스한다.
그림 3. DRBD에서의 읽기/쓰기 오퍼레이션
DRBD는 능동/능동 모델도 지원할 수 있기 때문에 공유 디스크 모드라는 모드에서 두 서버 모두에서 동시에 읽기 및 쓰기 오퍼레이션이 발생할 수 있다. 이 모드는 분산 잠금 관리 기능을 포함하는 GFS(Global File System) 또는 OCFS2(Oracle Cluster File System version 2)와 같은 공유 디스크 파일 시스템에 의존한다.
DRBD는 DRBD 동작을 구현하는 커널 모듈과 DRBD 디스크를 관리하는 데 사용되는 사용자 공간 관리 애플리케이션 세트라는 두 개의 독립된 부분으로 나눠진다(그림 4 참조). 커널 모듈은 네트워크를 통해 로컬 디스크와 원격 디스크 사이에서 복제되는 가상 블록 디바이스의 드라이버를 구현한다. 가상 디스크로서 DRBD는 파일 시스템에서 데이터베이스와 같은 원시 디스크에 의존할 수 있는 기타 애플리케이션에 이르기까지 다양한 애플리케이션이 사용할 수 있는 유연한 모델을 제공한다. DRBD 모듈은 drbd.conf에서 디스크 구성 항목에 의해 정의되는 기본 블록 드라이버뿐만 아니라 역시 drbd.conf에서 IP 주소 및 포트 번호에 의해 엔드포인트가 정의되는 네트워킹 스택에 인터페이스를 구현한다.
그림 4. Linux 아키텍처에서의 DRBD
사용자 공간에서 DRBD는 복제된 디스크를 관리하는 데 필요한 유틸리티
세트를 제공한다. drbdsetup 유틸리티는
Linux 커널과 drbdmeta에서 DRBD의 메타데이터
구조를 관리하도록 DRBD 모듈을 구성하는 데 사용된다. 이러한 유틸리티를
둘 다 사용하는 랩퍼 유틸리티는 drbdadm이다.
이 상위 레벨 관리 도구는 가장 일반적으로 사용되는 도구이다(/etc/drbd.conf에
있는 DRBD 구성 파일에서 세부사항 확보). 이전에 다룬 유틸리티에 대한 프론트엔드로서
drbdadm은 DRBD 관리에 가장 일반적으로 사용된다.
디스크 모델을 사용하여 DRBD는 일반 디스크처럼 사용할 수 있는 특별한 디바이스(/dev/drbdX)를 내보낸다. Listing 1에서는 호스트에서 사용할 DRBD 마운트와 파일 시스템 빌드를 보여 준다(참고자료 섹션에서 참조되는 필요한 기타 구성 단계는 생략함).
Listing 1. 기본 DRBD 디스크에서 파일 시스템 빌드 및 마운트하기
# mkfs.ext3 /dev/drbd0 # mkdir /mnt/drbd # mount -t ext3 /dev/drbd0 /mnt/drbd |
DRBD가 제공하는 가상 디스크를 다른 디스크처럼 사용할 수 있다(이면에서 복제가 투명하게 발생함). 이제 자동 복구 기능을 포함한 DRBD의 주요 기능 중 일부에 대해 살펴본다.
복제된 디스크라는 개념은 개념상으로는 단순하며 개발도 상대적으로 간단하지만 강력한 구현을 수행하는 과정에는 고유의 복잡성이 존재한다. 예를 들어, 블록을 네트워크 드라이브에 복제하는 것은 매우 단순하지만 진정한 솔루션은 장애와 일시적인 정지 및 이로 인해 발생하는 드라이브 동기화를 처리하는 것에서부터 시작한다. 이 섹션에서는 DRBD가 지원하는 다양한 장애 모델을 포함하여 DRBD가 제공하는 주요 기능에 대해 설명한다.
앞서 이 기사에서는 노드 사이에서 데이터를 복제하기 위한 다양한 방법(특히 완전한 동기 모드와 비동기 모드라는 두 가지 방법)에 대해 살펴봤다. DRBD는 약간의 성능 저하로 비동기보다 좀더 많은 데이터 보호를 제공하는 변형을 각각의 메소드에서 지원한다. 메모리 동기 또는 반동기 모드는 동기 모드와 비동기 모드 둘 다의 변형이다. 이 모드에서 쓰기 오퍼레이션은 데이터가 로컬 디스크에 저장되고 피어 노드의 메모리에 미러링된 후에 수신확인된다. 비휘발성 디스크 대신 휘발성 메모리에서 데이터가 다른 노드에 미러링되기 때문에 이 모드는 더 많은 보호를 제공한다. 예를 들어, 두 노드에 모두 장애가 발생하는 것과 같이 데이터가 손실될 가능성은 여전히 존재하지만 데이터가 복제되었기 때문에 기본 노드의 장애로 인해 데이터 손실이 발생하지는 않는다.
DRBD를 사용하면 온라인을 통해 입력/출력이 발생하는 동안 로컬 및 피어 디바이스를 검증할 수 있다. 이러한 검증은 DRBD가 로컬 및 원격 디스크가 서로의 복제본인지 확인하는 것을 의미하며 이러한 작업은 시간이 많이 소요되는 오퍼레이션이 될 수 있다. 하지만 유효성 검증할 노드 사이에서 데이터를 이동하는 대신 DRBD는 훨씬 더 효율적인 접근방식을 사용한다. 제한된 자원일 수 있는 노드 사이의 대역폭을 유지하기 위해 DRBD는 유효성 검증한 노드 사이에서 데이터를 이동하지 않고 데이터(해시)의 암호 다이제스트를 대신 이동한다. 이 방법을 통해 노드는 블록의 해시를 계산하고 훨씬 더 적은 서명을 피어 노드에 전송(역시 해시를 계산함)한 후 이러한 해시를 비교한다. 해시가 동일하면 블록이 적절하게 복제된다. 하지만 해시가 서로 다르면 오래된 블록이 동기화되지 않은 것으로 표시되며 후속 동기화를 통해 블록이 적절하게 동기화된다.
노드 간 통신은 소프트웨어 또는 펌웨어 버그나 TCP/IP의 체크섬에서 감지되지 않는 기타 오류로 인해 복제된 데이터에 오류를 유발할 수 있다. 데이터 무결성을 제공하기 위해 DRBD는 노드 사이에서 이동하는 데이터와 함께 제공될 메시지 무결성 코드를 계산한다. 이를 통해 수신 노드가 오류 발견 시 수신 데이터 및 요청 재전송의 유효성을 검증할 수 있다. DRBD는 Linux 암호 API(Application Programming Interface)를 사용하기 때문에 사용되는 무결성 알고리즘에 대해 유연하다.
DRBD는 광범위한 오류로부터 복구할 수 있지만 가장 교묘한 것 중 하나는 "분할뇌(split brain)"라는 상황이다. 이 오류 시나리오에서는 노드 사이에서 통신 링크에 장애가 발생하고 두 노드 모두 자신이 기본 노드라고 믿는다. 기본 노드이더라도 각 노드는 쓰기 오퍼레이션을 허용하지만 이러한 오퍼레이션을 피어 노드에 전파하지 않는다. 이로 인해 각 노드에 일관되지 않은 저장이 발생한다.
대부분의 경우 분할뇌(split-brain) 복구는 수동으로 수행되지만 DRBD는 이 상황에서 복구하는 데 필요한 몇 가지 자동 방법을 제공한다. 사용되는 복구 알고리즘은 스토리지가 실제로 사용되는 방식에 따라 다르다.
분할뇌(split-brain) 이후 스토리지를 동기화하는 데 필요한 가장 단순한 접근방식은 링크가 중단된 동안 한 노드에 변경사항이 발생하지 않은 경우이다. 이 경우 변경사항이 있는 노드는 단순히 잠재적인 피어와 동기화된다. 또다른 단순한 접근방식은 변경사항의 수가 더 적은 노드에서 변경사항을 제거하는 것이다. 이 방식은 변경 세트가 가장 많은 노드가 계속 진행될 수 있도록 하지만 한 노드에 대한 변경사항이 손실될 것이라는 것을 의미한다.
다른 두 접근방식에서는 노드의 일시적인 상태를 기반으로 변경사항을 제거한다. 한 접근방식에서는 마지막으로 기본 노드로 전환된 노드의 변경사항이 제거된다. 다른 접근방식에서는 가장 오래된 기본 노드(가장 먼저 기본 노드로 전환된 노드)의 변경사항이 제거된다. DRBD 구성 파일에서 이러한 노드 각각을 조작할 수 있지만 이러한 노드의 사용은 스토리지를 사용하는 애플리케이션과 데이터를 제거할 수 있는지 여부 또는 수동 복구가 필요한지 여부에 따라 궁극적으로 좌우된다.
복제된 스토리지 디바이스의 주요 특징은 노드 사이에서 데이터를 동기화하는 데 필요한 효율적인 방법이라는 것이다. DRBD가 사용하는 스키마 중 두 가지는 활동 로그와 빠른 동기화 비트맵이다. 활동 로그는 최근에 기록된 블록을 저장하고 장애가 해결된 후 동기화해야 할 블록을 정의한다. 빠른 동기화 비트맵은 연결이 끊긴 동안 동기 상태를 유지하는 블록 또는 유지하지 못하는 블록을 정의한다. 노드가 다시 연결되면 동기화에서는 이 비트맵을 통해 노드를 신속하게 동기화하여 서로의 정확한 복제본이 되도록 할 수 있다. 보조 디스크가 불일치 상태가 되는 창을 표시하기 때문이 이 시간이 중요하다.
상용 하드웨어에서라도 데이터의 가용성을 높이길 원하는 경우 DRBD는 훌륭한 도구가 된다. DRBD는 쉽게 커널 모듈로서 설치될 수 있고 사용 가능한 관리 도구 및 랩퍼를 사용하여 구성될 수 있다. 더 유용한 점은 DRBD가 오픈 소스이기 때문에 사용자가 필요에 맞게 조정할 수 있다는 것이다. 하지만 먼저 DRBD 로드맵에서 사용자의 요구가 작업에 포함되어 있는지 확인해야 한다. DRBD는 많은 수의 유용한 옵션을 지원하므로 애플리케이션에 맞게 최적화할 수 있다.
교육
- DRBD
웹 사이트에서는 DRBD에 대한 최신 정보, DRBD의 현재 기능 목록,
로드맵 및 기술에 대한 설명을 제공한다. DRBD 논문 및 프리젠테이션 목록도
찾을 수 있다. DRBD는 주요 라인 커널인 2.6.33 이후 버전의 일부이지만
LINBIT에서 최신 소스 tarball을
얻을 수 있다.
-
고가용성은
일정 수준의 운영을 보장하는 시스템 특성이다. 이 특성은 일반적으로
중복을
사용하여 단일
장애 지점을 방지한다. 결함 허용 시스템
설계는 가용성을 높이는 또다른 중요 측면이다.
- RAID라는
개념은 캘리포니아 주립대학 버클리 캠퍼스에서 1987년에 탄생했다. RAID는
스토리지 아키텍처와 보호의 특성을 지정하는 레벨에 의해 정의된다. 원래 RAID 개념에
대한 자세한 정보는 세미나 문서 "A
Case for Redundant Arrays of Inexpensive Disks (RAID)"에서 확인할 수 있다.
- Ubuntu는 DRBD
구성 및 사용에 대한 유용한 문서를 제공한다. 이 문서에서는 기본 호스트 및
보조 호스트에서의 DRBD 구성과 다수의 장애 시나리오에서의 DRBD 테스트에 대해
설명한다.
- DRBD는 클러스터링 애플리케이션과 함께
사용할 때 가장 유용하다. 다행히도 DRBD 매뉴얼의 DRBD-enabled
applications 섹션에서 이러한 애플리케이션 및 기타 항목(예: Pacemaker,
Heartbeat, Logical Volume Manager, GFS 및 OCFS2)과 이들이 DRBD와 통합되는
방법에 대한 자세한 정보를 얻을 수 있다.
- 이 기사에서는 GFS와
OCFS2라는 두 개의 공유 디스크 파일 시스템을
참조했다. 두 파일 시스템은 모두 고성능 및 고가용성을 포함하고 있는 클러스터 파일 시스템이다.
-
Linux에서는
수백 개의 기술자료 목록과 함께, Linux 개발자와 관리자를 위한
다양한 다운로드, 토론 포럼 및 다른 참고자료를 찾을 수 있다.
-
developerWorks 기술 행사 및 웹 캐스트를 통해 다양한 IBM 제품 및 IT 산업 주제에 대한 최신 정보를 얻을 수 있다.
-
무료 developerWorks Live!
briefing을 통해 최신 IBM 제품 및 도구에 대한 정보뿐만 아니라 IT 업계의 최신 경향까지도 빠르게 확인할 수 있다.
-
developerWorks on-demand demos에서는 입문자를 위한 제품 설치 및 설정부터 숙련된 개발자를 위한 고급 기능까지 망라된 다양한 데모를 제공한다.
-
Twitter의 developerWorks를 팔로우(follow)하거나 developerWorks에 대한 Linux 트윗(tweet)의 피드를 구독하자.
제품 및 기술 얻기
-
자신에게 가장한 적합한 방법으로 IBM
제품을 평가해 보자. 시험판 제품을 다운로드하거나, 온라인으로 제품을 사용해 보거나, 클라우드 환경에서 제품을 사용하거나,
SOA Sandbox에서
SOA(Service Oriented Architecture)를 효과적으로 구현하는 방법을 배울 수 있다.
토론
-
developerWorks 커뮤니티에 참여한다. 개발자가 이끌고 있는 블로그, 포럼, 그룹 및 wiki를 살펴보면서 다른 developerWorks 사용자와 의견을 나눌 수 있다.