의견.png

레플리케이션

위키원
kskim5223 (토론 | 기여)님의 2020년 7월 29일 (수) 16:01 판 (특징)
이동: 둘러보기, 검색

레플리케이션(Replication)은 서비스를 수행하고 있는 서버의 데이터에 대한 백업 데이터베이스의 최신 데이터 유지와, 서버의 예기치 않은 종료가 발생했을 때 대체 서버를 이용하여 서비스를 재개할 수 있는 무정지 운영 환경을 제공하는 것을 목적으로 한다.

개요

레플리케이션은 데이터 저장과 백업하는 방법과 관련이 있는 데이터를 호스트 컴퓨터에서 다른 컴퓨터로 복사하는 것인데 이때 다른 컴퓨터가 반드시 떨어진 지역에 있어야 하는 것은 아니다. 컴퓨터 네트워크 상태에서는 데이터 저장을 할 수 있게 하는데 로컬 데이터 물리적 기억 장치와는 완전하게 구분된다. 레플리케이션은 유명한 데이터베이스 관리 시스템 (RDBMS, Relational DataBase Management Systems)에서 추가적으로 제공하거나 여러 대의 데이터베이스 서버의 부하를 맞추어 줄 용도로 제공한다. 레플리케이션은 남아 있는 리소스와 관련이 있는데 소프트웨어 요소나 하드웨어 부품이 말해 주며, 이는 신뢰성, 허용 오차, 그리고 성능을 개선한다. 전형적으로 '레플리케이션 인 스페이스'(replication in space)와 관련이 있는데 이것은 동일한 데이터를 다수의 저장 장치에 저장하거나 동일한 계산 업무를 다수 장치에서 수행하는 것이다. 또한 '레플리케이션 인 타임'(replication in time)는 컴퓨터 계산 수행이 반복적으로 한 개의 장치에서 일어나는 것이다.[1]

특징

이중화를 사용하는 목적은 크게 세 가지로 구분할 수 있다.

부하분산을 통한 성능 개선.jpg
  • 고가용성 확보
일반적으로 가용성이란 시스템의 정지 없이 서비스가 가동될 수 있는 확률을 의미하는 것이며, 고가용성이란 긴 시간 동안 지속적으로 서비스를 운영이 가능한 시스템이나 컴포넌트를 의미한다. 이중화를 사용하면 하나 이상의 DB의 데이터가 네트워크를 통해서 복제되어 항상 같은 데이터를 가지고 있기 때문에 서비스를 제공하던 DB에 장애가 발생할 경우, 동일한 데이터를 가지고 있는 백업 DB로 Fail-over를 해서 계속적인 서비스를 제공할 수 있다. 어플리케이션에서 DB의 장애를 감지하게 되면 DB에서 자동으로 이중화가 구성되어 있는 다른 DB로 해당 어플리케이션을 Fail–over 하여 계속적인 서비스를 할 수 있도록 해준다.
부하분산을 통한 성능 개선.jpg
  • 부하분산을 통한 성능 개선
이중화로 구성된 DB는 항상 같은 데이터를 가지고 있기 때문에 하나의 DB를 사용해서 모든 어플리케이션을 처리할 때보다 업무 특성(DML 과 SELECT) 등을 고려해서 어플리케이션을 분산시키면, DB에 가해지는 부하가 줄어들게 되고, 이는 전체적인 성능 향상을 가져오게 된다.
장애를 대비한 백업 서버 구축.jpg
  • 장애, 재해 시 데이터손실 최소화
물리적인 시스템 장애나 천재지변과 같은 재해 시에 하나의 시스템을 운영하게 되면 장애를 복구할 동안 정상적인 서비스를 할 수 없게 된다. 그래서 일반적으로 백업 서버를 운영하게 되는데, 이중화를 사용하게 되면 백업 서버의 운영을 손쉽게 할 수 있다. 이중화를 ACTIVE-STANDBY 형태로 구성하여, 하나의 DB에서만 서비스를 운영하게 되면, 별도의 백업 작업을 하지 않아도 이중화로 구성된 백업 DB에는 동일한 데이터가 복제되어 저장된다.[2]

