[AWS][DMS] Data Migration Service 사용방법

■ Database Migration Service

축약어로 DMS라 불립니다. 데이터 베이스 데이터를 실시간으로 복제해주는 솔루션으로서 흔히 CDC(Change Data Capture)라고도 합니다.

소스라 불리는 데이터베이스 테이블에서 Insert, Update, delete가 발생하게 되면 똑같이 타겟이라 불리는 데이터베이스 테이블에 똑같이 적용됩니다.

물론 DDL도 적용되어 소스쪽에 테이블 생성시 타겟쪽에도 똑같이 생성되게 됩니다.

DMS의 강점은 이기종 데이터베이스끼리도 복제가 가능하다는 점입니다. 순수하게 데이터만 Migration DMS를 이용하면 편리하게 데이터를 Migraiton 할 수 있습니다.

또한 기존 On-premise에서 클라우드로 이관시 DMS를 이용하면 편리하게 작업할 수 있습니다.

물론 DMS도 제약사항과 단점이 있습니다. 예를 들어 MySQL 복제시 Partition Table이 지원되지 않는등 몇가지 제약사항이 있습니다.

 

 

■ AWS DMS 프로세스.

대부분의 CDC기능이 지원되는 데이터베이스 복제 툴은 소스 데이터베이스에서 Binary로그 혹은 Archive로그를 읽은 후 타겟 데이터베이스에서 똑같이 실행하는 방식을 취하게 됩니다. 이렇게 함으로써 소스와 타겟 데이터베이스가 1:1로 똑같은 형태를 유지하게 됩니다.

 

■ DMS 준비사항

소스로 사용되는 데이터 베이스 버전 확인. 그리고 DB 엔진별 설정사항 및 확인사항

https://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Source.html

 

타겟으로 사용되는 데이터 베이스 버전 확인. 그리고 DB 엔진별 설정사항 및 확인사항

https://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Target.html

 

■ DMS 설정 방법

먼저 VPC가 설정이 되어 있어야 합니다. 또한 RDSDMS가 접속이 되도록 Security Group도 설정이 되어 있어야 합니다. VPC 설정은 이 범위를 벗어나므로 생략합니다.

DMS는 크게 4가지로 스텝으로 구분됩니다.

▶︎ 서브넷그룹 생성.

▶︎ 인스턴스 생성.

▶︎ 엔드포인트 생성.

▶︎ 마이그레이션 태스크 생성.

 

1. 서브넷 그룹 생성

 

• 이름 : 원하는 서브넷명을 입력합니다.

• 설명 : 서브넷 이름에 대한 설명을 입력합니다.

• VPC : 사전에 구성된 VPC를 선택합니다.

• 서브넷 추가 : VPC를 선택하면 subnet 목록이 나옵니다. 필요한 서브넷을 선택합니다.

• 참고로 Availability Zone이 서로 달라야 합니다.

 

2. 복제 인스턴스 생성

▶︎ 복제 인스턴스 구성

• 이름 : DMS 인스턴스 이름입니다.

• 설명 : 알맞게 입력합니다.

• 인스턴스 클래스 : DMS도 인스턴스 클래스가 있습니다. 클래스가 클수록 메모리도 크며 성능도 좋습니다. 복제되는 테이블이 평소 DML이 많거나 대량의 Insert등이 자주 발생된다면 인스턴스 클래스도 좀더 높은게 필요합니다.

• 엔진버전 : 베타를 제외한 최근 버전을 선택합니다.

• 할당된 스토리지 : IOPS에 따른 성능이 필요한만큼 알맞게 스토리지 크기를 설정합니다. 또한 데이터를 중간에서 가지고 처리를 하기 때문에 테이블에 대량의 작업이 많다면 스토리지 크기도 커야 합니다.

• VPC : VPC를 선택합니다.

• 다중 AZ : Multi AZ 옵션이 필요하다면 선택합니다.

• 퍼블릭 액세스 가능 : DMS가 퍼블릭 IP를 이용해서 연결접근을 시도하는데 추천드리지는 않습니다. 보안 이슈와 성능이 많이 많이 느려집니다.

 

