heartbeat.

고가용성을 위한 서비스 어쩌구라는데...

복잡한건 싫으니 쉽게 가자.

Fail Over Cluster 다.

서버 하나가 죽었을때 비상용 서버로 연결하는거다.



수십대씩일때도 가능하겠지만, 이 포스팅으로 정리하려는건 서버가 2대일때 메인서버가 죽은 경우 서브서버로 연결하는 경우다.

----------------------------------------------------------------
환경 :

같은 서브넷에 속한 서버 2대
나같이 빈곤한 (ㅡ_ㅜ) 사람은 서버 1대에 랜카드 2개 준비하기도 까다롭고 서버간에 거리가 좀 될 경우 시리얼(RS232C) 케이블로 서버 두대를 연결하기도 골치아프다.

그래서 이런 상황이다.

A──스위치──B

뭐 간단한 환경 ~_~

스위치를 통해 외부와 연결되어있는거다.

각각 호스트네임과 아이피가 다음과 같다고 하자.
가상으로 줄 아이피 : 192.168.0.201
A : fz1 : 192.168.0.202 <- 메인
B : fz2 : 192.168.0.203 <- 비상용 서브

참고로, 각 서버를 노드로 칭할 수 도 있으니 노드라는 용어를 사용해도 헷갈리지 말자.
----------------------------------------------------------------

heartbeat설치는 그까이꺼 뭐 대충 소스로 깔든 rpm으로 깔든...

설정을 보자
다음 파일들이 필요하다.
/etc/ha.d/authkeys
/etc/ha.d/ha.cf
/etc/ha.d/haresources

나같은 경우 기본 스펙대로 rpm패키지를 만들어서 설치했기 때문에 /usr/share/doc/heartbeat-2.0.2/ 경로에 sample파일이 있었지만,
없어도 이 포스팅에선 별 관계 없다. 간단하기 땜시...
----------------------------------------------------------------

설정 내용은 다음과 같이 했다.
/etc/ha.d/authkeys
auth 1
1 crc

/etc/ha.d/ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
keepalive 2 # 노드간 beat 주기-초
deadtime 10 # 노드 사망 확인 시간-초
udpport 694 # 신호 보낼 포트
udp ech0 # 신호 보낼 장치
node fz1 # 각 노드
node fz2 # 각 노드

/etc/ha.d/haresources
fz1 192.168.0.202 # 메인서버

----------------------------------------------------------------
다 됐다.

이제 fz1 서버 부터 서비스를 시작하다.
/etc/init.d/heartbeat start (혹은 /etc/rc.d/init.d/heartbeat 라도)

꼭 그래야하는건 아니지만 메인 서버를 먼저 켜는게 좋은가보다.

그리고 fz2도 마찬가지로 시작한다.

이제 192.168.0.201으로 접속해보자. (두 서버가 사용할 가상 아이피다.)

192.168.0.201로 접속했을때 우선은 fz1으로 접속될 것이다.

이제 fz1을 끄거나 fz1의 heartbeat서비스를 중지 시켜보자.
/etc/init.d/heartbeat stop

그리고 10~12초 후 -_-a (신호주기2초+사망진단 10초) 192.168.0.201 로 접속하면
fz2 서버로 접속이 된다.

참고로 나같은 경우 httpd에 php로 echo exec("hostname"); 시켜서 확인했다.

----------------------------------------------------------------
주) 두 서버간에 해당 udp포트(이 포스트에서는 694)를 꼭 열어두자. 신호를 주고받지 못해 서로 사망했다고 생각하고 서로 아이피를 잡느라 난리가 날 수 있다.

----------------------------------------------------------------
참고 문헌
아이네트호스팅 - Linux Fail Over Cluster System 구축하기
http://www.inet.co.kr/faq/stories.php?story=03/10/17/7500350

KLTP - heartbeat 를 이용하여 고가용성(High Availability ) 서비스 구현하기
http://kltp.kldp.org/stories.php?story=03/01/07/7241711
신고
Posted by freezn