본문 바로가기

기술자료/기술운영자료

DRBD를 이용한 HA Cluster 구축

DRBD를 이용한 HA Cluster 구축

 

 

 

HA Cluster (High AvailabilityCluster)

 

 

엔터프라이즈 컴퓨팅 환경에서 1년 중 시스템의 정지시간이

수분에서 한시간 이내의 무정지 서비스를 가능하게 해주는 클러스터

 

사용 목적

일반적으로 Fault Tolerance 시스템과는 달리 보편적인 하드웨어, 네트워크장비, 스토리지, UPS 등으로구성되며 서비스의 예정된 중단 혹은 불시의 중단에 의한 Downtime을 최소화 하여,

서비스 중단으로 인한 비용 손실의 최소화

 

 

DRBD (Distributed Replicated BlockDevice)

 

 


그림입니다.
원본 그림의 이름: mem00002274012b.tmp
원본 그림의 크기: 가로 189pixel, 세로 93pixel


HA cluster 구축 하기 위해 디자인된 블럭 디바이스 이다. 이 방식은 Network Raid-1으로 동작을

하게 된다. Raid-1의 일반적인 구성은 데이터 백업(실시간) 미러링하는 구성이지만 여기서는 Network으로 통한 미러링 하게 된다. 

그림입니다.
원본 그림의 이름: mem00002274012c.tmp
원본 그림의 크기: 가로 615pixel, 세로 342pixel

