Heartbeat 에 대해 간단히 설명하면... 사전적 의미는 심장박동
내가 하려는 작업으로 의미를 바꿔보면 시스템의 정상작동 여부를 판단해서 대기중인 대체시스템으로 서비스 제공을 하기위한 모듈이다.
HeartBeat를 설치하면 두 서버 사이에 즉, Primary로 설정된 서버와 Standby로 설정된 서버 사이에 주기적으로 메시지를 교환해 서버의 상태를 확인한다.
HeartBeat는 Active로 사용 중인 Primary 서버와 Passive 상태인 Standby 서버 사이에 IP 관리 기능의 일환으로, VIP를 사용해 Active 상태인 Primary 서버에 장애가 일어나더라도 Passive 상태인 Standby 서버를 이용해 서비스가 진행될 수 있도록 한다.
하지만 Heartbeat에 최대단점은 리눅스에서만 운영가능하고, 시스템 레벨에서 작동하기에 시스템의 다운/업 여부는 가능하나 어플리케이션 러벨에서 서비스 Fail-Over 는 판단하지 못한다.
따라서 mon 데몬과 같이 사용하면 어플리케이션 수준에 Fail-Over 판단여부가 가능하다.
Heartbeat 는 YUM으로 손쉽게 설치 가능하다.
[root@node1 root]# rpm -qa |grep heartbeat
heartbeat-pils-2.1.3-3.el5.centos
heartbeat-devel-2.1.3-3.el5.centos
heartbeat-gui-2.1.3-3.el5.centos
heartbeat-2.1.3-3.el5.centos
heartbeat-ldirectord-2.1.3-3.el5.centos
heartbeat-stonith-2.1.3-3.el5.centos
기본 예제파일을 가지고 설정파일을 수정해서 이용한다.
/usr/share/doc/heartbeat-2.0.8/authkeys # 노드간의 인증방법 지정
/usr/share/doc/heartbeat-2.0.8/ha.cf # primary/secondary 간의 필요한 기본설정파일
/usr/share/doc/heartbeat-2.0.8/haresources # 노드간에 공유할 자원과 스크립트를 지정
복사
[root@node1 root]# cp /usr/share/doc/heartbeat-2.0.8/authkeys /etc/ha.d/
[root@node1 root]# cp /usr/share/doc/heartbeat-2.0.8/ha.cf /etc/ha.d/
[root@node1 root]# cp /usr/share/doc/heartbeat-2.0.8/haresources /etc/ha.d
설정파일
[root@node1 root]# cat > /etc/ha.d/authkeys
auth 1
1 crc
[root@node1 root]# chmod 600 /etc/ha.d/authkeys
[root@node1 root]# cat > /etc/ha.d/haresources
node1 218.236.115.216
[root@node1 root]# cat ha.cf
keepalive 2
deadtime 5
warntime 10
initdead 10
udpport 694
logfile /var/log/ha-log
bcast eth0
auto_failback on
node node1
node node2
[root@node1 root]# cat > /etc/hosts
218.236.115.225 node1
218.236.115.226 node2
Heartbeat 설정을 이로써 끝이다....
이제는 mon 데몬을 이용해서 모니터링하다가 서비스가 체크 되지 않았을 경우에 대비한 설정이다.
- node1(Master)은 자기자신을 모니터링한다.
그러다가 서비스가 체크되지 않았을경우에 httpd-down.alert 경고를 실행시킨다.
마스터의 heartbeat 데몬을 중지시킨다
[root@node1 mon]# cat /usr/local/src/mon/alert.d/httpd-down.alert
#!/bin/bash
echo "`date` $*" >> /var/log/echo.alert.log # 로깅
# Heartbeat daemon check
PSID=$(ps ax |grep heartbeat |grep -v grep | awk '{print $1}')
if [ "$PSID" == "" ]; then
exit
else
/etc/init.d/heartbeat stop
fi
- /etc/mon.cf
cfbasedir = /etc/mon
alertdir = /usr/local/src/mon/alert.d
mondir = /usr/local/src/mon/mon.d
maxprocs = 20
histlength = 100
randstart = 30s
authtype = getpwnam
hostgroup node1 218.236.115.225 # 자기자신 모니터링
watch node1
service http # 80번 서비스
interval 5s
monitor http.monitor
period wd {Sun-Sat}
alert httpd-down.alert "node1 server httpd is down!!"
upalert echo.alert "node1 server is live!!"
Master 서버의 httpd 데몬을 내리면 로깅과 함께 Heartbeart 데몬이 죽게되고... Slave 서버에서는 Master 의 Heartbeat UDP 포트가 연결이 되지 않아 시스템에 문제가 생긴걸로 판단하고 VIP 를 가져가서 심는다..
[복구] Master 장비에 장애가 복구가 되었을 경우에는... 해당 서비스 포트에 정상작동여부를 확인하고 Heartbeat 데몬을 다시 살리면 다시 마스터에서 운영하게 된다.