▶︎ 고급 보안 및 네트워크 구성

• 복제 서브넷 그룹 : 앞에서 만들었던 서브넷을 선택합니다.

• 가용영역 : DMS를 설치할 Availability Zone을 선택합니다.

• KMS 마스터 키 : KMS를 설정하지 않았다면 특별히 선택하지 않으셔도 됩니다. 

 

▶︎ 유지관리 및 태그

유지보수 작업이 걸릴 때 언제 수행할지 설정합니다. 마이너 버전 자동 업그레이드 항목은 가능하면 아니요로 선택합니다. 자동으로 하게 되면 AWS에서 유지보수 공지를 한 날짜에 인위적으로 업그레이드를 진행하게 되며 이때 시스템 다운이 일어나게 됩니다.

목적에 따라 알맞게 태그를 입력합니다.

 

3. 엔드포인트 생성.[소스, 타겟 둘다]

▶︎ 엔드포인트 유형

소스, 대상 엔드포인트를 생성합니다. 만약 소스 데이터베이스가 On-Premise라면 각 항목에 맞게 모두 입력해 주어야 하지만 RDS로 되어 있다면 RDS 선택시 암호를 뺀 나머지 항목들이 모두 자동으로 채워지게 됩니다.

엔드포인트 유형 : 소스 엔드포인트 혹은 타겟 엔드포인트를 선택합니다.

AWS RDS를 이용해서 만들 시 [RDS DB 인스턴스 선택]을 클릭하여 바로 밑에 나오는 RDS인스턴스 리스트에서 선택합니다.

엔드포인트 구성 : 접속 대상 RDSOn-premise에 대한 정보를 정확히 입력합니다.

 

▶︎ 엔드포인트 관련 설정

접속시 추가적인 옵션이나 성능관련 옵션을 지정합니다. 맨위에 DMS 준비사항을 참고하여 엔진별 옵션을 입력합니다.

 

▶︎ KMS 마스터 키

KMS관련 설정을 했을경우 설정

 

▶︎ 태그

DMS에 대해 태그값 필요시 입력합니다.

타겟엔드포인트도 소스와 같습니다. 각 항목에 맞게 입력합니다.

 

4. 마이그레이션 태스크 생성

▶︎ 태스크 구성

• 태스크 식별자 : 알맞은 이름을 지정합니다.

• 복제 인스턴스 : 위에서 만든 복제 인스턴스를 선택합니다.

• 소스 데이터베이스 엔드포인트 : 위에서 만든 소스 엔드포인트를 선택합니다.

• 대상 데이터베이스 엔드포인트 : 위에서 만든 타겟 엔드포인트를 선택합니다.

• 마이그레이션 유형 : 3가지가 나옵니다.

    - 기존 데이터 마이그레이션 : 소스쪽의 모든 테이블과 데이터에 대해서만 복제합니다.

    - 기존 데이터 마이그레이션 및 지속적인 변경사항 복제 : 소스쪽의 모든 테이블과 데이터를 복제 완료한 후 소스쪽에 발생하는 Insert,

       Update, Delete에 대해서 CDC모드로 변경사항들을 가져와서 대상쪽에 복제합니다.

    - 데이터 변경사항만 복제 : 현재 시점부터 CDC모드만 시작합니다. 소스 데이터베이스에서 발생하는 Insert, Update, Delete에 대해

       대상 데이터베이스에 모두 적용합니다.

 

▶︎ 태스크 설정

