HA 클러스터 구성 하는 방법 (heartbeat 이용)

중요한 서버의 경우 서버 장애에 대비하여 이중화 시킨다. 하드웨어는 CPU이중화, Power supply, Disk RAID구성(mirror), 스위치 장애 대비를 위해 Bonding 등의 하드웨어 이중화를 시켜 장애를 대비한다.

여러 가지 문제로 인해 서버가 불능상태가 되었을 때 빠른 복구를 포기하고 여분의 장비에 신속하게 넘기기 위해 구성하는 것이 HA(High availability) 클러스터 이다. 가장 쉽고 빠르게 구축 할 수 있는 heartbeat를 사용하여 HA구성을 해보도록 하겠다.

구성에 앞서 아래의 2가지 조건을 만족시켜야 된다.

*VIP(Service IP) 필요.
*Active 서버와 Standby 서버간에 heartbeat 점검을 위해 통신이 가능해야 한다.

HA 를 구성하는 근본적인 이유는 사용자 입장에서 봤을때, 서버는 항상 가동중에 있어야된다. 장애가 발생하였을 경우에도 사용자는 그것을 인지 하지 못한상태로 서비스를 받을수 있는 상태여야 된다.

이러한 상태를 유지하기 위해서는 VIP 라는 별도의 Service IP 가 있어야되며, Active 서버가 네트워크든 어플리케이션서비스든 어떠한 원인에서는 장애가 발생해도 즉각적으로 Standby 서버가 작동할수있어야된다.

HA 의 이러한 기본개념을 가지고, HeartBeat 라는 HA 구성 어플리케이션을 이용하여 지금부터 구성해 보도록 하겠다.

구성

<구성 환경>
플랫폼: VirtualBox 가상화
Ram: 1G
OS : CentsOS 6.5 64bit

서버 2대

eth0 : 192.168.0.70 VIP : 192.168.0.72
eth1 : 10.1.1.1 (내부망)


eth0 : 192.168.0.71 VIP : 192.168.0.73
eth1 : 10.1.1.2 (내부망)

heartbeat 설치(Active, Standby 서버 둘다)

heartbeat 패키지는 RedHat(CentOS6.5) 기본 repository에는 포함되어 있지 않다. 따라서 소스화일을 다운로드 받아 컴파일하거나, repo에 epel을 등록해서 rpm 설치하면 된다.

