2015-08-05

DRBD stacked resource 구성

DRBD stacked resource 구성
ver: DRBD 8.3.13




리눅스에서 drbd 설치 바로가기

구성도

총3개의 호스트를 기반으로 stacked 복제 리소스를 구성한 그림이다.
DRBD8 버전은 3노드와 4노드의 복제 방식을 명확하게 제안 하고 있다.
밑의 구성도는 그중에 3노드 구성에 대한 그림이다.


추가:
drbd9 버전 부터는 4노드 이상의 복수 노드에 대해서 stacked 리소스의 구성 없이 N:N 구성으로 복제 리소스를 구성 할 수 있다.






환경 설정

기본 환경 구성 파일이다.
import 방식이 아닌 전체 drbd.conf 파일을 저장한다. 또한, 3노드를 구성하는 모든 호스트에 동일한 설정 파일이 존재해야 한다.


global {
    usage-count no;
    disable-ip-verification;
}
common {
    startup {
            wfc-timeout 1;
    }
}
resource r0 {
    protocol     B;
    on hostA {
                               address 10.10.10.1:7788;         ----------------> 1
            disk /dev/sdb1;
            flexible-meta-disk internal;
            device  /dev/drbd0;
    }
    on hostB{
                               address 10.10.10.2:7788;
            disk /dev/sdb1;
            flexible-meta-disk internal;
            device  /dev/drbd0;
    }
}               
resource r0_1 {
              protocol A;
              meta-disk internal;
              stacked-on-top-of r0 {
                               device /dev/drbd10;           ----------------> 2
                               address 10.10.10.1:7789;
              }
              on hostC {
                               device   /dev/drbd10;
                               disk      /dev/sdb1;
                               address 10.10.10.3:7789;
                               meta-disk internal;        ----------------> 3
                               }
              }
}


  1. 호스트 A와 B 사이의 구성은 일반 복제 리소스 구성과 완전히 동일하다.
    하지만 제 3 노드인 호스트 C 는 호스트 A에서 복제 된다 ( 호스트 A가 primary라고 가정한다). 따라서 stacked 리소스 r0_1은 address가 호스트 A의 주소와 같다.
    별개의 네트워크 라인/포트를 가진다. 즉 완전히 별개의 라인으로 취급된다.


추가:
실제 구성에서는 호스트 B가 primary 가 될경우 10.10.10.1이라는 주소가 없기 때문에 데이터를 보낼 수  없다.
다라서 Stacked된 대상 리소스 ( 여기서는 r0) 의 리소스는 완전히 분리되어야 하며
호스트 A와 호스트 B에서 동시에 사용할수 있는 가상 IP(VIP) 여야 한다.


  1. 위에서 언급 한 것과 같이 호스트 A-B와 호스트 A-C가 완전히 별개의 라인이기 때문에 drbd에서 취급 하는 가상 디바이스 인덱스도 분리되어야 한다.
  2. Stacked구조의 target 리소스는 Internal 메타 데이터를 사용해야만 한다.
    그래야만 하나의 볼륨에 메타 데이터 정보를 포함 시킬수 있다.



생성 명령

호스트 A,B,C에 drbd.conf를 작성 후, service를 재 시작 한다.


  1.  먼저 호스트 A 에서 메타 데이터 생성

    drbdadm create-md r0
  2. 호스트 B에서 메타 데이터 생성

    drbdadm create-md r0
  3. 호스트 A에서 리소스 활성화 및 Stacked 리소스 메타 데이터 생성

    drbdadm up r0
    drbdadm -- --overwrite-data-of-peer primary r0
    >> 이 과정에서 동기화 진행
    drbdadm create-md --stacked r0-U
  4. 호스트 C에서 메타 데이터 생성

    drbdadm create-md r0-U
    service drbd start 혹은 drbdadm adjust r0 혹은 필요 없다.
  5. 호스트 A에서 stacked 리소스 활성화

    drbdadm up --stacked r0-U
    drbdadm primary --stacked r0-U
    drbdadm --stacked -- --overwrite-data-of-peer primary r0-U
    >> 이 과정에서 동기화 진행
    mount /dev/drbd10 /mountpoint


추가:
일반 복제 리소스 r0와 stacked리소스 r0_1 에 대해 두번 풀싱크를 별도로 해줘야 한다.
또한 Stacked 리소스가 primary가 되기 위해서는 r0리소스가 primary여야 한다.


사용


  1. 먼저 일반 리소스 r0를 primary 로 승격 시킨다.

    drbdadm primary r0
  2. stacked 리소스 r0_1을 활성화 한다.

    drbdadm up --stacked r0_1
  3. stacked 리소스 r0_1을 primary 로 승격 시킨다.

    drbdadm primary --stacked r0_1
  4. 볼륨 I/O를 하기 위해서 Stacked r0_1 리소스의 가상 장치를 os에 마운트 한다.

    mount /dev/drbd10 /mnt
    >> 이 과정 전에 primary 상태에서 format이 필요할  수 있다..
         
  5. 사용이 끝나면 반대의 순서로 drbd 리소스를 비 활성화 한다.

No comments:

Post a Comment