pg_transport를 사용하여 두 Amazon RDS DB 인스턴스 간에 PostgreSQL 데이터베이스 전송 - 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

pg_transport를 사용하여 두 Amazon RDS DB 인스턴스 간에 PostgreSQL 데이터베이스 전송

작성자: Raunak Rishabh(AWS) 및 Jitender Kumar(AWS)

요약

이 패턴은 pg_transport 확장을 사용하여 PostgreSQL DB 인스턴스용 두 Amazon Relational Database Service(Amazon RDS) 간에 매우 큰 데이터베이스를 마이그레이션하는 단계를 설명합니다. 이 확장 프로그램은 각 데이터베이스를 이동하기 위한 물리적 전송 메커니즘을 제공합니다. 최소한의 처리로 데이터베이스 파일을 스트리밍함으로써 가동 중단을 최소화하면서 DB 인스턴스 간에 대규모 데이터베이스를 매우 빠르게 마이그레이션할 수 있는 방법을 제공합니다. 이 확장 프로그램은 대상 DB 인스턴스가 소스 DB 인스턴스에서 데이터베이스를 가져오는 풀링 모델을 사용합니다.

사전 조건 및 제한 사항

사전 조건 

  • 두 DB 인스턴스 모두 동일한 메이저 버전의 Postgre를 실행해야 합니다SQL.

  • 데이터베이스는 대상에 없어야 합니다. 그렇지 않으면 전송이 실패합니다.

  • 소스 데이터베이스에서 pg_transport이외의 확장 프로그램을 활성화하지 않아야 합니다.

  • 모든 소스 데이터베이스 객체는 기본 pg_default 테이블스페이스에 있어야 합니다.

  • 소스 DB 인스턴스의 보안 그룹은 대상 DB 인스턴스에서 들어오는 트래픽을 허용해야 합니다.

  • Amazon PostgreSQL DB 인스턴스와 함께 작동PgAdmin하려면 psql 또는와 같은 RDS PostgreSQL 클라이언트를 설치합니다. 로컬 시스템에 클라이언트를 설치하거나 Amazon Elastic Compute Cloud(AmazonEC2) 인스턴스를 사용할 수 있습니다. 이 패턴에서는 EC2 인스턴스에 psql을 사용합니다.

제한 사항

  • Amazon RDS for Postgre의 여러 주요 버전 간에 데이터베이스를 전송할 수 없습니다SQL.

  • 소스 데이터베이스의 액세스 권한 및 소유권은 대상 데이터베이스로 전송되지 않습니다.

  • 읽기 전용 복제본 또는 읽기 전용 복제본 또는 읽기 전용 복제본의 상위 인스턴스에서 전송 가능 데이터베이스를 사용할 수 없습니다.

  • 이 방법으로 전송하려는 데이터베이스 테이블에서는 reg 데이터 유형을 사용할 수 없습니다.

  • DB 인스턴스에서는 동시에 최대 32개의 전송(가져오기 및 내보내기 포함)을 실행할 수 있습니다.

  • 테이블의 이름을 바꾸거나 테이블을 포함/제외할 수 없습니다. 모든 것이 그대로 마이그레이션됩니다.

주의

  • 확장 프로그램을 제거하기 전에 백업을 생성합니다. 왜냐하면 확장 프로그램을 제거하면 데이터베이스 작동에 중요한 종속 객체 및 일부 데이터도 제거되기 때문입니다.

  • pg_transport 작업자 수와 work_mem 값을 결정할 때는 소스 인스턴스의 다른 데이터베이스에서 실행되고 있는 인스턴스 클래스와 프로세스를 고려합니다.

  • 전송이 시작되면 소스 데이터베이스의 모든 연결이 종료되고 데이터베이스가 읽기 전용 모드로 전환됩니다.

참고

전송이 한 데이터베이스에서 실행 중일 때는 동일한 서버의 다른 데이터베이스에 영향을 주지 않습니다.

제품 버전

아키텍처

Amazon RDS DB 인스턴스 간에 PostgreSQL 데이터베이스 전송

