DRBD 설치 편.

DRBD 설치 편.
DRBD
를 가지고 응용할 수 있는게 생각보다 많이 있다
.
기본적으로는 DRBD + Heartbeat 를 이용해서 local 에서 마운트 해서 사용을 하는 방법이다. 그리고 조금 더 나가면 DRBD + HeartBeat + NFS 방식 혹은 DRBD + Heartbeat + iscsitarget 내지는 DRBD + Heartbeat + GFS2 + GNBD 로 사용도 가능하다
.
개인적으로 가장 많은 시간을 보낸 것은 GFS Debian 에서 구현시킬 때 였다
.

자 이제 가장 기본인 DRBD + Heartbeat 를 먼저 설치해 보도록 한다
.

준비 사항


서버 : Debian Etch 기본 설치 버전 2

프로그램 :
kernel 2.6.26.3
DRBD 8.2.6
Heartbeat-2

일단 설치 파일에 사용할 프로그램을 다운로드 받는다.







dongho7:/usr/src# wget http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.26.3.tar.bz2
18:10:33—  http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.26.3.tar.bz2
           => `linux-2.6.26.3.tar.bz2′
Resolving kernel.org… 204.152.191.5, 204.152.191.37
Connecting to kernel.org|204.152.191.5|:80… connected.
HTTP request sent, awaiting response… 200 OK
Length: 49,452,289 (47M) [application/x-bzip2]


100%[====================================>] 49,452,289     4.63M/s    ETA 00:00


18:10:51 (2.66 MB/s) – `linux-2.6.26.3.tar.bz2′ saved [49452289/49452289]



dongho7:/usr/src#
wget http://oss.linbit.com/drbd/8.2/drbd-8.2.6.tar.gz
18:13:03—  http://oss.linbit.com/drbd/8.2/drbd-8.2.6.tar.gz
           => `drbd-8.2.6.tar.gz’
Resolving oss.linbit.com… 212.69.162.23
Connecting to oss.linbit.com|212.69.162.23|:80… connected.
HTTP request sent, awaiting response… 200 OK
Length: 335,382 (328K) [application/x-tar]


100%[====================================>] 335,382      127.10K/s


18:13:08 (126.87 KB/s) – `drbd-8.2.6.tar.gz’ saved [335382/335382]


먼저 커널을 압축을 풀고 컴파일을 한다.
그리고 부트로드 grub lilo 를 사용하여 적용하고 리붓 한다.







dongho7:/usr/src# tar jxvf linux-2.6.26.3.tar.bz2


 


dongho7:/usr/src# cd linux-2.6.26.3
dongho7:/usr/src/linux-2.6.26.3#
make menuconfig
dongho7:/usr/src/linux-2.6.26.3#
make
dongho7:/usr/src/linux-2.6.26.3#
make install
dongho7:/usr/src/linux-2.6.26.3#
make modules_install
dongho7:/usr/src/linux-2.6.26.3#
vi /etc/lilo.conf
dongho7:/usr/src/linux-2.6.26.3#
lilo
Added linux *
dongho7:/usr/src/linux-2.6.26.3#
reboot



DRBD patch
/usr/src/patch-drbd_main 파일명으로 만든다.
patch
를 하지 않으면 컴파일 시에 오류가 발생한다.







