태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

Heartbeat를 통한 HA(High availability) 구성

Posted by Klero
2015.06.24 10:41 리눅스

Heartbeat를 통한 HA(High availability) 구성 후 httpd 서비스를 설치하여 파이어폭스로 확인하기


Heartbeat 은 두 서버를 노드로 등록하여 가상의 IP 를 MasterSlave가 서로 주고 받는다.

Master 노드가 가상IP 를 할당 받았다가 문제가 발생시에 Slave 노드가 이어 받는다.

이때 특정디바이스를 마운트 하거나 특정 서비스를 시작 시킬수도 있다.





CentOS 에서 설치해 보겠다.  CentOS 6.5 로 2대 준비했다.


CentOS 1 = Master

CentOS 2 = Slave


1. 호스트네임 변경


CentOS 1 # vi /etc/sysconfig/network 에서 HOSTNAME=kim1

CentOS 2 # vi /etc/sysconfig/network 에서 HOSTNAME=kim2 



 




2. /etc/hosts 파일 수정


CentOS 1 # vi /etc/hosts에서 192.168.100.177 kim1 

CentOS 2 # vi /etc/hosts에서 192.168.100.178 kim2 


 




3. 변경된 호스트네임 확인


reboot 하면 터미널에서 localhost가 바뀐 것을 볼 수 있다.

# uname -n or # hostname 명령어로 확인


 




4. 타임서버 동기화


CentOS 1 # rdate -s time.bora.net

CentOS 2 # rdate -s time.bora.net


rdate 명령이 작동 안된다면.. yum install rdate 로 설치한다. 

서버 시간은 계속 어긋날수 있으므로 실제 서비스 환경에서는 크론을 사용하여 매일 실행한다.

당장은 필요없지만 해주면 좋다.





5. 저장소 추가후 Heartbeat 설치


CentOS 1,2 동일 # rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

CentOS 1,2 동일 # yum -y install heartbeat*





6. 환경설정파일 복사


CentOS 1,2 동일 # rpm -q heartbeat -d : 하트비트가 설치된 경로 확인

CentOS 1,2 동일 # cd /usr/share/doc/heartbeat-3.0.4/

CentOS 1,2 동일 # cp ha.cf haresources authkeys /etc/ha.d/  : 설정파일 샘플 복사





7. Ha.cf 설정


CentOS 1,2 동일 # vi /etc/ha.d/ha.cf


파일의 끝에 설정하면 된다.

디버깅용 로그

debugfile /var/log/ha-debug.log

기타 로그

logfile /var/log/ha.log

노드간 체크 시간(두 노드간에 얼마나 자주 heartbeat를 주고받을 것인가를 설정)

keepalive 2

호스트가 죽었다고 판단하는 시간

deadtime 30

자동 복구 On(한 노드가 서비스 하다가 죽었을 때 새로운 노드로 자원이 이동)

auto_failback on

노드간 체크에 사용할 인터페이스(heartbeat 를 보낼 인터페이스 설정)

bcast eth0

노드 등록

node kim1  # master

node kim2  # slave

UDP 에 사용할 포트(통신포트 설정)

udpport 694





8. 로그를 위한 파일 생성


CentOS 1,2 동일 # touch /var/log/ha-debug.log

CentOS 1,2 동일 # touch /var/log/ha.log





9. 방화벽 설정


UDP 포트에 대한 방화벽은 해제한다.

CentOS 1,2 동일 # vi /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m udp -p udp --dport 694 -j ACCEPT

CentOS 1,2 동일 # service iptables restart

CentOS 1,2 동일 # service iptables save





10. haresources 설정


CentOS 1 # vi /etc/ha.d/haresources

파일의 끝에 설정하면 된다.


kim1 IPaddr2::192.168.100.179/24/eth0:0/192.168.100.255 httpd

자신의 호스트/IPaddr2/가상IP/클래스/인터페이스/브로드캐스트 서비스할 데몬


CentOS 2 # vi /etc/ha.d/haresources

파일의 끝에 설정하면 된다.


kim2 IPaddr2::192.168.100.179/24/eth0:0/192.168.100.255 httpd

자신의 호스트/IPaddr2/가상IP/클래스/인터페이스/브로드캐스트 서비스할 데몬