(DRBD 개념도. 출처 : http://www.drbd.org)




보통 DRBD는 HA-Cluster 시스템의 
HeartBeat을통해 제어 되는 것이 일반적 사용 방법이다.

 

 

이 문서는 DRBD + Heartbeat + Mysql을 설치하여구성하는 방법으로

DRBD + Heartbeat + Mysql 을 양쪽 서버에 모두설치 하고 사용하는 데이터 및 파티션을

DRBD 볼륨으로 지정 후 heartbeat에게 health check 및 Cluster IP에 관련된 control 기능을 맡겨

서버 한대가 죽더라도 다른 서버가 동일한 데이터를 가지고 계속 서비스를 할 수 있도록 구성하는 방법에 대하여 기술 하겠습니다.

 

 

설치환경 : CentOS 6.4 32bit / DRBD 8.3

 

 

DRBD 설치

 

 

DRBD의 경우 CentOS에서공식지원은 5.8이 마지막으로 6.x버전에서는 공식 지원이 되지 않는다.

하여 yum repository에서도 빠져 있는데, 비공식 ELRepo reposirtory를 이용하여 설치를 진행

 

# rpm -Uvh http://elrepo.org/elrepo-release-6-4.el6.elrepo.noarch.rpm

# vi /etc/yum.repos.d/elrepo.repo

enabled=0

 

# yum --enablerepo=elrepo installdrbd83-utils kmod-drbd83

먼저 양측 서버의(master, slave로 통칭하기로 함) 시간을 맞춰줘야 함

rdate를 cron으로설정하든 ntpd를 이용하여 동기화를 시키든 동일한 시간을 유지시켜준다.

 

Hostname변경

 

 

#vi /etc/hosts

192.168.2.47 test1

192.168.2.48 test2

 

환경설정

 

 

#vi /etc/drbd.conf

global {

           usage-count yes;

       }

 

common {

           syncer{ rate 50M; }  // 초당 50MB

            }

 

resource "r0" {

                 protocol C;

                 disk { on-io-error detach; }

                 syncer {

                        }

 

                 on test1 {

                     device/dev/drbd0;

                     disk/dev/sda3;

                     address192.168.2.47:7791;  // 각 노드 IP

                     meta-diskinternal;

                             }

 

                 on test2 {

                     device/dev/drbd0;

                     disk/dev/sda3;

                     address192.168.2.48:7791;

                     meta-diskinternal;

                                }

}

 

 

위 설정에서 각 항목의 의미는 다음과 같다.

   - resource : resource를정의하는 블록. 위에서는 'r0'라는 이름의 리소스를 정의.

   - protocol : 데이터 전송 프로토콜을지정한다. 지정할 수 있는 값은 A,B,C 세 종류

      * protocol A: 로컬 디스크에 쓰기가 끝나고 TCP버퍼에 데이터를 송신한 시점에서

                  쓰기 작업을 완료로 한다. (성능 중시, 비동기 전송)

     * protocol B : 로컬 디스크에 쓰기가 끝나고 원격 호스트로 데이터가 도달한 시점에서

                  쓰기 작업을 완료로 한다. ( A와 C의 중간)

      * protocol C: 원격 호스트의 디스크에도 쓰기가 완료된 시점에서 쓰기 작업을 완료로 한다.

                  (신뢰성 중시, 동기 전송)

   - device : drbd의 논리 블록 디바이스를지정.

   - disk : 미러링할 물리 디바이스를 지정한다. 

   - address : 데이터를 동기화하기위해 수신 대기할 IP주소와 포트를 지정한다.

            포트는 리소스마다 고유해야 한다.

   - meta-disk : 메타 데이터를 저장할디바이스를 지정한다. 'internal'을 지정한 경우

              'disk'항목에서 지정한 블록 디바이스 중 128MB를 메타 데이터용으로 확보한다.

 

 

MetaData 생성

 

 

 

* 주의 : Meta Data 생성전 DRBD 볼륨으로 사용할 공간은 파일시스템 생성시키지 않아야함.

 

미리 파티션이 생성된 상태이거나 아래와 같은 에러가 발생할 경우 해결 방법

Command 'drbdmeta 1 v08 /dev/xxx internalcreate-md' terminated with exit code 40

 

dd를 이용해 디스크 초기화 후Meta Data 생성 진행

 

#dd if=/dev/zero of=/dev/sdc1 bs=1Mcount=128

 


(master, slave에서 모두 진행)

#drbdadm create-md all


그림입니다.
원본 그림의 이름: mem00002274012d.tmp
원본 그림의 크기: 가로 513pixel, 세로 89pixel




DRBD데몬 시작

 

 

#/etc/init.d/drbd start

 

DiskSync

 

 

양쪽 노드간의 HDD 메타정보를 가지고 Disk Sync 진행

drbd1(master), drbd2(slave)로 작업을 진행하도록하겠습니다.

 

#drbdadm -- --overwrite-data-of-peerprimary all

 

*slave 서버에서의 별도의sync 작업은 필요가 없습니다.

 

#cat /proc/drbd

그림입니다.
원본 그림의 이름: mem00002274012e.tmp
원본 그림의 크기: 가로 740pixel, 세로 104pixel


 

Sync완료 확인

 

 


그림입니다.
원본 그림의 이름: mem00002274012f.tmp
원본 그림의 크기: 가로 740pixel, 세로 75pixel 




Sync완료 후 미러링 여부 확인하기

 

 

#mkfs -t ext4 -j /dev/drbd0

 

#mount /dev/drbd0 /data

 

master 서버에서 마운트한 디렉토리에 적절한 크기의 데이터를 삽입후

primary / secondary를 변경

 

(master 서버)

#umount /data

 

#drbdsetup /dev/drbd0 secondary

 

(slave 서버)

#drbdsetup /dev/drbd0 primary

 

#mount /dev/drbd0 /data

 

동일하게 데이터가 입력된 것이 확인 가능합니다.

 

 

Mysql datadir 변경

 

 

 

아래 항목을 추가해줍니다.

#vi /etc/my.cnf

datadir=/data

 

스크립트를 이용하여 sql을 실행하는 경우 스크립트에서도 datadir을 변경해 줍니다.

#vi /etc/init.d/mysqld

 

 

heartbeat 설치

 

 

 

heartbeat설치를 위한 repository 등록

 

 

#wgethttp://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

 

#rpm -Uvh epel-release-6-8.noarch.rpm

 

#yum repolist

 

repository 등록 후 설치를 진행토록 하겠습니다.

#yum install -y heartbeat heartbeat*

 

heartbeat설정

 

 

#vi /etc/ha.d/ha.cf

 

debugfile /var/log/ha-debug.log

logfile /var/log/ha.log

keepalive 2

deadtime 10

initdead 120

bcast eth0

udpport 694

node test1

node test2

ping 192.168.2.1

auto_failback on

 

 


 

#vi /etc/ha.d/authkeys

auth 2

2 sha1 test-ha

 

#chmod 600 /etc/ha.d/authkeys

 

#vi /etc/ha.d/haresources

test1 192.168.2.90/32/eth0:0 drbddisk::r0 Filesystem::/dev/drbd0::/data::ext3mysqld // master

test2 192.168.2.90/32/eth0:0 drbddisk::r0Filesystem::/dev/drbd0::/data::ext3 mysqld // slave

 

 

설정 완료 후 heartbeat 서비스 시작

 

 

#/etc/init.d/heartbeat start

 

서비스가 정상적으로 실행되면 아래와 같이 가상 IP가 설정되는 것을확인할 수 있습니다.


그림입니다.
원본 그림의 이름: mem000022740130.tmp
원본 그림의 크기: 가로 632pixel, 세로 367pixel


 



테스트 진행

 

 

 

1. master 서버shutdown

 

2. 가상 IP에 ping check 해도 끊김없는 것을 확인할 수 있습니다.

 

그림입니다.
원본 그림의 이름: mem000022740131.tmp
원본 그림의 크기: 가로 373pixel, 세로 466pixel



 



master 서버 fail-over발생시, heartbeat에서 자동으로 master 서버를

기존 slave로 변경한 후drbd 파티션을 마운트 시키고, mysqld 서비스를 호출해 줍니다.


그림입니다.
원본 그림의 이름: mem000022740132.tmp
원본 그림의 크기: 가로 591pixel, 세로 244pixel



그림입니다.
원본 그림의 이름: mem000022740133.tmp
원본 그림의 크기: 가로 459pixel, 세로 166pixel


그림입니다.
원본 그림의 이름: mem000022740134.tmp
원본 그림의 크기: 가로 740pixel, 세로 70pixel









그림입니다.
원본 그림의 이름: mem000022740135.tmp
원본 그림의 크기: 가로 134pixel, 세로 44pixel

'기술자료 > 기술운영자료' 카테고리의 다른 글

Windows Releases 메모리 제한  (0) 2016.03.20
LVS(Linux Virtual Server)  (0) 2016.03.20
리눅스 OS 성능 개선 Tips  (0) 2016.03.20
리눅스 보안설정  (0) 2016.03.20
yum을 통한 리눅스 패키지 설치  (0) 2016.03.20