dongho7:/usr/src# cat patch-drbd_main
— drbd/drbd_main.c    2008-09-01 12:01:56.000000000 +0900
+++ drbd/drbd_main.c    2008-09-01 12:02:14.000000000 +0900
@@ -2564,7 +2564,7 @@


        if (minor_table) {
                if (drbd_proc)
–                       remove_proc_entry(“drbd”, &proc_root);
+                       remove_proc_entry(“drbd”, NULL);
                i = minor_count;
                while (i–) {
                        struct drbd_conf        *mdev  = minor_to_mdev(i);
@@ -2786,7 +2786,7 @@
        /*
         * register with procfs
         */
–       drbd_proc = create_proc_entry(“drbd”,  S_IFREG | S_IRUGO , &proc_root);
+       drbd_proc = create_proc_entry(“drbd”,  S_IFREG | S_IRUGO , NULL);


        if (!drbd_proc) {
                printk(KERN_ERR “drbd: unable to register proc file\n”);


 



DRBD
원본 tar 파일을 풀고 패치를 한 뒤 컴파일을 한다.







dongho7:/usr/src# tar zxvf drbd-8.2.6.tar.gz
dongho7:/usr/src#
cd drbd-8.2.6
dongho7:/usr/src/drbd-8.2.6#
patch -p0 -l < ../patch-drbd_main
patching file drbd/drbd_main.c


 


dongho7:/usr/src/drbd-8.2.6# make clean all

make -C /lib/modules/2.6.26.3/build SUBDIRS=/usr/src/drbd-8.2.6/drbd  modules
make[2]: Entering directory `/usr/src/linux-2.6.26.3′
  CC [M]  /usr/src/drbd-8.2.6/drbd/drbd_buildtag.o
  CC [M]  /usr/src/drbd-8.2.6/drbd/drbd_bitmap.o
  CC [M]  /usr/src/drbd-8.2.6/drbd/drbd_proc.o
  CC [M]  /usr/src/drbd-8.2.6/drbd/drbd_worker.o
  CC [M]  /usr/src/drbd-8.2.6/drbd/drbd_receiver.o
  CC [M]  /usr/src/drbd-8.2.6/drbd/drbd_req.o
  CC [M]  /usr/src/drbd-8.2.6/drbd/drbd_actlog.o
  CC [M]  /usr/src/drbd-8.2.6/drbd/lru_cache.o
  CC [M]  /usr/src/drbd-8.2.6/drbd/drbd_main.o
  CC [M]  /usr/src/drbd-8.2.6/drbd/drbd_strings.o
  CC [M]  /usr/src/drbd-8.2.6/drbd/drbd_nl.o
  LD [M]  /usr/src/drbd-8.2.6/drbd/drbd.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /usr/src/drbd-8.2.6/drbd/drbd.mod.o
  LD [M]  /usr/src/drbd-8.2.6/drbd/drbd.ko
make[2]: Leaving directory `/usr/src/linux-2.6.26.3′
mv .drbd_kernelrelease.new .drbd_kernelrelease
Memorizing module configuration … done.
make[1]: Leaving directory `/usr/src/drbd-8.2.6/drbd’


        Module build was successful.

dongho7:/usr/src/drbd-8.2.6#
make install



이제 Heartbeat 를 데비안 스타일로 설치한다.







dongho7:~# apt-get install heartbeat-2


 


 



위 프로그램 설치는 두 서버에 동일하게 설치한다.


이제 설정을 하자
.
DRBD
/etc/drbd.conf 파일만 설정하면 된다
.
drbd.conf
를 아래 형식으로 자신의 서버에 맞게끔 파티션 정보 등은 수정한다.







dongho7:~# cat /etc/drbd.conf
resource “cluster” {
        protocol C;
        handlers {
                pri-on-incon-degr “echo ‘pri-on-incon-degr'”;
                pri-lost-after-sb “echo ‘pri-lost-after-sb'”;
                local-io-error “echo ‘local-io-error'”;
        }
        startup {
                wfc-timeout 300;
                degr-wfc-timeout 120;
        }
        disk {
                on-io-error detach;
        }
        net {
                timeout 60;
                connect-int 10;
                ping-int 10;
                max-buffers 20000;
                max-epoch-size 20000;
                unplug-watermark 20000;
        }
        syncer {
                rate    512M;
                verify-alg md5;
        }


        on dongho7 {
                device  /dev/drbd0;
                disk    /dev/sda6;
                address 192.168.0.13:7790;
                meta-disk internal;
        }
        on dongho8 {
                device  /dev/drbd0;
                disk    /dev/sda6;
                address 192.168.0.14:7790;
                meta-disk internal;
        }
}



 



create meta data
를 진행한다.
만약 비어 있지 않은 파티션이라면 파티션을 분리하여 다른 곳에 meta data 를 저장을 하거나 데이타를 삭제 해도 되는 경우에는 dd 를 이용하여 일정 공간을 zero 로 채우고 난 다음 만들면 된다.







 


dongho7:~# drbdadm create-md cluster
v07 Magic number not found
v07 Magic number not found
You want me to create a v08 style flexible-size internal meta data block.
There apears to be a v08 flexible-size internal meta data block
already in place on /dev/sda6 at byte offset 30005784576
Do you really want to overwrite the existing v08 meta-data?
[need to type ‘yes’ to confirm]
yes


Writing meta data…
initialising activity log
NOT initialized bitmap
New drbd meta data block sucessfully created.


 


 



이제 데몬을 시작해 보자.
여기까지 두 서버 모두에서 동일하게 진행을 한다.







dongho7:~# /etc/init.d/drbd start
Starting DRBD resources:    [ d(cluster) s(cluster) n(cluster) ].
dongho7:~#
cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by
root@dongho7, 2008-09-01 19:20:28
 0: cs:Connected st:Secondary/Secondary ds:Inconsistent/Inconsistent C r—
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 oos:29301596


 


 



지금 부터는 한쪽 서버의 데이타를 기준으로 동기화를 위해 필요한 것이다.
primary 를 설정하는 것이다
.
다음 명령어는 primary 로 사용할 서버에서 한번만 명령을 내려 주면 된다.







dongho7:~# drbdadm — –overwrite-data-of-peer primary cluster




아래처럼 동기화가 어느 정도 진행 되었는지 볼 수 있다.
아래 서버는 1000T 로 크로스 케이브로 연결 되어 있어 아래 정도의 속도가 나오고 있다.







dongho7:~# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by
root@dongho7, 2008-09-01 19:20:28
 0: cs:SyncSource st:Primary/Secondary ds:UpToDate/Inconsistent C r—
    ns:1719812 nr:0 dw:0 dr:1798880 al:0 bm:104 lo:25 pe:294 ua:2496 ap:0 oos:27591164
        [>……………….] sync’ed:  5.9% (26944/28614)M
        finish: 0:07:29 speed: 61,328 (50,304) K/sec


 


 




동기화가 완료 되면 다음과 같이 ds UptoDate 로 모두 표시 된다.







 


dongho7:~# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by
root@dongho7, 2008-09-01 19:20:28
 0: cs:Connected st:Primary/Secondary ds:UpToDate/UpToDate C r—
    ns:29301596 nr:0 dw:0 dr:29301596 al:0 bm:1789 lo:0 pe:0 ua:0 ap:0 oos:0


 




지금 부터는 heartbeat 설정을 한다.
인증키를 양쪽 서버에 동일하게 만든다.







dongho7:/etc/ha.d# vi authkeys
dongho7:/etc/ha.d#
chmod 600 authkeys
dongho7:/etc/ha.d#
cat authkeys
auth 2
2 sha1
difficultp@ssw0rd


 


 



ha.cf
설정 파일을 만든다.
ha.cf
는 두 서버에 설정시에 반대로 하면 된다.







 


dongho7:/etc/ha.d# vi ha.cf
dongho7:/etc/ha.d#
cat ha.cf
debugfile       /var/log/ha-debug
logfile         /var/log/ha-log
logfacility     local0


keepalive       1
deadtime        10
warntime        4
initdead        60
udpport         694
ucast           eth0        10.30.6.14
ping            10.30.6.14
respawn         hacluster       /usr/lib/heartbeat/ipfail
auto_failback   off


node    dongho7
node    dongho8


 


dongho8:/etc/ha.d# cat ha.cf
debugfile       /var/log/ha-debug
logfile         /var/log/ha-log
logfacility     local0


keepalive       1
deadtime        10
warntime        4
initdead        60
udpport         694
ucast           eth0        10.30.6.13
ping            10.30.6.13
respawn         hacluster       /usr/lib/heartbeat/ipfail
auto_failback   off


node    dongho8
node    dongho7


 


 



이제 마지막으로 haresources 를 만든다.
여기에서 가상 아이피 및 failover 되었을때 어떤 데몬을 시작 시킬찌 등을 설정한다.







 


dongho7:/etc/ha.d# vi haresources
dongho7:/etc/ha.d# cat haresources

dongho7 drbddisk::cluster \
        Filesystem::/dev/drbd0::/drbd/cluster::ext3::noatime,nodiratime \
        Delay::2::0 \
        IPaddr::10.30.6.10/24/eth0


 


dongho8:/etc/ha.d# vi haresources
dongho8:/etc/ha.d#
cat haresources
dongho8 drbddisk::cluster \
        Filesystem::/dev/drbd0::/drbd/cluster::ext3::noatime,nodiratime \
        Delay::2::0 \
        IPaddr::10.30.6.10/24/eth0


 


 



이제 heartbeat 데몬을 시작 하기전 몇가지 사전 작업을 해야 한다.
haresources 에서 파일 시스템을 /drbd/cluster 에 마운트 하도록 하기 위해서는 파일 시스템도 만들어야 하고 디렉토디로 만들어야 한다. 양쪽 서버에서 동일하게 작업한다.







dongho7:~# mkdir -p /drbd/cluster


 


dongho7:~# mkfs -t ext3 /dev/drbd0



이제 양쪽 서버에서 heartbeat 데몬을 시작 한다.







 


dongho7:~# /etc/init.d/heartbeat start
Starting High-Availability services:
Done.

dongho8:~#
/etc/init.d/heartbeat start
Starting High-Availability services:
Done.


 


 



이제 구성 완료 되었다.
한번 정말 아이피가 잘 넘어 가는지 테스트 해보자.







dongho8:~# ip addr show
1: lo: <LOOPBACK,UP,10000> mtu 16436 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
2: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
3: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop
    link/ether 5e:1c:e1:ff:8f:2b brd ff:ff:ff:ff:ff:ff
4: eth0: <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:19:66:16:58:11 brd ff:ff:ff:ff:ff:ff
    inet 10.30.6.14/24 brd 10.30.6.255 scope global eth0
    inet 10.30.6.10/24 brd 10.30.6.255 scope global secondary eth0:0
5: eth1: <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0e:2e:f7:03:d5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.14/24 brd 192.168.0.255 scope global eth1


 


 



운영중인 서버에서 heartbeat  데몬을 내려 보자.
그러면 몇초 후에 다른 노드로 넘어가게 될 것이다.







dongho8:~# /etc/init.d/heartbeat stop


 


Stopping High-Availability services:
Done.



다른 노드에서 아이피가 올라 온것을 아래 처럼 확인 할 수 있다.







dongho7:~# ip addr show
1: lo: <LOOPBACK,UP,10000> mtu 16436 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
2: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
3: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop
    link/ether de:45:58:74:ea:f0 brd ff:ff:ff:ff:ff:ff
4: eth0: <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:13:8f:fc:bd:43 brd ff:ff:ff:ff:ff:ff
    inet 10.30.6.13/24 brd 10.30.6.255 scope global eth0
    inet 10.30.6.10/24 brd 10.30.6.255 scope global secondary eth0:0
5: eth1: <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0e:2e:f7:03:e8 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.13/24 brd 192.168.0.255 scope global eth1


 


 



다음 번에는 DRBD local 에서 사용하는게 아닌 remote 에서 사용 하는 예를 살펴 보자.


 


서진우

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

You may also like...

2 Responses

  1. 2024년 10월 27일

    … [Trackback]

    […] Find More on to that Topic: nblog.syszone.co.kr/archives/3163 […]

  2. 2024년 11월 14일

    … [Trackback]

    […] Here you will find 56182 more Information on that Topic: nblog.syszone.co.kr/archives/3163 […]

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