일을 하다보니 여러 환경에서 신기한 작업(?)들을 많이 하게 됩니다. 이번에는 DRBD 환경 구축이 필요하여 아래와 같이 구성하였습니다. 필요하신 분들은 아래의 자료를 참고하여 구축해보시기 바랍니다. 문서의 저작권은 http://root.so, http://jaehun.org 를 운영하는 Jaehun, Park <jaehun@me.com>에게 있으므로, 출처를 반드시 밝혀주시기 바랍니다. 감사합니다.
구성 환경
- RHEL 6.4 (64bit)
- DRBD 8.4.0
구성 요건
구성 개요
- DRBD 설치
- DRBD 설정파일 작성
- DRBD 기동
- 데이터 동기화 확인
서버 구성
Host Name |
|
Address |
node1 |
master |
192.168.11.151 |
node2 |
backup |
192.168.11.152 |
|
Virtual IP |
192.168.11.150 |
작업 내용
DRBB를 빌드 하기 위하여 필요한 패키지 설치
$ sudo yum install -y gcc make automake autoconf flex rpm-build kernel-devel \
libxslt fakeroot
rpmbuild 구축에 앞서 필요로 하는 디렉토리 구조를 생성.
$ mkdir -p /home/help/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
소스 다운로드 (안정버전 drbd 8.4.0)
$ curl -O http://oss.linbit.com/drbd/8.4/drbd-8.4.0.tar.gz
다운로드한 소스를 풉니다.
$ tar zxvf drbd-8.4.0.tar.gz
configure스크립트를 실행.
$ cd drbd-8.4.0
$ ./configure
fakeroot를 이용하여 make를 실행합니다. fakeroot를 사용하는 이유는 RPM을 빌드하기 위함이며, root권한이기 때문에 fakeroot가 root권한인 것 같이 표현합니다.
$ fakeroot make rpm km-rpm
아무이상없이 빌드가 완성되면 , 아래rpm이 작성된다.
$ ls -1 /home/help/rpmbuild/RPMS/x86_64/
drbd-8.4.0-1.el6.x86_64.rpm
drbd-bash-completion-8.4.0-1.el6.x86_64.rpm
drbd-heartbeat-8.4.0-1.el6.x86_64.rpm
drbd-km-2.6.32_71.el6.x86_64-8.4.0-1.el6.x86_64.rpm
drbd-pacemaker-8.4.0-1.el6.x86_64.rpm
drbd-udev-8.4.0-1.el6.x86_64.rpm
drbd-utils-8.4.0-1.el6.x86_64.rpm
drbd-xen-8.4.0-1.el6.x86_64.rpm
RPM 빌드 완료후 필요한 것은 drbd-utils와 drbd-km입니다. 물론 필요에 따라 해당 패키지를 설치 하시면 됩니다.
$ sudo rpm -ivh \
/home/help/rpmbuild/RPMS/i386/drbd-utils-8.4.0-1.el6.x86_64.rpm \
/home/help/rpmbuild/RPMS/i386/drbd-km-2.6.32_71.el6.x86_64-8.4.0-1.el6.x86_64.rpm
커널 모듈에 DRBD를 인식 시킵니다.
$ lsmod | grep drbd
$ sudo modprobe drbd
$ lsmod | grep drbd
drbd 274063 0
libcrc32c 815 1 drbd
” /etc/init. d/drbd start "실행에 modprobe drbd가 실행되므로, 여기에서는 modprobe 명령어로 커널 모듈을 정상적으로 등록 할 수 있는 것을 확인하는 것입니다. 부팅시 자동으로 등록될 수 있도록 아래와 같이 서비스 등록을 시켜줍니다.
$ chkconfig --list drbd
drbd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
Device File 준비
본인의 경우 LVM으로 각각 100G, 75G 두개의 파티션을 준비했습니다. lv_data : 100G , lv_log : 75G
DRBD 설정
/etc/hosts에 호스트명을 등록해줍니다. 등록을 하는 이유는 config에서 IP를 지정하지만 호스트명을 IP로 변환하는 것을 실패하면 동작되지 않는 문제때문입니다.
$ sudo vi /etc/hosts
> 192.168.11.151 node1
> 192.168.11.152 node2
다음은 DRBD 설정 파일을 수정합니다. 설정 파일은 항상 res로 인식하도록 하고 있습니다.
disk 부분이 미리 준비해둔 LVM 파티션입니다. Volum은 node1과 node2에 따라 틀리므로 주의하시기 바랍니다.
- /etc/drbd.d/data.res
-
resource data {
protocol C;
volume 0 {
device /dev/drbd0;
disk /dev/vg_cs1/data;
meta-disk internal;
}
volume 1 {
device /dev/drbd1;
disk /dev/vg_cs1/log;
meta-disk internal;
}
on node1 {
address 10.10.10.11:7801;
}
on node2 {
address 10.10.10.12:7801;
}
}
DRBD 디바이스를 초기화합니다.
$ sudo drbdadm create-md data
Writing meta data...
initializing activity log
NOT initializing bitmap
New drbd meta data block successfully created.
success
※주의: iptables가 구동중일 경우 DRBD 통신이 원활히 동작되지 않을 수 있으니 참고 바랍니다. DRBD 동작.
$ sudo /etc/init.d/drbd start
Starting DRBD resources: [
create res: data
prepare disk: data
adjust disk: data
adjust net: data
]
.....
DRBD를 스타트하면 /proc/drbd가 생성됩니다.
$ cat /proc/drbd
version: 8.4.0 (api:1/proto:86-100)
GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by root@node1, 2013-10-14 15:10:50
0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
ns:0 nr:106628836 dw:106628836 dr:0 al:0 bm:6400 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
1: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
ns:0 nr:78640764 dw:78640764 dr:0 al:0 bm:4800 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
이 때, 어느 쪽도 Primary가 아닌 Secondary로 동작되는 것을 알 수 있습니다.
데이터 동기화 확인
Primary에서 파일을 작성하고, Secondary에 데이터 동기화가 이루어지는 것을 확인합니다.
node1: (secondary→primary)
node1을 primary로 강제 변경합니다.
$ sudo drbdadm primary --force data
Primary로부터 Secondary에 동기화 처리가 시작되며, 용량에 따라 동기화 시간이 틀려질 수 있습니다. 저의 경우 약 1시간정도 걸렸습니다.
$ cat /proc/drbd
version: 8.4.0 (api:1/proto:86-100)
GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by centos@centos, 2011-11-08 16:16:36
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
ns:2664 nr:0 dw:0 dr:104855036 al:0 bm:0 lo:0 pe:3 ua:3 ap:0 ep:1 wo:b oos:128600
[>....................] sync'ed: 3.2% (128600/104855036)K
finish: 0:00:45 speed: 2,432 (2,432) K/sec
1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:78640764 nr:0 dw:0 dr:78641436 al:0 bm:4800 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
$ cat /proc/drbd
version: 8.4.0 (api:1/proto:86-100)
GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by centos@centos, 2011-11-08 16:16:36
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:131032 nr:0 dw:0 dr:131696 al:0 bm:8 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:78640764 nr:0 dw:0 dr:78641436 al:0 bm:4800 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
DRBD 디바이스를 확인해 보시면 설정한 대로 /dev/drbd0과 /dev/drbd1이 생성되었음을 알게 될 것입니다.
$ ls -la /dev/drbd0
brw-rw---- 1 root disk 147, 0 Nov 8 17:19 /dev/drbd0
기존 사용하던 디스크처럼 동일하게 DRBD 디바이스를 포맷하고, 마운트 하면 사용이 가능합니다.
$ sudo mkfs.ext4 /dev/drbd0
$ sudo mkfs.ext4 /dev/drbd1
$ sudo mkdir /data
$ sudo mount -t ext4 /dev/drbd0 /data
$ sudo mkdir /data/log
$ sudo mount -t ext4 /dev/drbd1 /data/log
마운트후 정상적으로 마운트가 되었는지 확인합니다.
$ ls -la /data
total 18
drwxr-xr-x 4 root root 4096 2013-10-14 18:12 .
dr-xr-xr-x. 28 root root 4096 2013-10-14 16:27 ..
drwxr-xr-x 3 root root 4096 2013-10-14 18:13 log
drwx------ 2 root root 16384 2013-10-14 17:54 lost+found
primary·secondary간 데이터 동기되는 것을 확인하기 위해서, 파일을 생성해봅니다.
$ sudo touch /data/test.txt
$ ls -la /data/
total 28
drwxr-xr-x 4 root root 4096 2013-10-14 18:15 .
dr-xr-xr-x. 28 root root 4096 2013-10-14 16:27 ..
drwxr-xr-x 3 root root 4096 2013-10-14 18:13 log
drwx------ 2 root root 16384 2013-10-14 17:54 lost+found
-rw-r--r-- 1 root root 0 2013-10-14 18:15 test.txt
node1: (primary→secondary)
DRBD가 사용중이므로 secondary로 변경할 수 없으므로, 디바이스를 umount 합니다.
$ sudo umount /data/log
$ sudo umount /dat
DRBD의 모드를 Primary에서 Secondary모드로 변경합니다.
$ sudo drbdadm secondary data
$ cat /proc/drbd
version: 8.4.0 (api:1/proto:86-100)
GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by root@node1, 2013-10-14 15:10:50
0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----
ns:106628984 nr:0 dw:1774620 dr:104856149 al:498 bm:6400 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
1: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----
ns:80005452 nr:0 dw:1364688 dr:78642521 al:384 bm:4800 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
위와 같이 되었으므로, 기존 Secondary가 Primary로 변경할 수 있는 상태가 됩니다.
node2: (secondary→primary)
node2의 DRBD모드를 Primary로 변경합니다.
$ sudo drbdadm primary data
/proc/drbd에서 Primary가 되었는지 확인합니다.
$ cat /proc/drbd
version: 8.4.0 (api:1/proto:86-100)
GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by root@node1, 2013-10-14 15:10:50
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:0 nr:106628984 dw:106628984 dr:672 al:0 bm:6400 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:0 nr:80005452 dw:80005452 dr:672 al:0 bm:4800 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
DRBD 디바이스의 내용을 확인하기위하여, 볼륨을 마운트합니다.
$ sudo mkdir /data
$ sudo mount -t ext4 /dev/drbd0 /data/
$ sudo mount -t ext4 /dev/drbd1 /data/log
mount된 디렉토리에서 node1에서 작성하였던 test.txt가 존재하는지를 확인합니다.
$ ls -la /data/
total 20
drwxr-xr-x 3 root root 1024 Nov 8 17:23 .
drwxr-xr-x. 3 root root 4096 Nov 8 17:25 ..
drwxr-xr-x 3 root root 4096 2013-10-14 18:13 log
drwx------ 2 root root 16384 2013-10-14 17:54 lost+found
-rw-r--r-- 1 root root 0 2013-10-14 18:15 test.txt
node2: (primary→secondary)
해당 /data/log와 /data 디렉토리를 umount 하고, secondary로 모드를 변경합니다.
$ sudo umount /data/log
$ sudo umount /data
$ sudo drbdadm secondary data
/dev/drbd에서 secondary로 모드가 변경되었는지 확인합니다.
$ cat /proc/drbd
version: 8.4.0 (api:1/proto:86-100)
GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by root@node1, 2013-10-14 15:10:50
0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----
ns:8 nr:106628984 dw:106628992 dr:1385 al:1 bm:6400 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
1: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----
ns:8 nr:80005452 dw:80005460 dr:1373 al:1 bm:4800 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
이것으로 node1, node2 둘다 secondary로 동작되고 있는 상태입니다. 추후 RHCS나 혹은 heartbeat를 이용하여 해당 클러스터로 묶어서 구동시키실 수 있습니다. 이로서 DRBD 구축에 대한 글을 마치겠습니다. 감사합니다.