[클러스터] DRBD란 .. 0.8.x 대

DRBD/QuickStart









1.1 Notice




작성 시작 : 2008-04-18

마감 예정일 : 2008-05-29



1.2 소개




작성자 : 김석원 (swkim (at) worldwinmedia.co.kr)


두개의 서버를 가지고 HA-Cluster 시스템을 만들고 싶었다. HA-Cluster 시스템을 만들면서 문제는 데이터 동기화였다. 양 노드에서 가지고 있는 데이터는 네트워크로 연결 하여 동기화가 필요한데 그에 대해 찾아본 소프트웨어가 “DRBD” 였다. 2007년 초쯤에 살펴 보긴 했지만 버전이 올라가면서 다른 파일시스템에 대해서도 지원이 향상 되었다.


이미 오래전 부터 많은 커뮤니티 사이트나 구글링으로 자료는 찾아 볼 수 있었지만 최근에는 동향이 없어서 이기도 하고, 개인적으로 User-Guide 형식으로 문서를 만들고 싶기도 했다.






비록 실력이 없고, 글 재주가 없더라도 누군가의 도움으로 문서가 만들어지기 원하며 문서중에 틀린 부분에 있어서는 많은 지적 부탁합니다.



1.3 DRBD




DRBD(Distributed Replicated Block Device)는 HA cluster 구축 하기 위해 디자인된 블럭 디바이스 이다. 이 방식은 Network Raid-1으로 동작을 하게 된다. Raid-1의 일반적인 구성은 데이터 백업(실시간) 미러링하는 구성이지만 여기서는 Network으로 통한 미러링 하게 된다.

보통 DRBD는 HA-Cluster 시스템의 HeartBeat을 통해 제어 되는 것이 일반적 사용 방법이지만 8.0.x대 버전으로 넘어 오면서 OCFS2, GFS,…등 HA-Cluster에서의 확장된 기능이 추가 되었다. 이문서에서는 다루진 않겠지만 추후에 DRBD+OCFS2-HOWTO문서를 만들 것이다.



1.4 준비






1.4.1 구현 환경

1. 서버

  • vmware
  • redhat enterprise 4 (update5) Linux Kernel 2.6.9
2. vmware 을 이용한 리눅스 설치

  • vmware을 이용하여 RHEL-4.5을 두번 설치한다.(한번 설치 후 복사하여 사용해도 뭐…)
  • 주의 할 점은 컴파일 할 수 있는 환경과, LVM 을 사용 하여도 무관 하지만, 필자의 경우 미러링 할 HDD장치를 별도 추가 하였다. 그것이 편하므로..
3. 서버 환경
===============================================================
| |
| 192.168.0.10:eth0 eth0:192.168.0.11 |
| /————-\ |
| ==================== ==================== |
| | Linux Box Master | | Linux Box Slave | |
| | | | | |
| | | | | |
| | | | | |
| ==================== ==================== |
| \————-/ |
| 10.1.1.0.31:eth1 eth1:10.1.1.32 |
| hosts: cnode1 hosts: cnode2 |
| |
===============================================================


  • 위 환경은 두개의 네트워크 디바이스를 사용한다. 물론 VIP를 사용해도 무관하다. 하지만 정확한 테스트를 위해선 네트워크 카드를 추가하는 편이 좋다.
  • 위 구조는 HeartBeat을 지원 하기 위한 구성과, 추후 추가될 OCFS2에 대해서도 동일한 구성이다. 그러므로 vmware로 위 처럼 구성이 되었다면 Snapshot을 하는게 좋다.
  • eth1은 DRBD가 사용될 데이터 통로라 생각하면 된다.




1.4.2 소프트웨어 다운로드

1. 공식 다운로드 사이트
2. 사용 패키지

  • 버전 : 8.2.4 버전
  • 다운로드 : http://oss.linbit.com/drbd/8.2/drbd-8.2.4.tar.gz
  • ※ 8.x.x대 버전을 살펴 볼때 업데이트가 되면서 기능이 추가되는 것이 있다. 이버전에서는 간단한 테스트 목적이므로 디테일한 사항에 대해선 웹사이트를 참조 바란다.



1.5 설치




1. 소스 빌드

  • 필자는 소스를 가지고 rpm으로 만들었다. 위 “Browser the list”항목에 rpm 소스를 직접 다운들 받아도 상관없고, rpm빌드 작업이 안된 리눅스같은 경우는 컴파일을 하면 된다.
  • 아래 [“작업 서버 Master & Slave“] 이란 표시는 위에 구성된 서버 둘다 작업을 해야 된다는 것이다.
  • 작업 서버 [Master & Slave]
    ===================================================================================
    [root@localhost ~]# cd /tmp
    [root@localhost tmp]# wget http://oss.linbit.com/drbd/8.2/drbd-8.2.4.tar.gz ./
    [root@localhost tmp]# tar zxvf drbd-8.2.4.tar.gz -C /usr/local/src
    [root@localhost tmp]# cd /usr/local/src/drbd-8.2.4/
    [root@localhost src]# make rpm

    (if completed)…
    [root@localhost src]# cd dist/RPMS/i386/
    [root@localhost i386]# ls -all
    -rw-r–r– 1 root root 136485 Mar 17 09:40 drbd-8.2.4-3.i386.rpm
    -rw-r–r– 1 root root 225904 Mar 17 09:40 drbd-debuginfo-8.2.4-3.i386.rpm
    -rw-r–r– 1 root root 829769 Mar 17 09:40 drbd-km-2.6.9_55.ELsmp-8.2.4-3.i386.rpm
    [root@localhost i386]# rpm -ivh drbd-*