epel 등록(버전별로 선택한다. 여기서는 Cent6.5, 64bit 용 epel-release-6-8.noarch.rpm 을 다운로드 받아 설치했다.

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

rpm -Uvh epel-release-6-8.noarch.rpm
warning: epel-release-6-8.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
Preparing… ########################################### [100%]
1:epel-release ########################################### [100%]

yum repolist

Loaded plugins: fastestmirror, presto
Loading mirror speeds from cached hostfile
epel/metalink | 4.0 kB 00:00

  • base: mirror.yongbok.net
  • epel: ftp.riken.jp
  • extras: mirrors.grandcloud.cn
  • updates: mirror.yongbok.net
    epel | 4.3 kB 00:00
    epel/primary_db | 5.0 MB 00:05
    repo id repo name status
    base CentOS-6 – Base 6,346
    epel Extra Packages for Enterprise Linux 6 – x86_64 8,284
    extras CentOS-6 – Extras 17
    updates CentOS-6 – Updates 1,063
    repolist: 15,710

repository에 epeo이 등록되었다.

yum install heartbeat

혹시 아래와 같은 에러가 발생하면서 설치가 안될경우
/etc/yum.repos.d/ 에서 자신의 repo 파일을 수정해야된다.
파일을 열어보면 아래 옵션값으로 변경해줘야된다.

gpgcheck=0

설정(Active, Standby 서버 둘다)

/etc/ha.d에 ha.cf, authkey, haresources 세개의 화일을 만들어야 한다. 예제 화일이 /usr/share/doc/heartbeat-3.0.4 에 있으므로, 이것을 복사하여 사용한다.

cp /usr/share/doc/heartbeat-3.0.4/ha.cf /etc/ha.d/
cp /usr/share/doc/heartbeat-3.0.4/authkeys /etc/ha.d/
cp /usr/share/doc/heartbeat-3.0.4/haresources /etc/ha.d/

vi /etc/ha.d/authkeys

auth 2
2 sha1 HI!

화일속성을 600 으로 바꿔준다. 바꿔주지 않으면 아래와 같은 에러가 발생한다.

/etc/init.d/heartbeat start
Starting High-Availability services: INFO: Resource is stopped
Heartbeat failure [rc=6]. Failed.

heartbeat: udpport setting must precede media statementsheartbeat[1760]: 2013/01/09_13:03:13 ERROR: Bad permissions on keyfile [/etc/ha.d//authkeys], 600 recommended.
heartbeat[1760]: 2013/01/09_13:03:13 ERROR: Authentication configuration error.
heartbeat[1760]: 2013/01/09_13:03:13 ERROR: Configuration error, heartbeat not started.

chmod 600 /etc/ha.d/authkeys

이후 설정값을 미리 모두 입력하도록 한다.

vi /etc/ha.d/ha.cf

logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
initdead 120
bcast eth0
udpport 694
auto_failback on
node WEB1
node WEB2

위의 설정값에 대해서 간략히 설명해 보면,

keepalive 2 # 노드간 얼마나 자주 heartbeat를 주고 받을 것인지 설정(초)

deadtime 5 # 한쪽 노드가 죽었다고 판단하는 시간(초)

initdead 50 # 서버 시작후 대기시간(초)

udpport 694 # 통신을 위한 UDP포트

bcast eth0 # heartbeat를 보낼 NIC

node node1 # Master node (Active node)

node node2 # Slave node (Standby node)

auto_failback off # Master 장애로 Slave 작동시 Master 복구 후 자동으로 Fail Backup 여부

이렇게 된다.

vi /etc/ha.d/haresources

WEB1 IPaddr::192.168.0.72/24/eth0 \
IPaddr::10.1.1.3/8/eth1

WEB2 IPaddr::192.168.0.73/24/eth0 \
IPaddr::10.1.1.4/8/eth1

위 설정에서 “WEB1” 은 Active node를 의미한다. Active와 Standby 모두 똑같이 설정한다. “아이피”부분은 VIP를 기입하며, “/24″부분은 서브넷마스크이다. “eth0″은 VIP를 설정한 네트워크 장치명이다.

위에서 중요한부분이 VIP 인데. 네임서버에서 도메인연결을 할경우 여기에 등록된 VIP 를 이용하여야 된다. 이부분만 명심하면 될것이다. 서버의 네트워크 장애 등 시스템 장애가 발생할경우 자동으로 72번 IP 가 WEB2번 서버로 붙으면서 장애 발생을 방지한다.


또한 마지막 \ 부분은 서비스명은 입력하면되는데(예:httpd, mysqld 등) 어떠한 서비스가 장애가 발생할경우 바로 Standby 서버에서 작동될수있도록 할수도있다. 이부분은 참고하기 바란다.

이제 heartbeat 를 실행 한다. (꼭 동시에 실행하도록 한다. 너무 딜레이가 생기면, ip가 꼬여버리는 일이 생긴다)

/etc/init.d/heartbeat start

Starting High-Availability services: INFO: Resource is stopped
INFO: Resource is stopped
Heartbeat failure [rc=6]. Failed.

heartbeat: udpport setting must precede media statementsheartbeat[8314]: 2015/09/09_17:42:09 info: Pacemaker support: false
heartbeat[8314]: 2015/09/09_17:42:09 ERROR: Current node [localhost.localdomain] not in configuration!
heartbeat[8314]: 2015/09/09_17:42:09 info: By default, cluster nodes are named by uname -n and must be declared with a ‘node’ directive in the ha.cf file.
heartbeat[8314]: 2015/09/09_17:42:09 info: See also: http://linux-ha.org/wiki/Ha.cf#node_directive
heartbeat[8314]: 2015/09/09_17:42:09 WARN: Logging daemon is disabled –enabling logging daemon is recommended
heartbeat[8314]: 2015/09/09_17:42:09 ERROR: Configuration error, heartbeat not started

에러메시지가 발견되었다. 이유는 간단하다. 서버의 hostname 이 잘못되었기 때문이다. 시스템에 바로 hostname 을 적용시켜보도록 하겠다.

echo “WEB1” > /proc/sys/kernel/hostname

이곳에 입력해놓고,

vi /etc/sysconfig/network
이곳에서도 함께 추가해주면 된다.

이렇게 함으로써 HA 구성을 완료하였다.

Leave a Comment