개요
Database Migration Service는 소스 데이터베이스에서 Cloud SQL 대상 데이터베이스로의 지속적 마이그레이션을 지원합니다.
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.6 이상, 15.2 이상, 16, 17
- 자체 관리형 PostgreSQL (온프레미스 또는 완전히 제어하는 모든 Cloud VM) 9.4, 9.5, 9.6, 10, 11, 12, 13, 14, 15, 16, 17
- PostgreSQL용 Cloud SQL 9.6, 10, 11, 12, 13, 14, 15, 16, 17
- PostgreSQL용 Microsoft Azure Database Flexible Server: 11 이상
소스를 구성하려면 소스 인스턴스와 기본 소스 데이터베이스를 둘 다 구성해야 합니다.
소스 인스턴스 구성
소스 인스턴스를 구성하려면 다음 단계를 따르세요.
- Cloud SQL 소스: 비공개 IP 연결을 사용하는 Cloud SQL 인스턴스에서 RFC 1918 이외의 주소 IP 범위를 사용하는 Cloud SQL 인스턴스로 이전하는 경우 소스 Cloud SQL 인스턴스의 네트워크 구성에 RFC 1918 이외의 범위를 추가합니다. Cloud SQL 문서의 승인된 네트워크 구성을 참고하세요.
- 소스 인스턴스에는
postgres
데이터베이스가 포함되어야 합니다. 이 데이터베이스가 없으면 새로 만드세요. 소스 인스턴스에
pglogical
패키지를 설치하고shared_preload_libraries
변수에 포함되어 있는지 확인합니다. 환경에 따라 소스 인스턴스에pglogical
패키지 설치를 참고하세요.소스 인스턴스의 확장 프로그램을 확인합니다. Database Migration Service는 Cloud SQL에서 지원되지 않는 확장 프로그램을 마이그레이션하지 않습니다. 이러한 확장 프로그램이 있더라도 마이그레이션이 차단되지는 않지만 원활한 마이그레이션 프로세스를 위해 객체나 애플리케이션이 지원되지 않는 확장 프로그램을 참조하지 않는지 확인하세요. 계속하기 전에 소스 데이터베이스에서 이러한 확장 프로그램과 참조를 삭제하는 것이 좋습니다.
pg_cron
확장 프로그램을 사용하는 소스:pg_cron
확장 프로그램 (또는 확장 프로그램과 연결된cron
설정)은 Database Migration Service에서 마이그레이션되지 않지만 PostgreSQL용 Cloud SQL 대상에서는 지원됩니다. 소스 데이터베이스에서pg_cron
확장 프로그램을 사용하는 경우 이전이 완료된 후 대상 인스턴스에 다시 설치할 수 있습니다.
소스 데이터베이스 구성
Database Migration Service는 다음 데이터베이스를 제외한 소스 인스턴스의 모든 데이터베이스를 마이그레이션합니다.
- 온프레미스 PostgreSQL 소스: 템플릿 데이터베이스
template0
,template1
- Amazon RDS 소스:
template0
,template1
,rdsadmin
- Cloud SQL 소스: 템플릿 데이터베이스
template0
,template1
- Microsoft Azure 소스의 경우:
azure_maintenance
,azure_sys
,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
패키지 설치
이 섹션에서는 소스 인스턴스에 따라 pglogical
패키지와 관련 매개변수를 구성하는 방법을 설명합니다.
온프레미스 또는 자체 관리형 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 = #;
명령어를 실행합니다. 여기서 #는 이전할 데이터베이스의 수를 나타냅니다.
- 구성 변경사항을 적용하려면 소스 인스턴스를 다시 시작합니다.
PostgreSQL용 Microsoft Azure Database
Microsoft Azure Database for PostgreSQL 소스를 구성하려면 다음 단계를 따르세요.
- 서버에 pglogical 패키지를 설치합니다.
PostgreSQL 버전 9.4 소스만 해당: 소스 인스턴스의 각 데이터베이스에 다음
pglogical
확장 프로그램을 설치합니다.CREATE EXTENSION IF NOT EXISTS pglogical;
CREATE EXTENSION IF NOT EXISTS pglogical_origin;
기타 모든 버전의 경우 소스 인스턴스의 각 데이터베이스(
CREATE EXTENSION IF NOT EXISTS pglogical
)에pglogical
확장 프로그램을 설치합니다.Microsoft Azure 포털을 사용하여 소스에 필요한 서버 매개변수를 구성합니다. 자세한 내용은 Microsoft 문서의 PostgreSQL용 Azure Database에서 서버 매개변수 구성 및 PostgreSQL용 Azure Database의 서버 매개변수를 참고하세요.
다음 매개변수를 구성합니다.
pglogical
을 포함하도록shared_preload_libraries
을 설정합니다.pglogical
을 포함하도록azure.extensions
을 설정합니다.wal_level
를logical
로 설정합니다.max_replication_slots
를 최소한 연결이 예상되는 구독 수와 테이블 동기화를 위한 약간의 비축분으로 설정합니다.max_replication_slots
매개변수는 소스 인스턴스가 지원할 수 있는 최대 복제 슬롯 수를 정의합니다.Database Migration Service를 사용하려면 마이그레이션되는 데이터베이스 (소스 인스턴스의 모든 데이터베이스)마다 1개의 슬롯이 필요합니다.
예를 들어 소스 인스턴스에 데이터베이스가 5개 있고 소스에 대한 마이그레이션 작업이 2개 생성된 경우 복제 슬롯 수는 5 * 2 = 10개 이상을 이미 사용 중인 복제 슬롯 수와 합한 값이어야 합니다. 조정된 데이터 덤프 병렬 처리 설정을 사용할 계획이라면 마이그레이션 작업을 만들 때 복제 슬롯 수를 늘리고 마이그레이션 작업 테스트를 실행하여 구성을 확인하세요.
max_wal_senders
를 인스턴스에서 이미 사용한 발신자 수에max_replication_slots
와 동일한 수를 더한 값으로 설정합니다.예를 들어
max_replication_slots
매개변수가10
으로 설정되어 있고 이미 발신자를 2개 사용 중인 경우 동시에 실행되는 WAL 발신자 프로세스 수는 10+2 = 12개입니다.조정된 데이터 덤프 병렬 처리 설정을 사용하려는 경우, 발신자 수를 늘리고 마이그레이션 작업을 만들 때 마이그레이션 작업 테스트를 실행하여 구성을 확인하세요.
max_worker_processes
를 Database Migration Service에서 마이그레이션할 데이터베이스 수 (소스 인스턴스의 모든 데이터베이스)와 인스턴스에서 이미 사용한max_worker_processes
수를 합한 값 이상으로 설정합니다.조정된 데이터 덤프 병렬 처리 설정을 사용할 계획이라면 마이그레이션 작업을 만들 때 워커 프로세스 수를 늘리고 마이그레이션 작업 테스트를 실행하여 구성을 확인하세요.
require_secure_transport
설정의 값을 확인합니다.기본적으로 Microsoft Azure 데이터베이스에서는 모든 수신 연결에 SSL/TLS 암호화가 필요합니다.
require_secure_transport
값에 따라 소스 연결 프로필을 만들 때 다음 암호화 설정 중 하나를 사용합니다.require_secure_transport
가on
로 설정된 경우 기본, TLS 또는 mTLS를 선택합니다.require_secure_transport
이off
로 설정된 경우 없음을 선택합니다.
- 구성 변경사항을 적용하려면 소스 인스턴스를 다시 시작합니다.
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
수를 합한 값 이상으로 설정합니다. 조정된 데이터 덤프 병렬 처리 설정을 사용하려면 마이그레이션 작업을 만들 때 작업자 프로세스 수를 늘리고 마이그레이션 작업 테스트를 실행하여 구성을 확인하세요.이 플래그의 기본값은 8입니다.
wal_sender_timeout
매개변수를0
로 설정합니다.ALTER SYSTEM SET wal_sender_timeout = 0;
0
값은 비활성 복제 연결을 종료하는 제한 시간 메커니즘을 중지합니다.- 플래그에 적용된 구성 변경사항이 적용될 수 있도록 소스 인스턴스를 다시 시작합니다.
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 응답에 복제 지연 측정항목을 반영하지 않습니다.