개요
Database Migration Service는 소스 데이터베이스에서 AlloyDB 대상 데이터베이스로의 지속적 마이그레이션을 지원합니다.
PostgreSQL에 지원되는 소스 데이터베이스는 다음과 같습니다.
- Amazon RDS 9.6.10 이상, 10.5 이상, 11.1 이상, 12, 13, 14, 15, 16, 17
- Amazon Aurora 10.11 이상, 11.6 이상, 12.4 이상, 13.3 이상, 14, 15, 16, 17
- 자체 관리형 PostgreSQL (온프레미스 또는 완전히 제어하는 모든 Cloud VM) 9.4, 9.5, 9.6, 10, 11, 12, 13, 14, 15, 16, 17
- Cloud SQL 9.6, 10, 11, 12, 13, 14, 15, 16, 17
소스를 구성하려면 소스 인스턴스와 기본 소스 데이터베이스를 둘 다 구성해야 합니다.
소스 인스턴스 구성
소스 인스턴스를 구성하려면 다음 단계를 따르세요.
- 소스 인스턴스에는
postgres데이터베이스가 포함되어야 합니다. 이 데이터베이스가 없으면 새로 만드세요. - 소스 인스턴스에
pglogical패키지를 설치하고shared_preload_libraries변수에 포함되어 있는지 확인합니다.- 환경의 소스 인스턴스에 Install the
pglogicalpackage on the source instance 설치를 참조하세요.
- 환경의 소스 인스턴스에 Install the
소스 데이터베이스 구성
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를 사용하려면 마이그레이션되는 각 데이터베이스 (소스 인스턴스의 모든 데이터베이스)에 슬롯 하나가 필요합니다.
예를 들어 소스 인스턴스에 데이터베이스가 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를 사용하려면 마이그레이션되는 각 데이터베이스 (소스 인스턴스의 모든 데이터베이스)에 슬롯 하나가 필요합니다.
예를 들어 소스 인스턴스에 데이터베이스가 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를 사용하려면 마이그레이션되는 각 데이터베이스 (소스 인스턴스의 모든 데이터베이스)에 슬롯 하나가 필요합니다.
예를 들어 소스 인스턴스에 데이터베이스가 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 응답에 복제 지연 측정항목을 반영하지 않습니다.