KWMBLOG

DB 이중화 작업(HA 구성) 1편 본문

리눅스/운영참고

DB 이중화 작업(HA 구성) 1편

KWMBLOG 2018. 12. 6. 10:27

이거 하면서 얼마나

개고생 + 삽질을 해댔나 모르겠다.

미래의 나를 위해 혹은 관심이 있는 사람들을

위해서 일단 작성한다.


1편에서는 기본설정, DRBD 설치,

DRBD 테스트 까지만 작성한다.




DB 이중화 작업에는 여러 종류가 있다.

여기서는 DRBD + HeartBeat + mon 을 이용하여

구성해 볼 것이다.


이것도 원래 안하고 있다가

예전에 회사 DB서버가 터지는 바람에

밤 열한신가에 겨우 퇴근한 기억이 있어서

바로 건의했고, 작업을 하게됐다.




우선 설치한 서버 환경이다.


active server : 192.168.1.2

stanby server : 192.168.1.5

virtual ip : 192.168.1.10

서버 OS : CentOS 6.5 64bit

mysql : 5.0.77


mysql 버전이 좀 많이 낮다.



1.1 hostname 변경


/etc/sysconfig/network 를 열어 

아래와 같이 수정해 준다.


active 설정


stanby 설정


HOSTNAME은 저대로 해도 되고,

다르게 해도 된다.


/etc/hosts를 열어 

아래와 같이 수정해 준다.


양쪽 다 동일하게 해도 되고,

stanby가 위로 가게 해도 된다.


그리고 node1, node2 는 network에서 설정한
HOSTNAME이다.


1.2 시간동기화


rdate -s time.bora.net

active, stanby 서버 두대 다 필수로 진행해준다.

crontab에 넣어두는 것을 추천한다.



1.3 selinux 설정


setforce 0

을 입력하여 selinux를 끈다.

끄지 않는편이 좋긴 하지만 방해가 될꺼 같아서 그냥 껏다.




2. DRBD 설치


여기서 active 서버만 작업하라거나

stanby 서버만 작업하라거나 하는

내용이 없으면

양측 서버 다 작업해야한다.



2.1 epel repo 설치


6.5버전은 없어서 그냥 6.8로 설치했다.

rpm -Uvh http://elrepo.org/elrepo-relase-6-8.el6.elrepo.noarch.rpm

를 입력해서 설치할 수도 있다.



2.2 drbd 설치


yum install kmod-drbd84 drbd84-utils


만약 yum에서 나오지 않는다면 

아래 파일을 이용하여 설치한다.


drbd84-utils-9.0.0-1.el6.elrepo.x86_64.rpm

kmod-drbd84-8.4.10-1.el6.elrepo.x86_64.rpm



2.3 모듈 적재


modeprob drbd

를 입력하여 커널에 모듈을 적재한다.



2.4 drbd 설정


/etc/drbd.d/data.res

를 생성한다.

data.res가 아닌 다른 이름으로 해도 무관하다.



이미지와 같이 내용을 입력해준다.

data.res 로 하지 않았다면

resource data에서 data부분을 

파일이름으로 수정해준다.


여기서 

on node1, on node2 부분은 앞에서 설정한 HOSTNAME을 적어주고, 

disk는 active서버와 stanby서버가 같이 사용할 파티션을 적어준다.

address에는 각각의 ip를 적어준다.



2.5 메타데이터 생성

drbdadm create-md data

여기서 data는 생성한 파일의
첫번째 라인 resource data부분의 data이다.

여기서 자주 발생하는 오류 모음
1. 'xxx' not defined in your config (for this host)
xxx.res 파일안에 있는 host를 찾지 못해서 발생하는 에러이다.
host 명이 정확한지 확인해 준다.

2. 'access beyond end device'
오류 메시지 중에 위의 메시지가 포함된 메시지가 있다면
해당 디스크(혹은 파티션)을 초기화 해줘야 된다.
dd if=/dev/zero of=/dev/sda9 bs=1

sda9는 data.res에서 설정한 disk 부분을 써주면 된다.
시간이 제법 걸리는데,
이 작업이 끝나면 2.5의 명령어를 다시 실행 해준다.

만약 여기서 sda9를 sda로 썼다면
재설치각이니 마음편히 OS 재설치를 진행한다.



2.6 DRBD 시작


/etc/init.d/drbd start 혹은 service drbd start


여기서 발생하는 오류!

오류 메시지에 degr-wfc-timeout이 포함된 에러가 있다면

위에 써놓은 양측 다 작업해야된다는 것을 안봤다는 뜻이기도 하고, 

서버 중 한대가 drbd가 실행중이 아니라는 뜻!

둘 중 한대가 실행되지 않아 기다리다 지쳐 종료되는 것이므로

반드시 두대 다 실행 해 준다.



2.7 primary 서버 지정 - active 서버에서만 작업


drbdadm primary -force data

여기서 data는 예상하다시피

data.res 의 resource data

이 data 이다.


이 작업은 디스크(혹은 파티션)을 동기화 하는 작업이고,

시간이 제법 걸린다.

(나같은 경우 30분 걸렸다.)


명령어를 입력하면 아무것도 안보이지만

백그라운드에서 열심히 작업중이니

참고 기다려 준다.


active 화면


stanby 화면


drbd-overview 혹은 cat /proc/drbd

로 확인 가능하고,

primary/secondary

반드시 보여야 한다.



2.8 fail-over 테스트


이제 설정은 끝났으니 장애발생 시 

조치가 되는지를 테스트해본다.


2.8.1 DRBD 블록장치 파일 포맷 - active 서버에서만 작업

mkfs.ext4 /dev/drbd0
을 입력해서 포맷을 진행해준다.
(active에서만 하라고 했지만, 어차피 stanby에서는 보이지도 않는다.)


2.8.2 mount

mkdir /data
mount /dev/drbd0 /data

순서대로 입력해서 drbd0 파티션을
mount 시켜준다.


2.8.3 테스트용 파일 생성 및 전환

echo "12345" > /data/test.txt
테스트라는 파일을 생성 후

active 서버 작업
umount /dev/drbd0
drbdadm secondary data

stanby 서버 작업
drbdadm primary data
mkdir /data
mount /dev/drbd0 /data
ls -al

이렇게 진행 했을 때, 
stanby서버의 /data 디렉토리에서
test.txt 파일이 보이면 연결은 제대로 됐다는 뜻이다.

만약 하드가 변경되었다면?
2.5단계부터 다시 진행하면 된다.
물론 교체한 하드가 OS영역이라면
처음부터 해야된다.

만약 다시 처음 환경으로 돌리려면?
바로 위에서 했던 active, stanby 작업을
반대로 해주면 된다.
stanby 서버에서 active 작업,
active서버에서 stanby작업
을 해주면 다시 원래대로 돌아간다.



여기까지는 그렇게 어려운 부분이 없다.
HeartBeat에서 개고생을 했으니..

3줄 요약
기본 환경설정을 한다.
DRBD설정 및 실행을 하고, fail-over 테스트를 해본다.
selinux 써서 하는 방법도 알아봐야겠다.


'리눅스 > 운영참고' 카테고리의 다른 글

ATA, ACHI 확인방법  (0) 2018.12.12
DB 이중화 작업(HA 구성) 2편  (0) 2018.12.06
프로세스의 메모리 사용량 확인  (0) 2018.12.04
Device is busy  (0) 2018.12.01
프로세스들의 기능이 갑자기 멈췄을 때  (0) 2018.12.01
Comments