(*참고 : 리눅스에서 가상 IP를 설정해 하나의 IP를 더 가지게 할 수 있다.

물론 LAN 포트는 하나이다. 바로 eth0:0이다. 물리적인 정보는 eth0과 동일하다.

eth0:1 , eth0:2 이런식으로도 가능하다.

# ifconfig eth0:1 192.168.100.123 입력하고 ifconfig 입력하면 확인 할 수 있다.)



 


11. authkeys 설정


authkeys : 보안수준을 설정(노트간의 인증방법 지정)

ex) auth 1

1 crc 

#2 sha1 HI! - 보안신경 쓸 때 auth 2로 설정

#3 md5 Hello! - 보안신경 쓸 때 auth 3로 설정 (md5가 더 강력한 보안설정??)

위와 같이 crc를 auth 1로 설정을 할 경우 보안신경을 쓰지않는다.


여기서는

CentOS 1,2 동일 # vi /etc/ha.d/authkeys

auth 2

2 sha1  kim - 내맘대로 키 설정(kim)


CentOS 1,2 동일 # chmod 600 /etc/ha.d/authkeys  - 권한변경(필수)






12. 공용 서비스할 데몬 파일의 링크 생성


CentOS 1,2 동일 # ln -s /etc/rc.d/init.d/httpd /etc/ha.d/resource.d/httpd





13. linux apache 설정 


CentOS 1,2 동일 # vi /etc/httpd/conf/httpd.conf

ServerName 192.168.100.179


CentOS 1,2 동일 # system-config-firewall에서 HTTP 방화벽 열기

CentOS 1,2 동일 # /etc/rc.d/init.d/httpd start





14. HA 테스트


CentOS 1 먼저 실행(마스터) # service heartbeat start

CentOS 1 (마스터) # tail -f /var/log/ha-debug

CentOS 1 (마스터) # tail -f /var/log/ha-log

heartbeat 실행 하면 위 두개의 로그에서 데몬 및

설정 값이 정상 작동 된것을 확인 할수 있다.


CentOS 2 실행(슬레이브) # service heartbeat start

CentOS 2 (슬레이브) # tail -f /var/log/ha-debug

CentOS 2 (슬레이브) # tail -f /var/log/ha-log

heartbeat 실행 하면 위 두개의 로그에서 데몬 및

설정 값이 정상 작동 된것을 확인 할수 있다.


상태 확인

CentOS 1,2 동일 # ifconfig

eth0:0이 추가된 것을 볼 수 있다.



15. RHEL에서 테스트


리눅스를 하나 더 실행해서 HA가 웹에서 잘 작동하는지 테스트 해보자





16. CentOS 1(마스터)의 heartbeat 서비스 중지 후 RHEL에서 확인


CentOS 1 # service heartbeat stop







* HeartBeat Master 변경하기 *

# cd /usr/share/heartbeat

# ls -al 

# ./hb_standby    <=서버를 스탠바이로 전환한다.?

# ./hb_takeover   <=서버를 액티브로 전환한다.?

이 댓글을 비밀 댓글로
    • joo
    • 2015.12.08 17:37
    안녕하세요.
    글 정말 잘보고 도움되었습니다.
    그런데 제 CentOS 1 = Master 는 centos 64비트이고 알려주신대로 하니 heartbeat도 잘 실행되고 eth0:0도 잘 추가 됩니다.
    하지만 CentOS 2 = Slave 는 32비트인데 알려주신대로 하니 heartbeat를 실행하면
    starting high-availability services: Info: Resource is stopped Done. 라고 뜨고
    그리고 eth0:0도 추가가 안됩니다ㅠㅠ
    제가 리눅스 왕초보라서 그런데 이유를 잘 모르겠습니다.
    혹시 원인을 아시면 제발 알려주세요.
    만약 32비트인게 문제이면 heartbeat 32비트를 설치하는 방법도 알려주세요.
    • 안녕하세요?
      죄송하지만 저도 32bit로는 안해봐서 잘 모르겠습니다. ㅠㅠ
    • 질문이요..
    • 2016.03.04 15:58
    ubuntu에서 auto_failback off로 설정하고 서버 2대로 테스트하고 있습니다. 살아있는 쪽이 무조건 유지하게 설정하고 있는데
    deadtime이 제대로 동작하지 않는것 같습니다, service heartbeat stop 시키면 1초도 안되서 넘어가네요.. 원래 그런가요,?
    테스트를 잘못하고 있는 건가요..