2. 환경 설정

  • DRBD가 사용하는 환경 설정 파일은 /etc/drbd.conf 이다.(man 5 drbd.conf)
  • 필자는 우선 man 5 drbd.conf의 샘플 config 파일을 사용하겠다.(무수히 많은 옵션들은 바로 바로 좌절로 돌아올 수 있으니 기본 기능을 맛을 보고 넘어가자 :-) )
  • 환경 설정 파일 만들기
  • 작업 서버 [Master & Slave]
    ===================================================================================
    [root@localhost ~]# vi /etc/drbd.conf
    global { usage-count yes; }
    common { syncer { rate 10M; } }
    resource r0 {
    protocol C;
    net {
    cram-hmac-alg sha1;
    }
    on cnode1 {
    device /dev/drbd0;
    disk /dev/sdb1;
    address 10.1.1.31:7789;
    meta-disk internal;
    }
    on cnode2 {
    device /dev/drbd0;
    disk /dev/sdb1;
    address 10.1.1.32:7789;
    meta-disk internal;
    }
    }
    [root@localhost ~]# _

  • HOSTNAME 변경
  • drbd.conf의 r0의 “cnode1″은 “uname -n”을 했을 경우의 값과 동일 해야 된다.
  • 작업 서버 [Master]
    ===================================================================================
    [root@localhost ~]# vi /etc/sysconfig/network
    NETWORKING=yes
    HOSTNAME=cnode1
    GATEWAY=192.168.0.250
    [root@localhost ~]# reboot

    [root@cnode1 ~]# _

  • 작업 서버 [Slave]
    ===================================================================================
    [root@localhost ~]# vi /etc/sysconfig/network
    NETWORKING=yes
    HOSTNAME=cnode2
    GATEWAY=192.168.0.250
    [root@localhost ~]# reboot

    [root@cnode2 ~]# _
3. 호스트 등록

  • cnode1 와 cnode2를 각 /etc/hosts에 등록한다.
  • 작업 서버 [Master & Slave]
    ===================================================================================
    [root@cnode ~]# vi /etc/host
    127.0.0.1 localhost.localdomain localhost
    10.1.1.31 cnode1
    10.1.1.32 cnode2
    [root@cnode ~]# _
4. 방화벽 설정

  • 위 환경 설정에 보면 7789의 포트를 cnode1,cnode2 사용하게 된다. 방화벽이 설정 되어 있다면 아래 와 같이 iptables 수정한다.
  • 작업 서버 [Master]
    ===================================================================================
    [root@cnode1 ~]# vi /etc/sysconfig/iptables
    -A RH-Firewall-1-INPUT -s cnode2 -p tcp –dport 7789 -j ACCEPT
    [root@cnode1 ~]# _

  • 작업 서버 [Slave]
    ===================================================================================
    [root@cnode2 ~]# vi /etc/sysconfig/iptables
    -A RH-Firewall-1-INPUT -s cnode1 -p tcp –dport 7789 -j ACCEPT
    [root@cnode2 ~]# _
3. Meta-data 생성

  • 양 노드간의 HDD의 메타정보를 가지고 있다. 프로그램 실행하기 전에 메타파일을 생성해야 된다.
  • 작업 서버 [Master & Slave]
    ===================================================================================
    [root@cnode ~]# drbdadm –create-md r0
    … Create meta-data….success
    [root@cnode ~]# server drbd start
4. DRBD ext3 파일 시스템 생성

  • 작업 서버 [Master]
    ===================================================================================
    [root@cnode1 ~]# service drbd start
    ……. 상대 노드(cnode2)를 무한으로 기다린다. 무시하고 “yes”를 입력하여 빠져나온다.
    [root@cnode1 ~]# drbdsetup /dev/drbd0 primary (-o)
    [root@cnode1 ~]# mkfs.ext3 /dev/drbd0
5. Slave DRBD 실행

  • 작업 서버 [Slave]
    ===================================================================================
    [root@cnode2 ~]# service drbd start
    [root@cnode2 ~]# cat /proc/drbd
    version: 8.2.4 (api:88/proto:86-88)
    GIT-hash: fc00c6e00a1b6039bfcebe37afa3e7e28dbd92fa build by root@localhost.localdomain, 2008-04-11 16:23:59
    0: cs:Connected st:Primary/Secondary ds:UpToDate/UpToDate C r—
    ns:596 nr:404 dw:1000 dr:2809 al:0 bm:8 lo:0 pe:0 ua:0 ap:0
    [>……………….] sync’ed: 0.3% (523443/961240)M
    finish: 14:30:08 speed: 50,236 (50,096) K/sec
    [root@cnode2 ~]# _

  • 위 실행 상태는 cnode1, cnode2에서 모두 확인 할 수 있다. 싱크를 맞추는 작업하는 동안 쉬자. :-)



1.6 테스트


서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

페이스북/트위트/구글 계정으로 댓글 가능합니다.