ALTIBASE HDB 5.3.3 기초강좌
이중화 특징 0 0 40,431

by Altibase 이중화 REPLICATION [2012.04.14]


  다른 DBMS 에서도 SHARED NOTHING ARCHITECTURE에 기반한 기술을 제공하고 있지만 ALTIBASE HDB 에서 제공하는 이중화는 어떤 특징이 있는지 살펴보도록 하겠습니다.

이중화 특징

TCP/IP 네트워크 기반
  • - 네트워크를 통해 데이터를 복제하는 방식이기 때문에 별도의 설치, 비용 없이 이중화가 가능합니다.
  • - 네트워크 성능이 이중화 성능에 영향을 미치기 때문에 Giga bit 랜은 필수 요건입니다.
  • - 거리에 상관없이 네트워크를 통해 이중화가 가능합니다. (예: 서울-부산)

이 기종 OS 간 이중화 지원
  • - OS bit, CPU endian 과 관계 없이 이중화가 가능합니다.
  • - OS의 종류와 관계 없이 이중화가 가능합니다. (예: 윈도우-리눅스)

리두로그 기반의 이중화
  • - 데이터 복제 시 리두로그를 실시간 전송하여 레코드 단위의 이중화를 합니다.
  • - 리두로그 기반이기 때문에 Active-Active, Active-Standby 형태의 구성이 가능합니다.

테이블 단위 이중화
  • - DB 전체에 대한 이중화가 아니라 필요한 테이블만 이중화하여 관리할 수 있습니다.
  • - DB 운영 중에 이중화 중인 테이블을 제거하거나 추가할 수 있습니다.

복제 방식
  • - 데이터 복제 시 성능을 우선하여 복제하는 Lazy(Async) 방식과 안정성을 우선하여 복제하는 Eager(Sync) 방식을 모두 제공합니다.
  • - 복제 방식은 DB 전체에 한 가지만 사용할 수 있는 것이 아니라 이중화 객체 별로 지정하여 사용할 수 있습니다.

네트워크 장애 감지 및 다중 IP 지원
  • - 물리적인 네트워크 손상을 감지하기 위한 별도의 쓰레드를 운영하고 있습니다.
  • - 쓰레드가 네트워크 장애를 감지하면 이중화 객체에 설정된 여러 개의 IP중 하나로 절체하여 이중화를 계속적으로 사용할 수 있게 합니다.

자동 회복
  • - 리두로그 전송 시 Sender 와 Receiver는 각각 전송한 로그 번호와 전송 받은 로그 번호를 기록하기 때문에, 장애가 발생해서 이중화가 끊어졌다가 다시 연결되면 장애 발생 이전의 로그 번호를 찾아서 다음 로그부터 전송합니다.

Conflict Resolution 제공
  • - 이중화를 사용하면 Data Conflict 가 발생할 수 있기 때문에 이를 해결하기 위한 3 개의 Scheme 을 제공합니다
  • - User-oriented scheme, Timestamps-based scheme, Master-Slave scheme

1:32 이중화 제공
  • - 하나의 ALTIBASE HDB 가 32 개의 ALTIBASE HDB와 이중화로 구성하여 사용할 수 있습니다.

이중화 객체

  이중화를 사용하기 위해서는 반드시 이중화 객체를 DB에 생성한 뒤, 이중화 객체에 이중화 하기 위한 테이블들을 추가해줘야 합니다. 이런 이중화 객체를 생성할 때, 몇 가지 주의해야 할 사항들이 있습니다.

  • [그림] 이중화 객체
  • 이중화 객체

동일한 이름의 이중화 객체
  • - 이중화 구성하기 위한 Local 서버와 Remote 서버에 동일한 이름의 이중화 객체를 생성해야 합니다.
  • - DB에 여러 개의 이중화 객체를 생성할 수 있는데, 그 중에서 Local 서버와 Remote 서버에 동일한 이름으로 생성된 객체를 통해서만 1:1로 복제가 진행됩니다.
  • - 그림에서 DB1과 DB2에 각각 REP_OBJECT_XY 의 이름으로 객체가 생성됨

이중화 PORT와 IP 식별
  • - 이 때, Local 서버에서는 Remote 서버의 정보를, Remote 서버에서는 Local 서버의 정보를 지정해야 합니다.
  • - 이중화 객체 생성 시에 이중화를 할 대상 서버의 IP, REP_PORT 를 지정해줘야 합니다.
  • - 그림에서 DB1의 이중화 객체에는 DB2 IP와 REP_PORT를, DB2의 이중화 객체에는 DB1의 IP와 REP_PORT 를 지정함

객체 별로 다중 IP, 복제 방식 지정
  • - DB를 설치한 서버에 IP가 여러 개 할당되어 있다면 이중화 객체 생성 시, 하나의 객체에 여러 개의 IP를 지정할 수 있습니다. 다중 IP를 사용하면 네트워크 장애가 발생했을 때, 네트워크 절체를 통하여 신속하게 대처할 수 있습니다.
  • - 이중화 구성 시 사용할 수 있는 두 가지 복제 방법을 객체 별로 다르게 지정하여 사용할 수 있습니다. 그래서 실시간으로 처리 되어야 하는 테이블들을 하나의 객체로 묶고, 성능 보다는 데이터의 안정성이 중요한 테이블들도 따로 하나의 객체로 묶어서 각각 복제 방식을 지정한다면 성능과 안정성을 모두 만족할 수 있는 구성을 할 수 있습니다.

