HA 구성을 위해서는 active 서버 및 standby 서버 각각에서 CUBRID heartbeat 기능이 활성화되어야 한다. 브로커와 데이터베이스 서버를 하나의 장비에서 구성할 수 있으며, 이를 각각 분리된 시스템에 구성할 수도 있다.
HA 기능을 사용하기 위해서는 다음과 같이 설정한다.
active 및 standby 서버에서 동일한 사용자 계정(예: ha_user1)을 각각 생성하고, 해당 계정에서 CUBRID를 실행한다. 생성된 UNIX 사용자 계정이 HA 모드로 구동될 서버 노드 그룹 식별자가 된다.
HA 구동 스크립트는 CUBRID/share/init.d/cubrid-ha에 위치하며, 이를 active 및 standby 서버(/etc/init.d/)에 각각 준비한다.
하나의 호스트에서 여러 사용자 계정으로 HA를 구성하고 이를 시스템 서비스에 등록하려면, HA 구동 스크립트의 이름을 cubrid-ha-{unix user id}로 변경하고 각 스크립트를 /etc/init.d/ 디렉터리에 복사한다. 시스템 서비스에 등록하려면 root 권한이 필요하다.
[root@server_s1 init.d]# cd /home/ha_user1/CUBRID/share/init.d/
[root@server_s1 init.d]# cp cubrid-ha /etc/init.d/
active 서버에 DB(예: tdb01)를 새로 생성하고, 이를 standby 서버로 복사한다. 데이터 볼륨 복사, 백업/복구, unloaddb/loaddb 중 하나의 방법을 이용할 수 있다.
cubrid.conf 설정 파일에 HA 관련 파라미터를 추가해야 한다. 이때, HA 관련 파라미터는 반드시 [common] 섹션에 설정해야 하며, HA 모드로 구동하지 않을 데이터베이스에 대해서만 [@<database>] 섹션에서 ha_mode의 값을 no로 설정한다. 만약, [common] 섹션에 ha_mode의 값이 no이고, [@<database>] 섹션에 ha_mode의 값이 yes인 경우에는 에러가 출력된다.
#cubrid.conf
[common]
...
ha_mode = on
ha_port_id = 41523
ha_node_list = ha_user1@server_s1:server_s2
active 및 standby 데이터베이스 서버에 각각 준비된 HA 구동 스크립트 파일에서 아래 설정을 추가한다.
#cubrid-ha
CUBRID_USER = ha_user1
DB_LIST = 'tdb01'
# DB_LIST = 'tdb01 tdb02 tdb03'
브로커의 기본 동작 모드는 읽기 및 쓰기 연산을 요청하는 모드이며, 필요 시 cubrid_broker.conf의 ACCESS_MODE 파라미터를 이용하여 Read only 브로커나 Slave only 브로커로 설정할 수 있다.
#cubrid_broker.conf
ACCESS_MODE = RW|RO|SO
RW := Read-Write broker (기본값)
RO := Read-Only broker
SO := Slave-Only broker
구동 중인 브로커의 동작 모드는 cubrid broker status 유틸리티의 -f 인자를 사용하여 확인할 수 있다. 브로커 상태에 대한 자세한 내용은 브로커 상태 확인을 참고한다.
% broker1 - cub_cas [4430,40821] /home/CUBRID/log/broker/broker1.access /home/CUBRID/
JOB QUEUE:0, AUTO_ADD_APPL_SERVER:ON, SQL_LOG_MODE:ALL:100000
LONG_TRANSACTION_TIME:60, LONG_QUERY_TIME:60, SESSION_TIMEOUT:300
KEEP_CONNECTION:AUTO, ACCESS_MODE:RW
-----------------------------------------------------------------------------------------------------------------------
ID PID QPS LQS PSIZE STATUS LAST ACCESS TIME DB HOST LAST CONNECT TIME CLIENT IP
-----------------------------------------------------------------------------------------------------------------------
1 26946 0 0 51168 IDLE 2009/11/06 16:06:41 - - - 10.0.1.101
2 26947 0 0 51172 IDLE 2009/11/06 16:06:41 - - - 10.0.1.101
3 26948 0 0 51172 IDLE 2009/11/06 16:06:41 - - - 10.0.1.101
4 26949 0 0 51172 IDLE 2009/11/06 16:06:41 - - - 10.0.1.101
5 26950 0 0 51172 IDLE 2009/11/06 16:06:41 - - - 10.0.1.101
HA 구성에서 사용할 Active 서버 및 Standby 서버의 호스트 정보를 브로커 및 서버 시스템 내 데이터베이스 위치 정보 파일(databases.txt)에 추가해야 한다. Active 서버와 Standby 서버는 콜론(:)으로 구분하며, Standby 서버는 한 개 이상 추가 가능하고 각 호스트들 간의 구분 또한 콜론(:)으로 구분한다. 이처럼 동일한 데이터베이스에 대해 여러 개의 호스트를 지정하는 환경에서는, 클라이언트 서버 모드(CS 모드)로 csql, backupdb, applylogdb 등의 유틸리티 수행 시 대상 데이터베이스 이름 뒤에 반드시 호스트 이름(@host)을 지정해야 한다. 독립 모드(SA 모드)로 유틸리티를 수행하는 경우에는 대상 데이터베이스 이름 뒤에 호스트 이름을 지정할 수 없다.
#databases.txt
#db-name vol-path db-host log-path
tdb01 /home/db/db2 server_s1:server_s2 /home/db/db2
tdb02 /home/db/db1 server_s1:server_s2 /home/db/db1