DRBD를 이용한 HA Cluster 구축
HA Cluster (High AvailabilityCluster)
엔터프라이즈 컴퓨팅 환경에서 1년 중 시스템의 정지시간이
수분에서 한시간 이내의 무정지 서비스를 가능하게 해주는 클러스터
사용 목적
일반적으로 Fault Tolerance 시스템과는 달리 보편적인 하드웨어, 네트워크장비, 스토리지, UPS 등으로구성되며 서비스의 예정된 중단 혹은 불시의 중단에 의한 Downtime을 최소화 하여,
서비스 중단으로 인한 비용 손실의 최소화
DRBD (Distributed Replicated BlockDevice)
HA cluster 구축 하기 위해 디자인된 블럭 디바이스 이다. 이 방식은 Network Raid-1으로 동작을
하게 된다. Raid-1의 일반적인 구성은 데이터 백업(실시간) 미러링하는 구성이지만 여기서는 Network으로 통한 미러링 하게 된다.
(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
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
Sync완료 확인
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가 설정되는 것을확인할 수 있습니다.
테스트 진행
1. master 서버shutdown
2. 가상 IP에 ping check 해도 끊김없는 것을 확인할 수 있습니다.
master 서버 fail-over발생시, heartbeat에서 자동으로 master 서버를
기존 slave로 변경한 후drbd 파티션을 마운트 시키고, mysqld 서비스를 호출해 줍니다.
'기술자료 > 기술운영자료' 카테고리의 다른 글
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 |