이중화 대상 테이블
  • - 이중화 객체에 포함하여 사용하는 테이블을 이중화 대상 테이블이라고 합니다.
  • - 이중화 객체에 테이블을 포함시키기 위해서는 Local 서버와 Remote 서버에 동일한 스키마의 테이블이 존재해야 하고, 각 테이블에는 Primary Key가 반드시 있어야 합니다.

이중화 객체 생성 구문

 
CREATE [LAZY|EAGER] REPLICATION replication_name [AS MASTER|AS SLAVE]
[OPTIONS options … [options … ] ] 
WITH {‘remote_host_ip ‘ , remote_replication_port_no }
FROM user_name.table_name TO user_name.table_name [WHERE … ] 
[, FROM user_name.table_name TO user_name.table_name [WHERE … ] ] ;
    

  • - LAZY, EAGER : 이중화 객체의 복제 방식이다. 생략 시 lazy로 지정된다.
  • - MASTER, SLAVE : 이중화 객체가 Master 인지 Slave 인지를 지정한다. 아무것도 지정하지 않으면 미지정의 의미인 0으로 메타테이블에 저장된다. (Master:1, Slave:2)
  • - options : 이중화 객체에 대한 부가기능을 지정하는 것으로 이중화 오프라인과 같은 옵션을 지정할 수 있다.
  • - replication_name : 이중화 객체의 이름을 명시한다. 이중화를 수행할 지역서버와 원격서버의 이중화 객체 명은 동일해야 한다.
  • - remote_host_port_no : Xlog를 수신 할 이중화 대상 서버의 포트번호로써 이중화 대상 서버의 프로퍼티 REPLICATION_PORT_NO를 확인하여야 한다. 기본값은 이중화 자체를 수행하지 않는다는 의미인 0으로 설정되어 있다.
  • - remote_host_ip : 원격서버의 IP 주소 값
  • - FROM user_name.table_name TO user_name.table_name : 이중화할 테이블의 사용자 명과 테이블 명을 지역서버 원격서버 순으로 나열한다.
  • - WHERE : FROM-TO 절에 지정한 이중화 대상 테이블에 대한 상세조건이다.

이중화 객체 변경 구문

IP 추가, 삭제, 설정 구문(다중 IP설정)
 
ALTER REPLICATION replication_name {ADD|DROP|SET} HOST
‘remote_host_ip ‘ , remote_replication_port_no ;
    
  • - {ADD|DROP|SET} HOST : IP 를 추가하거나 삭제하거나 설정할 때 사용한다. IP 추가, 삭제, 설정은 DB는 온라인 상태에서 가능하지만 이중화는 Stop 된 상태에서만 가능하다.

이중화 대상 테이블 추가, 삭제 구문
 
ALTER REPLICATION replication_name {ADD|DROP} TABLE
FROM user_name.table_name TO user_name.table_name ;
    
  • - {ADD|DROP} TABLE : 이중화 대상 테이블을 추가하거나 삭제할 때 사용한다. 이중화 대상 테이블의 추가와 삭제는 DB가 온라인인 상태에서는 가능하지만 이중화는 Stop 된 상태에서만 가능하다.

이중화 객체 삭제 구문
 
ALTER REPLICATION replication_name DROP ;
    
  • - 이중화 객체는 이중화가 Stop 된 상태에서만 삭제할 수 있다.

이중화 제어 구문
  • [그림] 이중화 제어
  • 이중화 제어

 
ALTER REPLICATION replication_name { START | STOP | QUICKSTART } ;
    
  • - START : 마지막 이중화 수행시점을 기점으로 이중화를 시작 (일반구동)
  • - QUICKSTART : 미 전송 리두로그를 포기, 현재를 기점으로 이중화를 시작 (긴급구동)
  • - STOP : 현재를 기점으로 이중화를 중지

이중화 테이블 복제 구문

  이중화 테이블 복제 구문은 테이블의 데이터를 그대로 Remote 서버의 테이블에 복제하는 기능입니다. 테이블의 데이터를 모두 INSERT 하기 때문에 Remote 서버의 테이블에 이미 데이터가 들어 있는 경우에는 중복 에러가 발생할 수도 있습니다. 그래서 테이블 복제 시에는 Remote 서버의 테이블을 삭제했다가 다시 생성하거나, Truncate을 이용해서 모든 데이터를 삭제한 후에 복제해야 합니다.

  복제 기능은 이중화를 Stop 한 뒤에 사용할 수 있습니다.

 
ALTER REPLICATION replication_name { SYNC | SYNC ONLY } ;
    
  • - SYNC : Local 서버의 테이블 데이터를 Remote 서버의 테이블에 모두 INSERT 한 후, 이중화를 자동으로 시작한다.
  • - SYNC ONLY : Local 서버의 테이블 데이터를 Remote 서버의 테이블에 모두 INSERT 한다. 자동으로 이중화 시작하지 않음.

참고사이트

- 강좌 URL : http://www.gurubee.net/lecture/2188

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입