도구

  • pg_transport은 각 데이터베이스를 이동하기 위한 물리적 전송 메커니즘을 제공합니다. 물리적 전송은 최소한의 처리로 데이터베이스 파일을 스트리밍함으로써 기존의 덤프 및 로드 프로세스보다 훨씬 빠르게 데이터를 이동하고 가동 중단을 최소화합니다. PostgreSQL 전송 가능 데이터베이스는 대상 DB 인스턴스가 소스 DB 인스턴스에서 데이터베이스를 가져오는 풀 모델을 사용합니다. 이 패턴에 설명된 대로 소스 및 대상 환경을 준비할 때 이 확장 프로그램을 DB 인스턴스에 설치합니다.

  • psql을 사용하면 PostgreSQL DB 인스턴스에 연결하고 작업할 수 있습니다. 시스템에 psql을 설치하려면 PostgreSQL 다운로드 페이지를 참조하세요.

에픽

작업설명필요한 기술

대상 시스템에 대한 파라미터 그룹을 생성합니다.

대상 파라미터 그룹으로 식별되는 그룹 이름을 지정합니다, 예를 들면, pgtarget-param-group입니다. 지침은 Amazon RDS 설명서를 참조하세요.

DBA

파라미터 그룹의 파라미터를 수정합니다.

다음 파라미터를 설정합니다.

  1. pg_transportshared_preload_libraries 파라미터에 추가합니다.

    shared_preload_libraries = pg_stat_statements, pg_transport
  2. pg_transport.num_workers 파라미터를 설정합니다. 함께 전송을 실행하려는 작업자 수를 선택합니다. 설정한 값에 따라 소스에서 생성될 transport.send_file 작업자 수가 결정됩니다.

  3. max_worker_processes의 값을 pg_transport.num_workers 값의 3배 이상으로 증가합니다. 예를 들어 pg_transport.num_workers의 값을 4로 설정하는 경우 max_worker_processes 값은 13 이상이어야 합니다. 실패할 경우 pg_transport는 최소값을 권장합니다. 

  4. pg_transport.timing을 1로 설정합니다. 이 설정을 사용하면 전송 중 타이밍 정보를 보고할 수 있습니다.

  5. pg_transport.work_mem 파라미터를 설정합니다. 이 파라미터는 각 작업자에게 할당할 최대 메모리를 지정합니다. 기본값은 128MB입니다.

이러한 파라미터에 대한 자세한 내용은 Amazon RDS 설명서를 참조하세요.

DBA
작업설명필요한 기술

소스 시스템에 대한 파라미터 그룹을 생성합니다.

소스 파라미터 그룹으로 식별되는 그룹 이름을 지정합니다, 예를 들면, pgsource-param-group입니다. 지침은 Amazon RDS 설명서를 참조하세요.

DBA

파라미터 그룹의 파라미터를 수정합니다.

다음 파라미터를 설정합니다.

  1. pg_transportshared_preload_libraries 파라미터에 추가합니다.

    shared_preload_libraries = pg_stat_statements, pg_transport
  2. pg_transport.num_workers 파라미터를 설정합니다. 대상에 정의된 이 파라미터의 값에 따라 사용할 transport.send_file 작업자 수가 결정됩니다. 이 인스턴스에서 가져오기를 실행하는 경우 이 값을 증가하되 이미 실행 중인 작업자 수를 고려해야 합니다.

  3. 대상에서 max_worker_processes의 값은 pg_transport.num_workers 값의 3배 이상으로 증가시킵니다. 예를 들어 대상에서 pg_transport.num_workers의 값을 4로 설정하는 경우 소스의 max_worker_processes 값은 13 이상이어야 합니다. 실패할 경우 pg_transport는 최소값을 권장합니다. 

  4. pg_transport.work_mem 파라미터를 설정합니다. 이 파라미터는 각 작업자에게 할당할 최대 메모리를 지정합니다. 기본값은 128MB입니다.

이러한 파라미터에 대한 자세한 내용은 Amazon RDS 설명서를 참조하세요.

DBA
작업설명필요한 기술

소스 데이터베이스를 전송할 새 Amazon RDS for PostgreSQL DB 인스턴스를 생성합니다.

비즈니스 요구 사항에 따라 인스턴스 클래스 및 PostgreSQL 버전을 결정합니다.