이중화 방식

데이터베이스 이중화를 하기 위하여, 지역 서버는 데이터베이스에서 발생하는 데이터 변경 내용을 원격 서버로 전송하고, 원격 서버는 전송받은 내용을 자신의 데이터베이스에 반영하는 방법을 사용한다. 지역 서버와 원격 서버는 데이터베이스 서비스 스레드와 별도로 이중화 관리에 필요한 스레드를 구동한다. 지역 서버의 이중화 송신 스레드는 데이터베이스의 데이터 변경 내역을 원격 서버로 전송하며, 원격 서버의 이중화 수신 스레드는 전송받은 변경 내용을 데이터베이스에 반영시킨다. 또한 이중화 송수신 스레드는 대응 서버의 정상 및 비정상 종료를 자동 감지하며 이에 상응하는 작업을 수행한다.

이중화 서버 선정

이중화를 하기 위해서는 데이터베이스 서버들의 데이터베이스 캐릭터 셋과 내셔널 캐릭터 셋이 서로 동일해야 한다. 데이터베이스 캐릭터 셋은 V$NLS_PARAMETERS 성능 뷰를 이용하여 확인할 수 있다.

이중화 대상 선정

이중화 대상을 선정하는 기준으로 객체의 '이름'을 사용한다. 이중화를 생성할 때에는 이중화 대상이 되는 테이블 이름과 그 소유자 이름을 직접 지정해야 한다. 파티션드 테이블의 특정 파티션만 복제하려면, 파티션 이름과 파티션이 속한 테이블 이름 및 그 소유자 이름을 직접 지정해야 한다. 또한 이중화를 수행시 지역 서버와 원격 서버에서 이름이 같은 컬럼만 복제된다. 이중화 대상 컬럼은 V$REPRECEIVER_COLUMN 성능 뷰를 통해 확인이 가능하다.

이중화 모드

데이터 베이스 이중화는 변경 내용의 전달 방식에 따라 LAZY 모드와 EAGER 모드로 나뉜다. 이중화 모드 별로 성능, 이중화 밀림현상, 데이터 일관성 측면에서 아래 표에서 보는 것처럼 서로 다른 특징을 갖는다.

요약표
모드 성능 이중화 밀림 현상 데이터 일관성
LAZY 높음 발생 가능 낮음
EAGER 중간 발생 불가능 높음
  • LAZY 모드
LAZY 모드는 지역 서버에서 이중화 대상 테이블에 대한 DML 을 수행하는 주 트랜잭션이 발생하면, 이중화의 송신 쓰레드가 주 트랜잭션이 기록한 로그를 수집하여 XLog 로 가공하여 전송한다. 그리고 원격 서버의 수신 쓰레드는 XLog 를 수신하여 복제 트랜잭션으로 DB 에 반영하는 형태이다. 이처럼 서비스 트랜잭션 (주 트랜잭션)과 복제 트랜잭션이 완전히 별개로 동작하기 때문에 트랜잭션의 영향을 받지 않아 지역 서버의 성능이 우수하다. 그러나 송신 쓰레드가 언제나 주 트랜잭션을 따라가는 입장이기 때문에, 매우 바쁜(busy) 사이트 환경에서는 이중화가 밀리는 현상이 발생할 수 있다.
  • EAGER 모드