• 대상 테이블 준비 모드 : 복제전 대상 테이블들을 어떻게 할지 결정합니다.

    - 아무 작업 안함 : 대상 테이블이 대상에 미리 생성되었다고 가정합니다. 마이그레이션이 전체 로딩 또는 전체 로딩과 CDC라면 마이그레

       이션 시작 전에 대상 테이블이 비어 있는지 확인합니다. 아무 작업 안 함 모드는 소스에서 대상 테이블이 채워져 있는 경우 CDC 전용 작

       업에 적합하고 진행 중 복제는 소스 및 대상 간 동기화를 유지합니다.

    - 대상에서 테이블 삭제 : 마이그레이션 시작 전에 대상 테이블을 삭제하고 대상 테이블을 다시 만듭니다. 이 방법은 마이그레이션 시작 전

       에 대상 테이블이 비어있는지 확인합니다. 데이터(테이블, 기본 키, 일부 경우 고유 인덱스 등)를 효율적으로 마이그레이션하는 데 필요

       한 객체만 생성합니다. 보조 인덱스, 기본이 아닌 키 제약 조건 또는 열 데이터 기본값을 생성하지 않습니다. 기존 테이블을 그대로 재생

       성하는게 아니라 필요한 요건만 만들어서 생성합니다.

    - 자르기(Truncate) : 마이그레이션을 시작하기 전에 모든 대상 테이블을 자릅니다(Truncate). 즉 테이블의 데이터를 모두 비워냅니다.

       자르기 모드는 마이그레이션이 시작되기전에 대상 스키마가 미리 생성된 전체 로드 또는 전체 로드와 CDC 마이그레이션에 적합합니다.

• 복제에 LOB 열을 포함 :

      - LOB 열 포함 안 함 : 복제시에 LOB 컬럼은 복제하지 않습니다.

      - 전체 LOB 모드 : LOB 전체를 복제합니다. LOB 데이터가 클경우 시간이 오래 걸릴 수 있습니다.

      - 제한적 LOB 모드 : 설정된 크기만큼 LOB 데이터가 복제됩니다.

• 최대 LOB 크기, LOB 청크 크기(kb)

    전체 LOB 모드로 할시 청크 크기를, 제한적 LOB 모드로 할시 최대 LOB 크기를 지정합니다.

• 검증 활성화 : 원본에서 대상으로 데이터가 정확히 마이그레이션되는지 확인하기 위해 데이터 검증을 활성화합니다.

• CloudWatch 로그 활성화 :CloudWatch 로그 활성화 여부를 선택합니다. 복제시 다양한 에러를 만날 수 있는데 이때 CloudWatch 로그를 활성화하면 도움이 많이 됩니다.

 

 

▶︎ 테이블 매핑 : 복제를 할 때 어떤 테이블을 어떤 방식으로 어떻게 복제를 할지를 설정하는 화면입니다.

• 편집모드

     - 가이드 UI : GUI 형식으로 편리하게 설정할 때 사용합니다.

     - JSON 편집기 : JSON 형식을 알고 DMS를 좀 사용해서 익숙하다면 JSON 편집기가 더 쉽고 빠를 수 있습니다.

• 선택규칙 : 마이그레이션 혹은 복제를 시작할 테이블을 매핑합니다. 스키마 단위, 테이블 단위로 할 수가 있습니다.

     - 스키마 : 엔진마다 조금씩 차이는 있습니다. MySQL같은경우 선택지는 하나입니다.

     - 스키마 이름 : 스키마 이름을 입력합니다.

     - 테이블 이름 : 스키마 안에 특정 테이블만 복제 혹은 제외할 경우 입력합니다. 전체 대상시 %로 입력합니다.

     - 작업 : 포함, 제외 2가지가 있습니다. 포함일 경우 위의 테이블이름에 지정된 테이블만 포함하거나 %일 경우 전체를 포함합니다. 반대로 제외일 경우 위의 테이블이름에 지정된 테이블만 제외하거나 %일 경우 전체를 제외합니다

     - 소스 필터 : 특정 조건을 설정할 때 사용합니다. 특정 컬럼에서 컬럼의 값이 조건에 참인 레코드만 복제가 되고 나머지는 제외됩니다.

 

• 변환 규칙 : 마이그레이션 대상 스키마 혹은 테이블에 대해 테이블이름을 변경하거나 테이블의 특정 컬럼의 이름을 변경하여 마이그레이션 하는 방식입니다.

     - 대상 : 스키마, 테이블, 3가지가 지원됩니다.

     - 스키마 이름 : MySQL인 경우 하나만 선택가능합니다.

     - 스키마 이름 : 해당 스키마명을 입력합니다.

     - 테이블 이름 : 대상에서 테이블을 선택시 활성화 됩니다. 대상 테이블을 입력합니다.

     - 열 이름 : 대상에서 열 선택시 활성화 됩니다. 열 이름을 입력합니다.

     - 작업 : 어떤 작업을 할지 선택합니다. 스키마이름, 테이블 이름, 열이름 혹은 대문사, 접두사 등등 생각보다 많은 변환을 할 수 있습니다.

 

