개요
Database Migration Service는 소스 데이터베이스에서 AlloyDB 대상 데이터베이스로의 지속적 마이그레이션을 지원합니다.
PostgreSQL에 지원되는 소스 데이터베이스는 다음과 같습니다.
- Amazon RDS 9.6.10 이상, 10.5 이상, 11.1 이상, 12, 13, 14, 15
- Amazon Aurora 10.11 이상, 11.6 이상, 12.4 이상, 13.3 이상, 14, 15
- 자체 관리형 PostgreSQL (온프레미스 또는 완전히 제어하는 모든 Cloud VM) 9.4, 9.5, 9.6, 10, 11, 12, 13, 14, 15
- Cloud SQL 9.6, 10, 11, 12, 13, 14, 15
소스를 구성하려면 소스 인스턴스와 기본 소스 데이터베이스를 둘 다 구성해야 합니다.
소스 인스턴스 구성
소스 인스턴스를 구성하려면 다음 단계를 따르세요.
- 소스 인스턴스에는
postgres
데이터베이스가 포함되어야 합니다. 이 데이터베이스가 없으면 새로 만드세요. - 소스 인스턴스에
pglogical
패키지를 설치하고shared_preload_libraries
변수에 포함되어 있는지 확인합니다.- 환경에 따라 소스 인스턴스에
pglogical
패키지 설치를 참고하세요.
- 환경에 따라 소스 인스턴스에
소스 데이터베이스 구성
Database Migration Service는 다음 데이터베이스를 제외한 소스 인스턴스의 모든 데이터베이스를 마이그레이션합니다.
- 온프레미스 소스: 템플릿 데이터베이스
template0
,template1
- Amazon RDS 소스:
template0
,template1
,rdsadmin
- Cloud SQL 소스: 템플릿 데이터베이스
template0
,template1
위에 언급되지 않은 소스 인스턴스의 각 데이터베이스에서 다음을 수행합니다.
PostgreSQL 버전 9.4 소스만 해당: 소스 인스턴스의 각 데이터베이스에 다음
pglogical
확장 프로그램을 설치합니다.CREATE EXTENSION IF NOT EXISTS pglogical;
CREATE EXTENSION IF NOT EXISTS pglogical_origin;
기타 모든 버전의 경우 소스 인스턴스의 각 데이터베이스에
pglogical
확장 프로그램만 설치합니다.CREATE EXTENSION IF NOT EXISTS pglogical
기본 키가 없는 테이블의 경우 Database Migration Service는 CDC 단계에서 초기 스냅샷과
INSERT
문을 마이그레이션합니다.UPDATE
및DELETE
문은 수동으로 마이그레이션해야 합니다.소스 인스턴스에 연결하는 데 사용 중인 USER (연결 프로필 페이지에서 사용자로 구성됨)는 기본
postgres
데이터베이스뿐만 아니라 마이그레이션된 각 데이터베이스에 대한 특정 권한이 있어야 합니다. 새 사용자를 만들거나 기존 사용자를 재사용할 수 있습니다. 이러한 권한을 설정하려면 인스턴스에 연결하고 다음 명령어를 실행하세요.GRANT USAGE on SCHEMA SCHEMA to USER
: 마이그레이션할 각 데이터베이스의 모든 스키마에서 실행 (정보 스키마 및 'pg_'로 시작하는 스키마 제외)GRANT USAGE on SCHEMA pglogical to PUBLIC;
: 마이그레이션할 각 데이터베이스에서 실행GRANT SELECT on ALL TABLES in SCHEMA pglogical to USER
: 소스 데이터베이스에서 복제 정보를 가져오기 위해 모든 데이터베이스에서 실행GRANT SELECT on ALL TABLES in SCHEMA SCHEMA to USER
: 마이그레이션할 각 데이터베이스의 모든 스키마에서 실행 (정보 스키마 및 'pg_'로 시작하는 스키마 제외)GRANT SELECT on ALL SEQUENCES in SCHEMA SCHEMA to USER
: 마이그레이션할 각 데이터베이스의 모든 스키마에서 실행 (정보 스키마 및 'pg_'로 시작하는 스키마 제외)- 소스가 Amazon RDS인 경우 다음 명령어를 실행합니다.
GRANT rds_replication to USER
- 소스가 Amazon RDS가 아닌 경우 다음 명령어를 실행합니다.
ALTER USER USER with REPLICATION
역할
소스 인스턴스에 pglogical
패키지 설치
이 섹션에서는 max_replication_slots
, max_wal_senders
, max_worker_processes
매개변수 구성을 비롯하여 pglogical
패키지를 구성하는 방법을 설명합니다.
마이그레이션 작업을 만들 때
마이그레이션 작업 테스트를 실행하여 이러한 매개변수의 올바른 값을 가져올 수도 있습니다.
이 테스트 중에 Database Migration Service는 설정을 확인하고 올바른 값을 제안할 수 있습니다.
온프레미스 또는 자체 관리형 PostgreSQL
- 서버에 pglogical 패키지를 설치합니다.
- 인스턴스에 연결하고 필요에 따라 다음 매개변수를 설정합니다.
shared_preload_libraries
에는pglogical
이 포함되어야 합니다.이 매개변수를 설정하려면
ALTER SYSTEM SET shared_preload_libraries = 'pglogical,[any other libraries in your instance]';
명령어를 실행합니다.wal_level
을logical
로 설정합니다.이 매개변수를 설정하려면
ALTER SYSTEM SET wal_level = 'logical';
명령어를 실행합니다.wal_sender_timeout
을0
로 설정합니다.이 매개변수를 설정하려면
ALTER SYSTEM SET wal_sender_timeout = 0;
명령어를 실행합니다. 여기서0
는 비활성 복제 연결을 종료하는 데 사용되는 제한 시간 메커니즘을 사용 중지합니다.max_replication_slots는 소스 인스턴스가 지원할 수 있는 최대 복제 슬롯 수를 정의합니다. 연결이 예상되는 구독 수와 테이블 동기화를 위한 약간의 비축분을 더한 값 이상으로 설정해야 합니다.
Database Migration Service를 사용하려면 마이그레이션되는 데이터베이스 (소스 인스턴스의 모든 데이터베이스)마다 1개의 슬롯이 필요합니다.
예를 들어 소스 인스턴스에 데이터베이스가 5개 있고 소스에 대한 마이그레이션 작업이 2개 생성된 경우 복제 슬롯 수는 5 * 2 = 10개 이상을 이미 사용 중인 복제 슬롯 수와 합한 값이어야 합니다. 조정된 데이터 덤프 병렬 처리 설정을 사용할 계획이라면 마이그레이션 작업을 만들 때 복제 슬롯 수를 늘리고 마이그레이션 작업 테스트를 실행하여 구성을 확인하세요.
이 매개변수를 설정하려면
ALTER SYSTEM SET max_replication_slots = #;
명령어를 실행합니다. 여기서 #는 최대 복제 슬롯 수를 나타냅니다.max_wal_senders는
max_replication_slots
와 인스턴스에서 이미 사용한 발신자 수를 합한 값 이상으로 설정해야 합니다.예를 들어
이 매개변수를 설정하려면max_replication_slots
매개변수가10
으로 설정되어 있고 이미 발신자를 2개 사용 중인 경우 동시에 실행되는 WAL 발신자 프로세스 수는 10+2 = 12개입니다. 조정된 데이터 덤프 병렬 처리 설정을 사용하려는 경우, 발신자 수를 늘리고 마이그레이션 작업을 만들 때 마이그레이션 작업 테스트를 실행하여 구성을 확인하세요.ALTER SYSTEM SET max_wal_senders = #;
명령어를 실행합니다. 여기서 #는 동시에 실행되는 WAL 발신자 프로세스 수를 나타냅니다.max_worker_processes는 Database Migration Service에서 마이그레이션할 데이터베이스 수 (소스 인스턴스의 모든 데이터베이스)와 인스턴스에서 이미 사용한
max_worker_processes
수를 합한 값 이상으로 설정해야 합니다.조정된 데이터 덤프 병렬 처리 설정을 사용할 계획이라면 마이그레이션 작업을 만들 때 워커 프로세스 수를 늘리고 마이그레이션 작업 테스트를 실행하여 구성을 확인하세요.
이 매개변수를 설정하려면
ALTER SYSTEM SET max_worker_processes = #;
명령어를 실행합니다. 여기서 #는 이전할 데이터베이스의 수를 나타냅니다.
- 구성 변경사항을 적용하려면 소스 인스턴스를 다시 시작합니다.
Amazon RDS PostgreSQL
- 소스 데이터베이스에
pglogical
확장 프로그램을 설치합니다. 자세한 내용은 Amazon RDS 문서의 PostgreSQL용 Amazon RDS에서 PostgreSQL 확장 프로그램 사용을 참고하세요. 매개변수 그룹을 사용하여 소스 인스턴스를 구성합니다.
- 새 매개변수 그룹을 만듭니다. 매개변수 그룹에서 다음을 실행합니다.
shared_preload_libraries
매개변수에pglogical
가 포함되어 있는지 확인합니다.rds.logical_replication
매개변수를1
로 설정합니다. 이렇게 하면 논리적 수준에서 WAL 로그가 사용 설정됩니다.wal_sender_timeout
매개변수를 0으로 설정합니다. 이렇게 하면 비활성 복제 연결을 종료하는 데 사용되는 제한 시간 메커니즘이 사용 중지됩니다.max_replication_slots 매개변수를 설정합니다. 이 매개변수는 소스 인스턴스가 지원할 수 있는 최대 복제 슬롯 수를 정의합니다. 연결이 예상되는 구독 수와 테이블 동기화를 위한 약간의 비축분을 더한 값으로 설정해야 합니다.
Database Migration Service를 사용하려면 마이그레이션되는 데이터베이스 (소스 인스턴스의 모든 데이터베이스)마다 1개의 슬롯이 필요합니다.
예를 들어 소스 인스턴스에 데이터베이스가 5개 있고 소스에 대한 2개의 마이그레이션 작업이 생성된 경우 복제 슬롯 수는 5 * 2 = 10개 이상을 이미 사용 중인 복제 슬롯 수와 합한 값이어야 합니다. 조정된 데이터 덤프 병렬 처리 설정을 사용하려면 이전 작업을 만들 때 복제 슬롯 수를 늘리고 이전 작업 테스트를 실행하여 구성을 확인하세요.
이 매개변수의 기본값은 10입니다.
max_wal_senders 매개변수를 인스턴스에서 이미 사용한 발신자 수에 최소한
max_replication_slots
와 동일한 수를 더한 값으로 설정합니다.예를 들어
max_replication_slots
매개변수가10
으로 설정되어 있고 이미 발신자를 2개 사용 중인 경우 동시에 실행되는 WAL 발신자 프로세스 수는 10+2 = 12개입니다. 조정된 데이터 덤프 병렬 처리 설정을 사용하려면 마이그레이션 작업을 만들 때 발신자 수를 늘리고 마이그레이션 작업 테스트를 실행하여 구성을 확인하세요.이 매개변수의 기본값은 10입니다.
max_worker_processes 소스 매개변수를 Database Migration Service에서 마이그레이션할 데이터베이스 수 (소스 인스턴스의 모든 데이터베이스)와 인스턴스에서 이미 사용한
max_worker_processes
수를 합한 값 이상으로 설정합니다. 조정된 데이터 덤프 병렬 처리 설정을 사용하려면 워커 프로세스 수를 늘리고 마이그레이션 작업을 만들 때 마이그레이션 작업 테스트를 실행하여 구성을 확인하세요.이 매개변수의 기본값은 8입니다.
매개변수 그룹을 인스턴스에 연결합니다. 새 인스턴스를 만드는 경우 추가 구성에서 이 옵션을 찾을 수 있습니다. 그렇지 않으면 인스턴스를 수정하여 매개변수 그룹을 연결합니다.
구성 변경사항을 적용하려면 소스 인스턴스를 다시 시작합니다.
PostgreSQL용 Cloud SQL
다음 플래그를 구성하여 소스 데이터베이스에 논리 복제 및 디코딩을 사용 설정합니다.
cloudsql.logical_decoding
및cloudsql.enable_pglogical
플래그를on
로 설정합니다.max_replication_slots 플래그를 설정합니다. 이 플래그는 소스 인스턴스가 지원할 수 있는 최대 복제 슬롯 수를 정의합니다. 연결이 예상되는 구독 수와 테이블 동기화를 위한 약간의 비축분을 더한 값 이상으로 설정해야 합니다.
Database Migration Service를 사용하려면 마이그레이션되는 데이터베이스 (소스 인스턴스의 모든 데이터베이스)마다 1개의 슬롯이 필요합니다.
예를 들어 소스 인스턴스에 데이터베이스가 5개 있고 소스에 대한 2개의 마이그레이션 작업이 생성된 경우 복제 슬롯 수는 5 * 2 = 10개 이상을 이미 사용 중인 복제 슬롯 수와 합한 값이어야 합니다. 조정된 데이터 덤프 병렬 처리 설정을 사용할 계획이라면 마이그레이션 작업을 만들 때 복제 슬롯 수를 늘리고 마이그레이션 작업 테스트를 실행하여 구성을 확인하세요.
이 플래그의 기본값은 10입니다.
max_wal_senders 플래그를 인스턴스에서 이미 사용한 발신자 수에 최소한
max_replication_slots
와 동일한 수를 더한 값으로 설정합니다.예를 들어
max_replication_slots
플래그가10
로 설정되어 있고 이미 발신자를 2개 사용 중인 경우 동시에 실행되는 WAL 발신자 프로세스 수는 10+2 = 12개입니다. 조정된 데이터 덤프 병렬 처리 설정을 사용하려는 경우, 발신자 수를 늘리고 마이그레이션 작업을 만들 때 마이그레이션 작업 테스트를 실행하여 구성을 확인하세요.이 플래그의 기본값은 10입니다.
max_worker_processes 소스 플래그를 Database Migration Service가 마이그레이션할 데이터베이스 수 (소스 인스턴스의 모든 데이터베이스)와 인스턴스에서 이미 사용한
max_worker_processes
수를 합한 값 이상으로 설정합니다. 조정된 데이터 덤프 병렬 처리 설정을 사용할 계획이라면 연결당 작업자 프로세스 2개를 추가로 고려하세요(최대 20개 작업자).이 플래그의 기본값은 8입니다.
- 플래그에 적용된 구성 변경사항이 적용될 수 있도록 소스 인스턴스를 다시 시작합니다.
9.6 미만 PostgreSQL 버전의 복제 지연 모니터링 사용 설정
9.6 이전 PostgreSQL 버전에서 마이그레이션하는 경우 복제 지연 측정항목이 기본적으로 제공되지 않습니다. 데이터베이스를 승격할 때 다운타임을 최소화하기 위해 이 측정항목을 추적할 수 있는 세 가지 대안이 있습니다.
옵션 1: Database Migration Service가 특정 쿼리에 대한 액세스 권한을 부여하여 복제 지연을 추적하도록 사용 설정합니다.
SUPERUSER
권한이 있는 사용자를 사용하여 다음을 수행합니다.Database Migration Service에서 복제 지연을 쿼리할 수 있도록 다음 함수를 정의합니다.
CREATE OR REPLACE FUNCTION pg_stat_replication_user() RETURNS TABLE ( pid integer , usesysid oid , username name , application_name text , client_addr inet , client_hostname text , client_port integer , backend_start timestamp with time zone , backend_xmin xid , state text , sent_location pg_lsn , write_location pg_lsn , flush_location pg_lsn , replay_location pg_lsn , sync_priority integer , sync_state text ) LANGUAGE SQL SECURITY DEFINER AS $$ SELECT * FROM pg_catalog.pg_stat_replication; $$;
다음 명령어를 실행하여 USER에
EXECUTE
권한을 부여합니다.REVOKE EXECUTE ON FUNCTION pg_stat_replication_user() FROM public;
GRANT EXECUTE ON FUNCTION pg_stat_replication_user() to {replication_user};
옵션 2: 소스 인스턴스에 연결하는 데 사용된 USER에 직접
SUPERUSER
권한을 부여합니다. 이렇게 하면 Database Migration Service가 복제 지연을 직접 읽을 수 있습니다.옵션 3: 다음 쿼리를 사용하여 복제 지연을 독립적으로 추적합니다.
SELECT current_timestamp, application_name, pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.sent_location) AS sent_location_lag, pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.write_location) AS write_location_lag, pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.flush_location) AS flush_location_lag, pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.replay_location) AS replay_location_lag FROM pg_stat_replication WHERE application_name like 'cloudsql%';
이 옵션에서 Database Migration Service는 그래프 또는 API 응답에 복제 지연 측정항목을 반영하지 않습니다.