cubrid_ha.conf 파일은 $CUBRID/conf 디렉터리에 위치하며, CUBRID의 HA의 전반적인 설정 정보를 담고 있다.
CUBRID HA 그룹 내에서 사용할 그룹 이름과 failover의 대상이 되는 멤버 노드들의 호스트 이름을 명시한다. @ 구분자로 나누어 @ 앞이 그룹 이름, @ 뒤가 멤버 노드들의 호스트 이름이다. 여러 개의 호스트 이름은 콜론(:)으로 구분한다. 기본값은 localhost@localhost이다.
이 파라미터에서 명시한 멤버 노드들의 호스트 이름은 IP로 대체할 수 없으며, 반드시 /etc/hosts에 등록되어 있어야 한다. ha_mode를 on으로 설정한 노드는 ha_node_list에 해당 노드가 반드시 포함되어 있어야 한다. CUBRID HA 그룹 내의 모든 노드는 ha_node_list의 값이 동일해야 한다. failover가 일어날 때 이 파라미터에 설정된 순서에 따라 마스터 노드가 된다.
이 파라미터는 동적으로 변경할 수 있으며, 변경하면 cubrid heartbeat reload를 실행해야 한다.
CUBRID HA 그룹 내에서 사용할 그룹 이름과 failover의 대상이 되지 않는 멤버 노드들의 호스트 이름을 명시한다. @ 구분자로 나누어 @ 앞이 그룹 이름, @ 뒤가 멤버 노드들의 호스트 이름이다. 여러 개의 호스트 이름은 콜론(:)으로 구분한다. 기본값은 NULL이다.
그룹 이름은 ha_node_list에서 명시한 이름과 같아야 한다. 이 파라미터에서 명시한 멤버 노드들의 호스트 이름 및 해당 노드의 호스트 이름은 반드시 /etc/hosts에 등록되어 있어야 한다. ha_mode를 replica로 설정한 노드는 ha_replica_list에 해당 노드가 반드시 포함되어 있어야 한다. CUBRID HA 그룹 내의 모든 노드는 ha_node_list의 값이 동일해야 한다.
이 파라미터는 동적으로 변경할 수 있으며, 변경하면 cubrid heartbeat reload를 실행해야 한다.
CUBRID HA 그룹 내의 노드들이 heartbeat 메시지를 주고 받으며 노드 장애를 감지할 때 사용할 UDP 포트 번호를 명시한다. 기본값은 59901이다.
서비스 환경에 방화벽이 있으면, 설정한 포트 값이 방화벽을 통과하도록 방화벽을 설정해야 한다.
슬레이브 노드에서 failover가 시작되는 순간 연결을 확인하여 네트워크에 의한 failover인지 확인할 때 사용할 호스트를 명시한다. 기본값은 NULL이다.
이 파라미터에서 명시한 멤버 노드들의 호스트 이름은 IP로 대체할 수 있으며, 호스트 이름을 사용하는 경우에는 반드시 /etc/hosts에 등록되어 있어야 한다.
이 파라미터를 설정하면 불안정한 네트워크로 인해 상대 마스터 노드가 비정상 종료된 것으로 오인한 슬레이브 노드가 마스터 노드로 역할이 변경되면서 동시에 두 개의 마스터 노드가 존재하게 되는 split-brain 현상을 방지할 수 있다. 여러 개의 호스트를 콜론(:)으로 구분하여 지정할 수 있다.
트랜잭션 로그의 복사본을 저장하는 모드를 설정한다. 기본값은 SYNC이다.
SYNC, SEMISYNC, ASYNC를 값으로 설정할 수 있다. ha_node_list에 지정한 노드의 수만큼 설정해야 하고 순서가 같아야 한다. 콜론(:)으로 구분한다. 레플리카 노드는 이 값의 설정과 관계없이 항상 ASNYC 모드로 동작한다.
자세한 내용은 로그 다중화를 참고한다.
트랜잭션 로그의 복사본을 저장할 위치를 지정한다. 기본값은 $CUBRID_DATABASES이다.
자세한 내용은 로그 다중화를 참고한다.
CUBRID HA 모드로 구동할 데이터베이스 이름을 명시한다. 기본값은 NULL이다. 여러 개의 데이터베이스 이름은 쉼표(,)로 구분한다.
CUBRID HA의 복제 로그 반영 프로세스가 사용할 수 있는 최대 메모리를 설정한다. 기본값은 500이며, 단위는 MB이다. 이 값을 시스템이 허용하는 크기보다 너무 크게 설정하면 메모리 할당에 실패하면서 HA 복제 반영 프로세스가 오동작을 일으킬 수 있으므로, 메모리 자원이 설정한 값을 충분히 사용할 수 있는지 확인한 후 설정하도록 한다.
CUBRID HA의 복제 로그 반영 프로세스에서 에러가 발생해도 이를 무시하고 계속 복제를 진행하기 위해 이 값을 설정한다. 쉼표(,)로 구분하여 무시할 에러 코드를 나열한다. 이 설정 값은 높은 우선순위를 가지므로, ha_applylogdb_retry_error_list 파라미터나 "재시도 에러 리스트"에 의해 설정된 에러 코드와 값이 겹치면 이들을 무시하고 해당 에러를 유발한 작업을 재시도하지 않는다. "재시도 에러 리스트"는 아래 ha_applylogdb_retry_error_list의 설명을 참고한다.
CUBRID HA의 복제 로그 반영 프로세스에서 에러가 발생하면 해당 에러를 유발한 작업이 성공할 때까지 반복적으로 재시도하기 위해 이 값을 설정한다. 쉼표(,)로 구분하여 재시도할 에러 코드를 나열한다. 이 값을 설정하지 않아도 기본으로 설정된 "재시도 에러 리스트"는 다음 표와 같다. 하지만 이 값들이 ha_applylogdb_ignore_error_list에 존재하면 에러를 무시하고 계속 복제를 진행한다.
재시도 에러 리스트
에러 |
에러 코드 |
---|---|
ER_LK_UNILATERALLY_ABORTED |
-72 |
ER_LK_OBJECT_TIMEOUT_SIMPLE_MSG |
-73 |
ER_LK_OBJECT_TIMEOUT_CLASS_MSG |
-74 |
ER_LK_OBJECT_TIMEOUT_CLASSOF_MSG |
-75 |
ER_LK_PAGE_TIMEOUT |
-76 |
ER_PAGE_LATCH_TIMEDOUT |
-836 |
ER_PAGE_LATCH_ABORTED |
-859 |
ER_LK_OBJECT_DL_TIMEOUT_SIMPLE_MSG |
-966 |
ER_LK_OBJECT_DL_TIMEOUT_CLASS_MSG |
-967 |
ER_LK_OBJECT_DL_TIMEOUT_CLASSOF_MSG |
-968 |
ER_LK_DEADLOCK_CYCLE_DETECTED |
-1021 |
다음은 cubrid_ha.conf 설정의 예이다.
[common]
ha_node_list=cubrid@masterdb.cub:slavedb.cub
ha_db_list=testdb
ha_copy_sync_mode=sync:sync
ha_apply_max_mem_size=500
다음은 멤버 노드의 호스트 이름이 masterdb.cub이고 IP 주소가 192.168.0.1일 때 /etc/hosts를 설정한 예이다.
127.0.0.1 localhost.localdomain localhost
192.168.0.1 masterdb.cub