DBA, 시스템 관리자, 데이터베이스 아키텍트

대상의 보안 그룹을 수정하여 EC2 인스턴스에서 DB 인스턴스 포트에 대한 연결을 허용합니다.

기본적으로 PostgreSQL 인스턴스의 포트는 5432입니다. 다른 포트를 사용하는 경우 EC2 인스턴스에 대해 해당 포트에 대한 연결이 열려 있어야 합니다.

DBA, 시스템 관리자

인스턴스를 수정하고 새로운 타겟 파라미터 그룹을 할당합니다.

예: pgtarget-param-group.

DBA

대상 Amazon RDS DB 인스턴스를 다시 시작합니다.

shared_preload_librariesmax_worker_processes파라미터는 정적 파라미터이므로 인스턴스를 재부팅해야 합니다.

DBA, 시스템 관리자

psql을 사용하여 EC2 인스턴스에서 데이터베이스에 연결합니다.

다음 명령을 사용합니다. 

psql -h <rds_end_point> -p PORT -U username -d database -W
DBA

pg_transport 확장 프로그램을 생성합니다.

rds_superuser 역할이 있는 사용자로서 다음 쿼리를 실행합니다.

create extension pg_transport;
DBA
작업설명필요한 기술

소스의 보안 그룹을 수정하여 Amazon 인스턴스 및 대상 DB 인스턴스의 DB EC2 인스턴스 포트에 대한 연결을 허용합니다.

기본적으로 PostgreSQL 인스턴스의 포트는 5432입니다. 다른 포트를 사용하는 경우 EC2 인스턴스에 대해 해당 포트에 대한 연결이 열려 있어야 합니다.

DBA, 시스템 관리자

인스턴스를 수정하고 새로운 소스 파라미터 그룹을 할당합니다.

예: pgsource-param-group.

DBA

소스 Amazon RDS DB 인스턴스를 다시 시작합니다.

shared_preload_librariesmax_worker_processes파라미터는 정적 파라미터이므로 인스턴스를 재부팅해야 합니다.

DBA

psql을 사용하여 EC2 인스턴스에서 데이터베이스에 연결합니다.

다음 명령을 사용합니다. 

psql -h <rds_end_point> -p PORT -U username -d database -W
DBA

pg_transport 확장 프로그램을 만들고 데이터베이스에서 전송할 다른 모든 확장 프로그램을 제거합니다.

소스 데이터베이스에 pg_transport이외의 확장 프로그램이 설치되어 있는 경우 전송이 실패합니다. 이 명령은 해당 rds_superuser 역할을 가진 사용자가 실행해야 합니다.

DBA
작업설명필요한 기술

모의 실행을 수행합니다.

transport.import_from_server 함수를 사용하여 먼저 모의 실행을 다음과 같이 실시합니다.

SELECT transport.import_from_server( 'source-db-instance-endpoint', source-db-instance-port, 'source-db-instance-user', 'source-user-password', 'source-database-name', 'destination-user-password', 'true');

이 함수의 마지막 파라미터(true로 설정)는 모의 실행을 정의합니다.

이 함수는 주요 전송을 실행할 때 나타날 수 있는 모든 오류를 표시합니다. 주요 전송을 실행하기 전에 오류를 해결합니다.

DBA

모의 실습이 성공하면 데이터베이스 전송을 시작합니다.

transport.import_from_server 함수를 실행하여 전송을 실시합니다. 소스에 연결하고 데이터를 가져옵니다. 

SELECT transport.import_from_server( 'source-db-instance-endpoint', source-db-instance-port, 'source-db-instance-user', 'source-user-password', 'source-database-name', 'destination-user-password', false);

이 함수의 마지막 파라미터(false로 설정)는 모의 실습이 아님을 나타냅니다.

DBA

전송 후 단계를 실시합니다.

데이터베이스 전송이 완료된 후:

  • 대상 환경에서 데이터를 검증합니다.

  • 모든 역할과 권한을 대상에 추가합니다.

  • 필요한 경우 대상 및 소스에서 필요한 모든 확장 프로그램을 활성화합니다.

  • max_worker_processes 파라미터의 값을 되돌립니다.

DBA

관련 리소스