High Availability - 하드우웨어, 소프트웨어, 네트워크 등에 장애가 발생해도 지속적인 서비스를 제공하는 기능 를 CUBRID에 적용한 것인 "CUBRID HA"이다.
CUBRID HA는 여러 서버 시스템에서 데이터베이스를 항상 동기화된 상태로 유지하여 서비스를 제공한다. 서비스를 수행 중인 시스템에 예상치 못한 장애가 발생하면 자동으로 다른 시스템이 서비스를 수행하도록 하여 서비스 중단 시간을 최소화한다.
각 Node들간 heartbeat메시지를 통해 이삼 감지를 수행한다.
heartbeat메시지는 HA기능을 제공하기 위한 핵심 구성 요소로, 각 Node가 다른 Node의 상태를 감시하기 위해 주고 받는 메시지 이다.
cubrid_ha.conf의 ha_port_id로 포트를 설정(default: 59901) 할 수 있으며, UDP포트로 주고 받는다.
서버와의 연결 생을 위한 TCP포트가 있는데, cubrid.conf의 cubrid_port_id로 포트(default: 1523) 이다.
서버와 로그를 복사하는 copylogdb의 연결을 위해 필요한 포트이다.
즉, cubrid_port_id - TCP와 ha_port_id - UDP가 각 Node간 오픈이 되어 있어야 CUBRID HA기능이 정상적으로 동작하게 된다.
CUBRID HA를 구성하기 전, 필히 해당 포트 오픈여부를 확인해야 한다.
포트를 확인하는 방법은 아래와 같다.
1. TCP 포트 - (TCP인 경우 -z)
Masternode> nc -z Slavenode-IP 포트
(예: nc -z 111.222.333.444 1523)
2. UDP 포트 - (UDP인 경우 -uz)
Masternode> nc -uz Slavenode-IP 포트
(예: nc -uz 111.222.333.444 59901)
Masternode와 Slavenode 양방향으로 모두 확인 되어야 한다.
* 기타 사항
UDP포트 오픈 후, nc -uz으로 확인하여도 각 Node간 식별이 안 되는 경우가 발생할 수 있다.
[정상적인 경우]
Test1 ~]$ cubrid hb status
HA-Node Info (current Test1, state slave)
Node Test3 (priority 32767, state relica)
Node Test2 (priority 2, state master)
Node Test1 (priority 1, state slave)
[비정상적인 경우]
Test1 ~]$HA-Node Info (current Test1, state slave)
Node Test3 (priority 32767, state unknown)
Node Test2 (priority 2, state master)
Node Test1 (priority 1, state slave)
UDP포트가 이상으로 발생하는 경우인데, 이러한 경우 'nc -ul 포트'로 정상적으로 패킷을 받고 있는지 확인하자
Test3 ~]$ nc -ul 포트
(예 : nc -ul 59901)
[정상적인 경우-아래와 같이 출력]
cubridTest3test cubridTest3test cubridTest3test cubridTest3test cubridTest3test cubridTest3test
[비 정상적인 경우 - 출력 내용 없음]