6. 데이터베이스 이중화#
이중화는 Active-Standby 또는 Active-Active 관계로 구성된 데이터베이스간에 트랜잭션 로그 기반으로 데이터를 서로 복제하는 기능이다.
Altibase의 이중화 기능을 사용하면 서버의 예기치 않은 종료가 발생했을 때 서비스의 중단 없이 시스템을 운영할 수 있다.
이 장에서는 이중화 기능에 대한 개괄적인 소개와 운영 방법을 소개한다.
이중화 정의#
Altibase의 이중화 기능은 서비스를 수행하고 있는 서버의 데이터에 대한 최신(up-to-date) 백업 데이터의 유지와, 서버의 예기치 않은 종료가 발생했을 때 즉시 대체 서버에서 동일한 데이터베이스로 서비스를 재개할 수 있는 무정지 운영환경을 제공하는 것을 목적으로 한다.
데이터베이스 이중화 기능의 올바른 운영을 위해 다음과 같은 순으로 설명한다.
-
데이터베이스 이중화 방법
-
이중화 기능의 사용 방법
자세한 내용은 Replication Manual을 참조한다.
이중화 기능의 운영 방법#
이중화 기능을 사용하기 위해서는 먼저 복제할 테이블을 정의하고, 이중화할 원격 서버와 이중화 이름, 프라이머리 키, 포트 번호 등의 이중화 속성들을 결정한 다음, 지역 서버와 원격 서버에서 이중화 객체를 만든다.
그 다음 원격 서버와 이중화를 시작한다.
양 방향일 경우 원격 서버에서도 이중화를 개시하면 양 방향으로 이중화를 할 수 있다.
이중화 기능의 사용 방법#
Altibase에서 데이터베이스 이중화를 수행하면, 지역 서버(local server)는 시스템에서 발생하는 데이터베이스 변경 내용을 원격 서버(remote server)로 전송하며, 원격 서버는 전송받은 내용을 자신의 데이터베이스에 반영한다.
지역 서버와 원격 서버는 서비스 쓰레드와 별도로 이중화 관리에 필요한 쓰레드를 구동한다. 지역 서버의 이중화 송신 쓰레드(sender)는 데이터베이스의 변경에 따라 발생하는 내용을 원격 서버로 전송하며, 원격 서버의 이중화 수신 쓰레드(receiver)는 전송받은 변경 내용을 자신의 데이터베이스에 반영한다.
또한 이중화 송,수신 쓰레드 (sender와 receiver)는 대응 서버의 정상 및 비정상 종료를 자동 감지하며 이에 상응하는 작업을 수행한다.
이중화 연결 생성#
지역 서버와 원격 서버에 동일하게 이중화 정의를 한다.
CREATE [LAZY|EAGER] REPLICATION replication_name [AS MASTER|AS SLAVE]
[OPTIONS options_name [option_name ... ] ]
WITH { 'remote_host_ip', remote_host_ port_no }
...
FROM user_name.table_name TO user_name.table_name
[,FROM user_name.table_name TO user_name.table_name]
...;
이중화 시작#
이중화를 시작한다.
ALTER REPLICATION replication_name SYNC [PARALLEL parallel_factor]
[TABLE user_name.table_name, … , user_name.table_name];
ALTER REPLICATION replication_name SYNC ONLY [PARALLEL parallel_factor]
[TABLE user_name.table_name, … , user_name.table_name];
ALTER REPLICATION replication_name START [RETRY];
ALTER REPLICATION replication_name QUICKSTART [RETRY];
이중화 종료#
이중화를 종료한다.
ALTER REPLICATION replication_name STOP;
이중화 리셋#
이중화 정보를 리셋한다. 이중화가 중지되어 있는 상태에서 이중화 정보를 리셋할 수 있다.
ALTER REPLICATION replication_name RESET;
이중화 테이블 삭제#
이중화 테이블을 삭제한다. 이중화가 중지되어 있는 상태에서 이중화 테이블을 삭제할 수 있다.
ALTER REPLICATION replication_name STOP;
ALTER REPLICATION replication_name
DROP TABLE FROM user_name.table_name TO user_name.table_name;
이중화 테이블 추가#
이중화할 테이블을 추가한다. 이중화가 중지되어 있는 상태에서 이중화할 테이블을 추가할 수 있다.
ALTER REPLICATION replication_name STOP;
ALTER REPLICATION replication_name
ADD TABLE FROM user_name.table_name TO user_name.table_name;
이중화 연결 삭제#
이중화 정의를 삭제한다. 이중화가 시작되어 있는 상태에서는 이중화 연결을 삭제하기 전에 이중화를 먼저 종료를 해야 한다.
ALTER REPLICATION replication_name STOP;
DROP REPLICATION replication_name;
DDL 수행 시 주의사항#
이중화로 운영중인 Altibase 서버에서 REPLICATION_DDL_ENABLE 프로퍼티를 1로 설정하면, 아래의 DDL구문을 실행할 수 있다.
-
ALTER TABLE table_name ADD COLUMN;
-
ALTER TABLE table_name DROP COLUMN;
-
ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT;
-
ALTER TABLE table_name ALTER COLUMN column_name DROP DEFAULT;
-
ALTER TABLE table_name TRUNCATE PARTITION;
-
ALTER TABLE table_name ALTER PARTITION;
-
ALTER TABLE table_name SPLIT PARTITION partition_name(condition) INTO
( PARTITION partition_name, PARTITION partition_name); -
ALTER TABLE table_name MERGE PARTITIONS partition_name, partition_name INTO PARTITION partition_name;
-
ALTER TABLE table_name ALTER TABLESPACE;
-
ALTER TABLE table_name ALTER PARTITION;
-
ALTER TABLE table_name DROP PARTITION partiton_name;
-
TRUNCATE TABLE;
-
CREATE INDEX;
-
DROP INDEX;
이중화에서 허용하는 DDL 목록과 제약사항은 Replication Manual을 참조한다.
그러나 이중화에서 허용하지 않는 DDL문은 절차에 따라서 이중화를 중지하거나 삭제한 후 사용하여야 한다. 즉 이중화 객체에 포함된 테이블에 대해서 이중화 운영 중에 허용되지 않는 DDL 문을 수행하기 위해서는, 반드시 두 서버에서 이중화를 중지하고, 해당 테이블을 이중화에서 삭제한 후 각각의 서버에서 DDL문을 수행해야 한다. 그리고 DDL문이 성공적으로 수행되면, 이중화에 해당 테이블을 다시 등록한 후 이중화를 시작한다.