복제 기능의 특징

단방향 복제

CUBRID의 복제는 단방향 복제만을 지원한다. 즉, 다음 그림과 같이 마스터 데이터베이스의 경우에는 읽기/쓰기 연산이 모두 가능하나 슬레이브 데이터베이스에는 읽기 연산만을 허용한다. 단방향 복제 방식을 이용한 1:N 구성이 가능하다.

단방향 복제

동기식/비동기식

데이터를 복제하는 기법으로는 마스터의 데이터를 갱신하는 작업과 슬레이브의 데이터를 동일하게 갱신하는 작업이 하나의 트랜잭션으로 처리되어 데이터의 일관성을 보장하는 동기식 복제(synchronous replication)와 이 두 작업을 분리하여 수행하여 비동기식 복제(asynchronous replication)가 있다.

비동기식 복제

트랜잭션 단위의 복제

CUBRID는 트랜잭션 로그 기반으로 복제를 수행한다. 트랜잭션 로그는 데이터베이스에 대한 모든 쓰기 연산에 대해 로깅을 하여 시스템 장애 시 복구를 가능하게 한다. CUBRID는 트랜잭션 로그를 분석하고, 마스터 데이터베이스에서 변경된 항목들을 추출하여 마스터 데이터베이스에 변경된 순서대로 슬레이브 데이터베이스에 반영한다. 따라서 복제에 대해 항상 트랜잭션의 일관성을 보장할 수 있다.

온라인 복제

CUBRID는 마스터데이터베이스 시스템의 중지 없이 온라인으로 슬레이브 데이터베이스를 동기화하여 복제를 구성할 수 있다.

스키마 독립성

슬레이브 데이터베이스의 유연성을 위해 마스터 데이터베이스와 독립적으로 스키마를 정의할 수 있다. 마스터 데이터베이스로부터 복제 받는 클래스 외 별도의 클래스, 인덱스, 사용자 계정, 트리거를 생성할 수 있으며 추가로 생성된 클래스에 대해서는 쓰기 연산도 가능하다. 예를 들어, 마스터 데이터베이스로부터 class1, class2를 복제 받으면서 슬레이브 독자적으로 class3, class4를 정의하여 운영할 수 있다.

최대한 슬레이브 데이터베이스의 유연성을 제공하기 위해 인덱스의 경우에는 기본키 인덱스를 제외한 모든 인덱스는 복제 대상에서 제외된다. 슬레이브 시스템의 목적에 따라 관리자가 적절하게 슬레이브 데이터베이스의 인덱스를 별도로 관리해야 한다. 예를 들어, 슬레이브 시스템을 데이터 분석용으로 구축한 경우에는 온라인 트랜잭션 처리용으로 구축된 마스터 데이터베이스와는 다른 인덱스 설계가 이루어져야 한다.

사용자 계정의 경우에도 마스터 데이터베이스의 계정은 복제되지 않는다. 슬레이브 자체적으로 계정을 관리해야 하며 특히 쓰기 계정 관리에 유의해야 한다. 초기 슬레이브 데이터베이스를 구성할 때에 사용하는 repl_make_slavedb 유틸리티에서 복제 대상 클래스의 소유자 계정을 모두 복제용 계정으로 변경하므로, 이후 추가되는 계정은 반드시 읽기만 가능한 계정으로 관리하는 것이 바람직하다.

마스터 데이터베이스에 정의된 트리거로 인한 데이터 변경 내역은 이미 마스터 데이터베이스의 트랜잭션 로그에 반영이 되었으므로 동일한 트리거가 슬레이브 데이터베이스에 정의되어 있으면 복제 시 오류가 발생하게 된다. 따라서 마스터 데이터베이스의 트리거는 복제 대상에서 제외되며 초기 슬레이브 데이터베이스 구성 시 모든 트리거는 삭제된다. 그러나, 슬레이브 데이터베이스의 활용 목적에 따라 마스터 데이터베이스와는 별도로 트리거가 필요하다면 독립적으로 트리거를 정의하여 사용할 수 있지만 이 트리거의 동작 범위가 복제 대상 클래스가 되지 않아야 한다. 예를 들어 class1, class2가 마스터로부터 복제 받는 클래스이고 class3, class4가 슬레이브 자체적으로 관리하는 클래스인 경우 class1에 데이터가 삽입되면 class3에도 동일한 데이터를 삽입하는 트리거는 슬레이브 자체적으로 정의하여 운영하여도 무방하다. 그러나 class2에 데이터가 삭제되는 경우 class1에 데이터를 삽입하는 트리거의 경우에는 복제 시 오류를 발생하게 된다.

복제 대상 오브젝트

오브젝트

복제여부

데이터

O

인덱스

O

트리거

X

사용자계정

X

스키마

O

기본 키(Primary Key)의 사용

CUBRID의 복제는 기본 키 기반으로 이루어진다. 즉, 슬레이브 데이터베이스에 반영할 데이터 항목을 식별하기 위한 메커니즘으로 기본 키가 사용된다. 따라서 기본 키가 설정되지 않은 클래스는 복제 대상에서 제외된다. 

현재 CUBRID의 복제는 데이터베이스 단위이나 데이터베이스 내에 존재하는 클래스 중 기본 키가 설정된 클래스만이 슬레이브로 복제 가능하다. 기본 키 설정에 대해서는 테이블 생성의 제약 조건을 참조한다.

연쇄 복제(Chained Replication)

계층적 구조로 복제를 구성하는 방식을 연쇄복제(chained replication)이라고 한다.  즉, 슬레이브 데이터베이스가 동시에 마스터 데이터베이스가 되어 복제 받은 데이터 변경 사항을 다른 슬레이브 데이터베이스로 전달할 수 있다.

연쇄 복제

CUBRID에서는 이러한 방식의 복제 구조를 지원한다. 이 경우, 두 번째 마스터/슬레이브에 있는 마스터는 읽기만 가능하다.

복제 그룹(Replication Group)

하나의 마스터 데이터베이스에서 N개의 슬레이브 데이터베이스 구성을 지원한다. 이 때 관리자는 마스터 데이터베이스의 일부만 복제 그룹(Replication Group)으로 지정하여 슬레이브 데이터베이스로 복제할 수 있다.

복제 그룹

이러한 방식은 슬레이브 서버를 특정 용도로 구성하고자 할 경우 유용한 방식이다. 예를 들어, 통계 데이터만 복제하여 분석 서버로 구성하고자 할 경우 복제 그룹을 통해 구성할 수 있다.