EAGER 모드는 지역 서버에서 발생한 주 트랜잭션과 관련된 모든 로그가 원격 서버에서도 정상적으로 반영된 것을 확인한 후에 지역 서버에서 커밋을 수행하고, 동시에 원격 서버에서도 복제 트랜잭션의 커밋을 수행하는 트랜잭션 동기화1 방식이다. EAGER 모드의 이점은 트랜잭션을 동기화 하기 때문에 트랜잭션을 병렬로 복제할 수 있다는 점이다. 그러므로, EAGER 모드로 이중화를 수행할 때는 다수의 송신 쓰레드가 병렬로 복제를 수행한다. 병렬 쓰레드의 개수는 REPLICATION_EAGER_PARALLEL_FACTOR 프로퍼티로 설정할 수 있다. 트랜잭션 동기화로 인해 성능이 조금 떨어지는 단점이 있으나, 트랜잭션 발생이 매우 빈번한 사이트에서도 LAZY 모드처럼 이중화가 밀리는 현상이 발생하지는 않는다.

부가 기능

Altibase 에서 제공하는 이중화 부가 기능은 아래와 같다. 부가 기능을 사용하는 방법 및 제약사항 등의 자세한 설명은 이중화 부가기능에서 설명한다.

  • 복구 옵션 : 이중화를 진행중에 서버가 비정상 종료되면 서버간 데이터가 불일치하는 것을 방지하기 위해 이중화를 이용한 데이터 복구 기능
  • 오프라인 옵션 : Active-Standby 이중화 환경에서 Active 서버에 장애가 발생하면, 오프라인 옵션을 사용하여 미전송된 로그를 Standby 서버에 반영할 수 있는 기능
  • 이중화 갭 해소 옵션 : 이중화를 수행할 때 발생하는 이중화 갭을 해소하는 기능
  • 병렬 적용자 옵션 : 송신자로부터 받은 XLog 를 수신자가 병렬로 적용할 수 있는 기능
  • 이중화 트랜잭션 그룹 옵션 : 이중화 갭이 발생하였을 때 전송해야 할 복수의 트랜잭션들을 하나의 트랜잭션처럼 그룹화하여 수신 쓰레드에 로그를 전송하는 기능

주의사항

이중화할 수 있는 객체는 테이블 또는 파티션이며, 양쪽 서버에서 대응하는 이중화 대상 아이템은 서로 종류가 동일해야 한다. 즉 테이블은 테이블로, 파티션은 파티션으로 이중화할 수 있지만, 서로 교차되는 이중화는 지원하지 않는다. 이중화 객체에서 이중화 대상 테이블 또는 파티션을 삭제할 때에는 추가할 때 지정한 그대로 명시해야 한다. 예를 들어, 한 파티션드 테이블의 모든 파티션을 이중화 대상으로 추가했어도, 파티션드 테이블을 지정해서 이중화 대상에서 제외시키는 것은 불가능하고 파티션을 각각 지정해서 제외시킬 수 있다.

순서

  1. 이중화 할 서버 결정 이중화 할 양쪽 서버의 데이터베이스 캐릭터 셋과 내셔널 캐릭터 셋은 서로 동일해야 한다.
  2. 이중화 할 테이블 또는 파티션 결정 이중화 할 테이블은 반드시 프라이머리 키가 필요하다.
  3. 이중화 생성(CREATE REPLICATION) 서버 A 와 서버 B 양쪽에 같은 이름으로 이중화 생성을 해야한다.
  4. 이중화 동작(ALTER REPLICATION) 이중화를 시작(start)하면 지역 서버에 이중화 송신 쓰레드가 생성되고, 원격 서버의 이중화 관리자와 연결된다. 이 때 원격 서버 이중화 관리자는 이중화 수신 쓰레드를 생성한다.
  5. 이중화 작업 개시

각주

  1. 레플리케이션 위키백과 - https://ko.wikipedia.org/wiki/레플리케이션
  2. Altibase, 〈ALTIBASE HDB 5.3.3 기초강좌〉, 《꿈꾸는 개발자, DBA 커뮤니티 구루비》, 2012-04-14

참고자료

같이 보기


  의견.png 이 레플리케이션 문서는 하드웨어에 관한 토막글입니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 이 문서의 내용을 채워주세요.