개요
Database Migration Service는 소스 데이터베이스에서 Cloud SQL 대상 데이터베이스로의 지속적 마이그레이션을 지원합니다.
PostgreSQL에 지원되는 소스 데이터베이스는 다음과 같습니다.
- Amazon RDS 9.6.10 이상, 10.5 이상, 11.1 이상, 12, 13, 14, 15, 16, 17, 18
- Amazon Aurora 10.11 이상, 11.6 이상, 12.4 이상, 13.3 이상, 14.6 이상, 15.2 이상, 16, 17, 18
- 자체 관리형 PostgreSQL (온프레미스 또는 완전히 제어하는 모든 Cloud VM) 9.4, 9.5, 9.6, 10, 11, 12, 13, 14, 15, 16, 17, 18
- PostgreSQL용 Cloud SQL 9.6, 10, 11, 12, 13, 14, 15, 16, 17, 18
- PostgreSQL용 Microsoft Azure Database Flexible Server: 11 이상
소스를 구성하려면 소스 인스턴스와 기본 소스 데이터베이스를 둘 다 구성해야 합니다.
소스 인스턴스 구성
소스 인스턴스를 구성하려면 다음 단계를 따르세요.
- Cloud SQL 소스: 비공개 IP 연결을 사용하는 Cloud SQL 인스턴스에서 RFC 1918 이외의 주소 IP 범위를 사용하는 Cloud SQL 인스턴스로 마이그레이션하는 경우 RFC 1918 이외의 범위 를 소스 Cloud SQL 인스턴스의 네트워크 구성에 추가합니다. 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소스 데이터베이스에서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를 사용하려면 마이그레이션되는 각 데이터베이스 (소스 인스턴스의 모든 데이터베이스)에 슬롯 하나가 필요합니다.
예를 들어 소스 인스턴스에 데이터베이스가 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
PostgreSQL용 Microsoft Azure Database 소스를 구성하려면 다음 단계를 따르세요.
- 서버에 pglogical 패키지를 설치합니다.
PostgreSQL 버전 9.4 소스만 해당: 소스 인스턴스의 각 데이터베이스에 다음
pglogical확장 프로그램을 설치합니다.CREATE EXTENSION IF NOT EXISTS pglogical;CREATE EXTENSION IF NOT EXISTS pglogical_origin;
다른 모든 버전: 소스 인스턴스의 각 데이터베이스에
pglogical확장 프로그램을 설치합니다.CREATE EXTENSION IF NOT EXISTS pglogicalMicrosoft Azure Portal을 사용하여 소스에서 필요한 서버 매개변수를 구성합니다. 자세한 내용은 Microsoft 문서의 PostgreSQL용 Azure Database에서 서버 매개변수 구성 및 PostgreSQL용 Azure Database에서 서버 매개변수를 참고하세요.
다음 매개변수를 구성합니다.
shared_preload_libraries를pglogical을 포함하도록 설정합니다.azure.extensions를pglogical을 포함하도록 설정합니다.wal_level을logical로 설정합니다.max_replication_slots를 연결이 예상되는 구독 수와 테이블 동기화를 위한 약간의 비축분을 합한 값 이상으로 설정합니다.max_replication_slots매개변수는 소스 인스턴스가 지원할 수 있는 최대 복제 슬롯 수를 정의합니다.Database Migration Service를 사용하려면 마이그레이션되는 각 데이터베이스 (소스 인스턴스의 모든 데이터베이스)에 슬롯 하나가 필요합니다.
예를 들어 소스 인스턴스에 데이터베이스가 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를 사용하려면 마이그레이션되는 각 데이터베이스 (소스 인스턴스의 모든 데이터베이스)에 슬롯 하나가 필요합니다.
예를 들어 소스 인스턴스에 데이터베이스가 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수를 합한 값 이상으로 설정합니다. 조정된 데이터 덤프 병렬 처리 설정을 사용하려는 경우 마이그레이션 작업을 만들 때 마이그레이션 작업 테스트를 실행하여 작업자 프로세스 수를 늘리고 구성 을 확인하세요.이 플래그의 기본값은 8 입니다.
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 응답에 복제 지연 측정항목을 반영하지 않습니다.