복제 재구축
CUBRID HA 환경에서의 복제 재구축은 다중 슬레이브 노드 구성 중 다중 장애 상황이나 일반적인 경우의 오류 상황으로 인해 CUBRID HA 그룹 내의 데이터가 동일하지 않은 경우에 필요하다. CUBRID HA 환경에서의 복제 재구축은 스크립트를 통해 제공된다. cubrid applyinfo 유틸리티는 복제 진행 상태를 확인할 수는 있지만 이를 통해 복제 불일치 여부를 직접 판단할 수는 없으므로, 복제 불일치 여부를 판단하려면 마스터 노드와 슬레이브 노드의 데이터를 직접 확인해야 한다.
복제 재구축을 위해서는 슬레이브 노드와 마스터 노드, 레플리카 노드에서 아래 환경이 동일해야 한다.
- CUBRID 버전
- 환경 변수($CUBRID, $CUBRID_DATABASES, $LD_LIBRARY_PATH, $PATH)
- 데이터베이스 볼륨, 로그 및 복제 로그 경로
- 리눅스 서버의 사용자 아이디 및 비밀번호
- ha_mode, ha_copy_sync_mode, ha_ping_hosts를 제외한 모든 HA 관련 파라미터
ha_make_slavedb.sh 스크립트
ha_make_slavedb.sh 스크립트를 이용하여 복제 재구축을 수행할 수 있다. 이 스크립트는 $CUBRID/share/script/ha에 위치하며, 복제 재구축에 들어가기 전에 다음의 항목을 사용자 환경에 맞게 설정해야 한다. 이 스크립트는 2008 R2.2 Patch 9 버전부터 지원하지만 2008 R4.1 Patch 2 미만 버전과는 일부 설정 방법이 다르며, 이 문서에서는 2008 R4.1 Patch 2 이상 버전에서의 설정 방법에 대해 설명한다.
- target_host: 복제 재구축을 위한 원본 노드의 호스트명으로, /etc/hosts에 등록되어 있어야 한다. 슬레이브 노드는 마스터 노드 또는 레플리카 노드로 복제 재구축이 가능하며, 레플리카 노드는 슬레이브 노드 또는 또 다른 레플리카 노드로 복제 재구축이 가능하다.
- repl_log_home: 마스터 노드의 복제 로그의 홈 디렉터리를 설정한다. 일반적으로 $CUBRID_DATABASES와 동일하다.
다음은 필요에 따라 선택적으로 설정하는 항목이다.
- db_name: 복제 재구축할 데이터베이스 이름을 설정한다. 설정하지 않으면 $CUBRID/conf/cubrid_ha.conf 내 ha_db_list의 가장 처음에 위치한 이름을 사용한다.
- backup_dest_path: 복제 재구축 원본 노드에서 backupdb 수행 시 백업 볼륨을 생성할 경로를 설정한다.
- backup_option: 복제 재구축 원본 노드에서 backupdb 수행 시 필요한 옵션을 설정한다.
- restore_option: 복제를 재구축할 슬레이브 노드에서 restoredb 수행 시 필요한 옵션을 설정한다.
- scp_option: 복제 재구축 원본 노드의 백업 볼륨을 슬레이브 노드로 복사해 오기 위한 scp 옵션을 설정할 수 있는 항목으로 기본값은 복제 재구축 원본 노드의 네트워크 부하를 주지 않기 위해 -l 131072 옵션을 사용한다(전송 속도를 16M로 제한).
스크립트의 설정이 끝나면 ha_make_slavedb.sh 스크립트를 복제 재구축할 슬레이브 노드에서 수행한다. 스크립트 수행 시 여러 단계에 의해 복제 재구축이 이루어지며 각 단계의 진행을 위해서 사용자가 적절한 값을 입력해야 한다. 다음은 입력할 수 있는 값에 대한 설명이다.
- yes: 계속 진행한다.
- no: 현재 단계를 포함하여 이후 과정을 진행하지 않는다.
- skip: 현재 단계를 수행하지 않고 다음 단계를 진행한다. 이 입력 값은 이전 스크립트 수행에 실패하여 재시도할 때 다시 수행할 필요가 없는 단계를 무시하기 위해 사용한다.
제약 사항
- 해당 스크립트는 expect와 ssh를 이용하여 원격 노드에 접속 명령을 수행하므로 원격 ssh 접속이 가능해야 한다.
- 복제 재구축 노드의 온라인 백업: 복제 재구축을 위해서는 복제 재구축 노드나 슬레이브 노드의 기존 백업을 이용할 수 없다. 따라서 스크립트 내부에서 자동으로 수행하는 마스터 노드의 온라인 백업을 이용해야 한다.
- 복제 재구축 스크립트 수행 중 오류 발생: 복제 재구축 스크립트는 수행 도중 오류가 발생해도 이전 상황으로 자동 롤백되지 않는다. 이는 복제 재구축 스크립트를 수행하기 전에도 슬레이브 노드가 이미 정상적으로 서비스하기 힘든 상황이기 때문이다. 복제 재구축 스크립트를 수행하기 전 상황으로 돌아가려면, 복제 재구축 스크립트를 수행하기 전에 마스터 노드와 슬레이브 노드의 내부 카탈로그인 db_ha_apply_info 정보와 기존의 복제 로그를 백업해야 한다.
주의 사항
복제 재구축을 수행하려면 원본 노드에 있는 데이터베이스 볼륨의 물리적 이미지를 복제 대상 노드의 데이터베이스에 복사해야 한다. 그런데 cubrid unloaddb는 논리적인 이미지를 백업하므로 cubrid unloaddb와 cubrid loaddb를 이용해서는 복제 재구축을 할 수 없다. cubrid backupdb는 물리적 이미지를 백업하므로 이를 이용한 복제 재구축이 가능하며, ha_make_slavedb.sh 스크립트는 cubrid backupdb를 이용하여 복제 재구축을 수행한다.
설정 예

- 마스터 노드 호스트 명: master
- 슬레이브 노드 호스트 명: slave
- 레플리카 노드1 호스트 명: replica1
- 레플리카 노드2 호스트 명: replica2
위와 같이 HA가 구성되어 있는 서버에서 슬레이브 노드(slave)에 문제가 발생하여 레플리카 노드를 이용해서 슬레이브 노드를 재구축하려면, 슬레이브 노드에 있는 ha_make_slavedb.sh의 target_host 값을 replica1 또는 replica2로 변경해야 한다. 만약 REPL_LOG_HOME의 값이 $CUBRID_DATABASES가 아니라면 repl_log_home의 값도 설정한다.
[slave]$ cd $CUBRID/share/script/ha
[slave]$ vi ha_make_slavedb.sh
target_host="replica2"
# if REPL_LOG_HOME != $CUBRID_DATABASES then
repl_log_home=$USER_SPECIFIC_REPL_LOG_HOME
변경 사항을 저장한 후 스크립트를 실행한다.
[slave]$ ./ha_make_slavedb.sh