▶︎ 마이그레이션 전 평가

마이그레이션을 시작하기 전 잠재적인 마이그레이션 문제에 대해 경고합니다. 사전 평가로 추가 시간이 소요됩니다. 그리 오래 걸리진 않습니다.

▶︎ 마이그레이션 태스크 시작 구성.

생성시 자동으로 : 태스크 생성을 눌렀을 때 태스크 생성이 완료된 후 자동으로 실행됩니다.

나중에 수동으로 : 태스크 생성을 눌렀을 때 태스크 생성이 완료된 후 수동으로 시작을 해야 합니다.

 

▶︎ 고급 태스크 설정

• 테이블 설정 제어 : 제어테이블을 생성할 위치를 지정합니다.

    - 스키마를 사용하여 대상에 제어 테이블 생성 : 특정 스키마 안에 제어 테이블을 생성합니다. 만약 특정 스키마를 제공하지 않으면 다음과

       같은 기본 스키마에 생성이 됩니다.

        https://aws.amazon.com/ko/premiumsupport/knowledge-center/dms-task-enable-control-tables/

       MySQL – awsdms_control

       MariaDB – awsdms_control

    - 내역시간 슬롯() : History timeslot (minutes) 필드에 각 레코드가 복제 기록 테이블에 유지되는 분 수를 입력합니다.

    - 제어테이블 활성화 : 가능하면 모든 테이블을 활성화 시킵니다. DMS에서 모니터링 시 도움이 크게 됩니다.

        a. 예외 적용이 테이블은 비활성화할 수 없으며 오류가 발생했을 때 실행 중인 문에 예외, 오류 및 정보를 포함합니다.

        b. 복제 상태이 테이블에는 작업에서 사용한 메모리 용량 및 작업 상태, 대상에 아직 적용되지 않은 변경 수를 포함한 현재 작업에 대한 세부 사항을 제공합니다. 이 테이블은 또한 AWS DMS가 읽고 있는 원본 데이터베이스의 위치를 지정하고 테이블은 작업이 전체 로드 또는 CDC인지 표시합니다.

        c. 일시 중지된 테이블이 테이블에는 일시 중지된 테이블 및 일시 중지 이유를 제공합니다.

        d. 복제 내역이 테이블은 복제 이력에 대한 정보를 제공합니다. 이 정보에는 작업 중에 처리된 레코드 수, 볼륨, CDC 작업 종료 시의지연 시간, 기타 통계 등을 포함합니다.

• 전체로드 튜닝 설정 : 마이그레이션 시 성능에 관련된 옵션입니다.

     - 병렬로 로드할 최대 테이블 수 : 테이블을 병렬로 로드할 갯수를 지정합니다.

     - 트랜잭션 일관성 제한 시간() : 전체로드 작업을 시작하기 전에 AWS DMS가 트랜잭션이 닫힐 때까지 기다리는 시간 ()을 설정합니

. 이렇게하려면 작업이 시작될 때 트랜잭션이 열려 있으면 TransactionConsistencyTimeout옵션을 설정합니다 . 기본값은 600 (10)입니다. AWS DMS는 열린 트랜잭션이 있더라도 제한 시간 값에 도달하면 전체로드를 시작합니다. 전체로드 전용 작업은 10 분 동안 기다리지 않고 즉시 시작됩니다.

     - 전체 로드 중 속도 커밋 : 한번에 전송할 이벤트 수입니다. 기본값은 10000입니다. 값이 클수록 한번에 많은 이벤트를 전송할 수 있지만 인스턴스 스펙이 낮으면 오히려 성능저하가 발생합니다.

     - 태그를 설정합니다.

 

 

도움이 되셨다면 광고클릭 한번 부탁드립니다.

 

Designed by JB FACTORY