이 페이지에서는 Cloud SQL에 대한 복제를 위해 외부 서버를 구성하고, Cloud SQL에서 소스 표현 인스턴스를 만들고, Cloud SQL에 데이터를 복제하는 방법을 설명합니다. 복제 단계를 진행하려면 먼저 이 페이지의 모든 단계를 완료해야 합니다.
이 페이지에 설명된 단계 대신 Database Migration Service는 외부 서버에서 Cloud SQL로 지속적 복제 또는 일회성 데이터베이스 마이그레이션을 제공합니다.
시작하기 전에
용어
외부 서버. 데이터를 복제하려는 Cloud SQL 외부의 PostgreSQL 서버입니다. 소스 데이터베이스 또는 외부 데이터베이스 서버라고도 합니다. 다른 Cloud SQL 인스턴스이거나 온프레미스, Amazon 관계형 데이터베이스 서비스(RDS) 등과 같은 다른 데이터베이스 서버일 수 있습니다.
소스 표현 인스턴스. Cloud SQL 복제본에 대한 외부 서버를 나타내는 Cloud SQL 인스턴스의 모델입니다. Google Cloud 콘솔에서 볼 수 있고 일반 Cloud SQL 인스턴스와 비슷하게 표시되지만 데이터를 포함하거나, 구성 또는 유지보수가 필요하거나, 결제에 영향을 주지 않습니다.
Cloud SQL 복제본. 외부 서버에서 복제하는 Cloud SQL 인스턴스. 외부 기본 읽기 복제본이라고도 합니다.
복제 사용자 계정. 외부 서버와 Cloud SQL 복제본 간의 복제를 허용할 권한이 충분한 외부 서버의 PostgreSQL 사용자 계정입니다.
관리형 가져오기. 외부 서버에서 Cloud SQL 복제본으로 직접 데이터를 가져오는 프로세스입니다. 이 경우 Cloud SQL은 복제 사용자 계정을 사용하여 외부 서버에 연결하고 외부 서버에서 직접 데이터 덤프를 실행하여 Cloud SQL 복제본으로 서버를 가져옵니다.
Google Cloud 프로젝트 설정
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud SQL Admin API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud SQL Admin API.
-
사용자 계정에 Cloud SQL 관리자, 스토리지 관리자, Compute 뷰어 역할이 있는지 확인합니다.
Google Cloud SDK 설치
복제를 구성하려면 외부 서버에 대해 Google Cloud SDK를 설치합니다. 이미 다른 곳에 설치되어 있지 않은 한 외부 서버에 SDK를 설치할 수 있습니다.
복제용 외부 서버 설정
Cloud SQL은 소스 데이터베이스에서 Cloud SQL 대상 데이터베이스로의 지속적 마이그레이션을 지원합니다.
PostgreSQL에 지원되는 소스 데이터베이스는 다음과 같습니다.
- 자체 관리형(온프레미스 또는 완전히 제어하는 모든 Cloud VM) PostgreSQL 9.4, 9.5, 9.6, 10, 11, 12, 13, 14, 15, 16
- Amazon RDS 9.6.10 이상, 10.5 이상, 11.1 이상, 12, 13, 14, 15, 16
- Amazon Aurora 10.11 이상, 11.6 이상, 12.4 이상, 13.3 이상, 14, 15, 16
- Cloud SQL 9.6, 10, 11, 12, 13, 14, 15, 16
소스를 구성하려면 소스 인스턴스와 기본 소스 데이터베이스를 둘 다 구성해야 합니다.
외부 서버 체크리스트
발신 비공개 IP 주소가 고정이 아니어서 Cloud SQL 복제본을 비공개 IP 주소로 사용 설정한 경우, Cloud SQL 복제본이 비공개 네트워크로 사용하는 VPC 네트워크의 비공개 서비스 액세스에 할당된 내부 IP 범위를 허용하도록 외부 서버의 방화벽을 구성하세요.
Cloud SQL 대상 인스턴스가 ipConfiguration 설정의 privateNetwork 필드로 사용하는 VPC 네트워크의 비공개 서비스 연결에 할당된 전체 내부 IP 범위를 허용하도록 소스 데이터베이스 서버의 방화벽을 구성해야 합니다.
내부 IP 범위를 찾으려면 다음 안내를 따르세요.
Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.
사용할 VPC 네트워크를 선택합니다.
비공개 서비스 연결 탭을 클릭합니다.
소스 인스턴스 구성
소스 인스턴스를 구성하려면 다음 단계를 따르세요.
- 소스 인스턴스에
postgres
데이터베이스가 없으면 이 데이터베이스를 만듭니다. - 소스 인스턴스에 pglogical 패키지를 설치합니다.
필요에 따라 다음 매개변수를 설정합니다.
소스 PostgreSQL 인스턴스가 Amazon RDS이면 새 매개변수 그룹에 이러한 매개변수를 포함하고 매개변수 그룹을 인스턴스에 연결합니다.
소스가 Cloud SQL인 경우
cloudsql.logical_decoding
및cloudsql.enable_pglogical
플래그를on
으로 설정합니다.Cloud SQL에서 플래그를 사용 설정하려면 데이터베이스 플래그 구성을 참조하세요.
다음 명령어를 사용하여
pglogical
을 포함하도록shared_preload_libraries
를 설정합니다.ALTER SYSTEM SET shared_preload_libraries = 'pglogical';
다음 명령어를 사용하여
wal_level
을logical
로 설정합니다.ALTER SYSTEM SET wal_level = 'logical';
소스 PostgreSQL 인스턴스가 Amazon RDS인 경우
logical
수준에서 WAL 로그를 사용 설정하려면rds.logical_replication
매개변수를1
로 설정합니다.다음 명령어를 사용하여
wal_sender_timeout
을0
으로 설정합니다.ALTER SYSTEM SET wal_sender_timeout = 0;
0
값은 비활성 복제 연결을 종료하는 데 사용되는 제한 시간 메커니즘을 중지합니다.max_replication_slots를 소스 인스턴스가 지원할 수 있는 최대 복제 슬롯 수로 설정합니다. #를 숫자로 바꾼 후 다음 명령어를 사용합니다.
ALTER SYSTEM SET max_replication_slots = #;
Cloud SQL에서는 마이그레이션되는 데이터베이스마다 1개의 슬롯이 필요합니다. 최소한 연결이 예상되는 구독 수와 테이블 동기화를 위한 약간의 비축분을 지정합니다.
예를 들어 소스 인스턴스에 5개의 데이터베이스가 있고 소스에 대한 2개의 마이그레이션 작업이 생성된 경우 복제 슬롯 수는 5 * 2 = 10개 이상을 이미 사용 중인 복제 슬롯 수와 합한 값이어야 합니다.
인스턴스에서 이미 사용한 발신자 수에 최소한
max_replication_slots
와 동일한 수를 합한 값으로 max_wal_senders를 설정합니다. #를 동시에 실행되는 총 WAL 발신자 프로세스 수로 바꿔 다음 명령어를 사용합니다.ALTER SYSTEM SET max_wal_senders = #;
예를 들어
max_replication_slots
매개변수가10
으로 설정되어 있고 이미 발신자를 2개 사용 중인 경우 동시에 실행되는 WAL 발신자 프로세스 수는 10+2 = 12개입니다.max_worker_processes를 인스턴스에서 이미 사용한 작업자 프로세스 수에 최소한 소스 인스턴스의 데이터베이스 수를 합한 값으로 설정합니다. #를 총 숫자로 바꾼 후 다음 명령어를 사용합니다.
ALTER SYSTEM SET max_worker_processes = #;
- Cloud SQL 복제본에서 비공개 IP를 사용하는 경우 복제본 VPC 네트워크의 비공개 서비스 액세스에 할당된 내부 IP 범위를 허용하도록 외부 서버의 방화벽을 구성합니다.
- 구성 변경사항을 적용하려면 소스 인스턴스를 다시 시작합니다.
이 단계에서 설정하는 매개변수는 실행 중인 PostgreSQL 데이터베이스 서버에 적용됩니다. postgresql.conf
파일에 변경사항을 포함하여 변경사항을 영구적으로 적용할 수도 있습니다.
9.6 이전 PostgreSQL 버전의 복제 지연 모니터링 사용 설정
9.6 이전 PostgreSQL 버전에서 마이그레이션하는 경우 복제 지연 측정항목이 기본적으로 제공되지 않습니다. 다음 세 가지 방법 중 하나를 사용하면 이 측정항목을 추적하고 데이터베이스를 승격할 때 다운타임을 최소화할 수 있습니다.
옵션 1: Cloud SQL 외부 서버에 특정 쿼리에 대한 액세스 권한을 부여하여 복제 지연을 추적하도록 사용 설정합니다.
SUPERUSER
권한이 있는 사용자를 사용하여 다음을 수행합니다.외부 서버에서 복제 지연을 쿼리할 수 있도록 다음 함수를 정의합니다.
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; $$;
다음 명령어를 실행하여
EXECUTE
권한을 사용자에게 부여합니다.REVOKE EXECUTE ON FUNCTION pg_stat_replication_user() FROM public;
GRANT EXECUTE ON FUNCTION pg_stat_replication_user() to {replication_user};
옵션 2: 소스 인스턴스에 연결하는 데 사용된 사용자에게 직접
SUPERUSER
권한을 부여합니다. 그러면 외부 서버가 복제 지연을 직접 읽을 수 있습니다.옵션 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%';
이 옵션에서 Cloud SQL은 그래프 또는 API 응답에 복제 지연 측정항목을 반영하지 않습니다.
소스 데이터베이스 구성
Cloud SQL 외부 서버는 다음을 제외한 소스 인스턴스의 모든 데이터베이스를 마이그레이션합니다.
- 온프레미스 소스: 템플릿 데이터베이스
template0
,template1
- Amazon RDS 소스:
template0
,template1
,rdsadmin
- Cloud SQL 소스: 템플릿 데이터베이스
template0
,template1
위 목록에 포함되지 않은 소스 인스턴스의 각 데이터베이스에서 다음을 수행합니다.
pglogical
확장 프로그램을 설치하려면 소스 인스턴스의 모든 데이터베이스에서 다음 명령어를 실행합니다.CREATE EXTENSION IF NOT EXISTS pglogical
기본 키가 없는 테이블의 경우 Cloud SQL은 변경 데이터 캡처(CDC) 단계에서 초기 스냅샷과
INSERT
문의 마이그레이션을 지원합니다.UPDATE
및DELETE
문을 수동으로 마이그레이션하세요.인스턴스에 연결하고 다음 명령어를 실행하여 마이그레이션된 각 데이터베이스와 기본
postgres
데이터베이스에서 사용자의 권한을 설정합니다.소스 인스턴스에 연결하는 데 사용하는 사용자가 연결 프로필 페이지에서 사용자로 구성됩니다. 새 사용자를 만들거나 기존 사용자를 재사용할 수 있습니다.
정보 스키마와
pg_
로 시작하는 스키마를 제외한 마이그레이션할 각 데이터베이스의 모든 스키마에서 다음 명령어를 실행합니다.GRANT USAGE on SCHEMA schema to username; GRANT SELECT on ALL SEQUENCES in SCHEMA schema to username; GRANT SELECT on ALL TABLES in SCHEMA schema to username;
마이그레이션할 각 데이터베이스에서 다음 명령어를 실행합니다.
GRANT USAGE on SCHEMA pglogical to PUBLIC;
소스 데이터베이스에서 모든 데이터베이스의 복제 정보를 가져오려면 다음 명령어를 실행합니다.
GRANT SELECT on ALL TABLES in SCHEMA pglogical to username;
소스가 Amazon RDS인 경우 다음 명령어를 실행합니다.
GRANT rds_replication to username;
그렇지 않으면 다음 명령어를 실행합니다.
ALTER USER username with REPLICATION;
소스 표현 인스턴스 설정
소스 표현 인스턴스는 외부 서버를 참조합니다. 여기에는 외부 서버의 요청 데이터만 포함됩니다. 요청 데이터를 만들고 Cloud SQL에서 소스 표현 인스턴스를 만드는 curl
명령어에 사용합니다.
요청 데이터 만들기
요청 데이터에는 JSON 형식의 소스 데이터베이스 서버에 대한 기본 정보가 포함됩니다. 요청 데이터는 공개 또는 비공개 네트워크의 Cloud SQL 복제본에 대해 구성될 수 있으며 다음 정보를 포함해야 합니다.
source.json
{ "name": "SOURCE_NAME", "region": "REGION", "databaseVersion": "DATABASE_VERSION", "onPremisesConfiguration": { "hostPort": "SOURCE_HOST", "username": "USERNAME", "password": "PASSWORD", "caCertificate": "SOURCE_CERT", "clientCertificate": "CLIENT_CERT", "clientKey": "CLIENT_KEY" } }
관리형 가져오기 예시
// example of source.json for external server that
// - initiates replication from a Cloud SQL managed import
// - doesn't use SSL/TSL
{
"name": "cloudsql-source-instance",
"region": "us-central1",
"databaseVersion": "POSTGRES_9_6",
"onPremisesConfiguration": {
"hostPort": "192.0.2.0:3306",
"username": "replicationUser",
"password": "486#@%*@"
}
}
속성 | 설명 |
---|---|
SOURCE_NAME | 생성할 소스 표현 인스턴스의 이름입니다. |
REGION | 소스 표현 인스턴스를 배치할 리전입니다. |
DATABASE_VERSION | 외부 서버에서 실행되는 데이터베이스 버전입니다. 옵션은 POSTGRES_9_6 , POSTGRES_10 ,
POSTGRES_11 , POSTGRES_12 , POSTGRES_13 , POSTGRES_14 , POSTGRES_15 , 또는 POSTGRES_16 입니다. |
SOURCE HOST | 외부 서버의 IPv4 주소 및 포트 또는 외부 서버의 DNS 주소입니다.
외부 서버가 Cloud SQL에서 호스팅되는 경우 포트는 5432 입니다. |
USERNAME | 외부 서버의 복제 사용자 계정입니다. |
PASSWORD | 복제 사용자 계정의 비밀번호입니다. |
BUCKET | 덤프 파일이 포함된 버킷의 이름입니다. Cloud Storage 버킷에 있는 덤프 파일로 복제를 설정하는 경우에만 포함합니다. |
DUMP_FILE | 외부 서버의 데이터가 포함된 버킷의 파일입니다. |
CLIENT_CA_CERT | 외부 서버의 CA 인증서입니다. 외부 서버에서 SSL/TLS가 사용되는 경우에만 포함합니다. |
CLIENT_CERT | 외부 서버의 클라이언트 인증서. 서버-클라이언트 인증에만 필요합니다. 외부 서버에서 SSL/TLS가 사용되는 경우에만 포함합니다. |
CLIENT_KEY | 외부 서버에 있는 클라이언트 인증서의 비공개 키 파일입니다. 서버-클라이언트 인증에만 필요합니다. 외부 서버에서 SSL/TLS가 사용되는 경우에만 포함합니다. |
소스 표현 인스턴스를 만들기
이 단계를 시작하기 전에 소스 요청 데이터가 포함된 JSON 파일을 생성해야 합니다.
그런 다음 Cloud SQL에서 소스 표현 인스턴스를 만들려면 터미널을 열고 다음 명령어를 실행합니다.
curl
gcloud auth login ACCESS_TOKEN="$(gcloud auth print-access-token)" curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \ --header 'Content-Type: application/json' \ --data @JSON_PATH \ -X POST \ https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances
예시
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data @./source.json \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances
속성 | 설명 |
---|---|
PROJECT_ID | Google Cloud의 프로젝트 ID입니다. |
JSON_PATH | 외부 서버에 대한 요청 데이터가 포함된 JSON 파일의 경로입니다. |
소스 표현 인스턴스 업데이트
외부 서버에서 요청 데이터를 업데이트하는 경우 기존 소스 표현 인스턴스를 업데이트하여 수정된 값을 사용할 수 있습니다.
요청 데이터 수정
변경된 필드를 포함하도록 요청 데이터를 업데이트합니다. 여기에는 hostPort
, username
, password
, caCertificate
, clientCertificate
, clientKey
필드가 포함됩니다. 요청 데이터를 업데이트한 후 curl
명령어에 사용하여 요청 데이터를 Cloud SQL에서 인스턴스를 업데이트합니다.
다음 예시는 다른 사용자 이름 및 비밀번호로 username
및 password
필드를 업데이트하는 방법을 보여줍니다.
source.json
{ "name": "SOURCE_NAME", "region": "REGION", "databaseVersion": "DATABASE_VERSION", "onPremisesConfiguration": { "username": "NEW_USERNAME", "password": "NEW_PASSWORD" } }
관리형 가져오기 예시
// example of source.json for external server that
// - initiates replication from a Cloud SQL managed import
// - doesn't use SSL/TSL
{
"name": "cloudsql-source-instance",
"region": "us-central1",
"databaseVersion": "POSTGRES_9_6",
"onPremisesConfiguration": {
"username": "newReplicationUser",
"password": "525#@%*@"
}
}
속성 | 설명 |
---|---|
SOURCE_NAME | 소스 표현 인스턴스의 이름입니다. |
REGION | 소스 표현 인스턴스가 있는 리전입니다. |
DATABASE_VERSION | 외부 서버에서 실행되는 데이터베이스 버전입니다. 옵션은 POSTGRES_9_6 , POSTGRES_10 ,
POSTGRES_11 , POSTGRES_12 , POSTGRES_13 , POSTGRES_14 , POSTGRES_15 , 또는 POSTGRES_16 입니다. |
NEW_USERNAME | 외부 서버의 새로운 복제 사용자 계정입니다. |
NEW_PASSWORD | 새 계정의 비밀번호입니다. |
소스 표현 인스턴스 수정
이 단계를 시작하기 전에 수정된 요청 데이터가 포함된 JSON 파일을 생성해야 합니다.
그런 다음 Cloud SQL에서 소스 표현 인스턴스를 수정하려면 터미널을 열고 다음 명령어를 실행합니다.
curl
gcloud auth login ACCESS_TOKEN="$(gcloud auth print-access-token)" curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \ --header 'Content-Type: application/json' \ --data @JSON_PATH \ -X PATCH \ https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/SOURCE_NAME
예시
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data @./source.json \
-X PATCH \
https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/cloudsql-source-instance
속성 | 설명 |
---|---|
PROJECT_ID | Google Cloud의 프로젝트 ID입니다. |
JSON_PATH | 외부 서버에 대한 요청 데이터가 포함된 JSON 파일의 경로입니다. |
SOURCE_NAME | 소스 표현 인스턴스의 이름입니다. |
Cloud SQL 복제본 설정
Cloud SQL 복제본에 결국 외부 서버의 데이터가 포함됩니다. 이 단계에서는 요청 데이터를 만들고 Cloud SQL에서 Cloud SQL 복제본을 만드는 curl
명령어에 사용합니다.
요청 데이터 만들기
요청 데이터에는 외부 서버 및 Cloud SQL 복제본에 대한 기본 정보가 JSON 형식으로 포함됩니다. 요청 데이터는 공개 또는 비공개 네트워크의 Cloud SQL 복제본에 대해 구성될 수 있으며 다음 정보를 포함해야 합니다.
replica.json
{ "settings": { "tier": "TIER", "dataDiskSizeGb": "DISK_SIZE", "ipConfiguration": { "ipv4Enabled": "PUBLIC_IP_STATUS", "privateNetwork": "projects/PROJECT_ID/global/networks/NETWORK_NAME" }, "availabilityType": "AVAILABILITY_TYPE" }, "masterInstanceName": "SOURCE_REPRESENTATION_INSTANCE_NAME", "region": "SOURCE_REGION", "databaseVersion": "DATABASE_VERSION", "name": "REPLICA_NAME" }
예시
{ "settings": { "tier": "db-custom-4-15360", "dataDiskSizeGb": "100" }, "masterInstanceName": "source-instance", "region": "us-central1", "databaseVersion": "POSTGRES_14", "name": "replica-instance" }
속성 | 설명 |
---|---|
TIER | 복제본 인스턴스를 호스팅할 머신 유형 사용할 머신 유형을 모르면 db-custom-2-7680 으로 시작합니다. 필요한 경우 나중에 크기 및 기타 지원되는 값을 변경할 수 있습니다. |
DISK_SIZE | Cloud SQL 복제본의 스토리지 크기(GB)입니다. |
PUBLIC_IP_STATUS | 인스턴스에 공개 IP 주소가 할당되었는지 여부를 결정합니다. 기본적으로 이 속성의 값은 true 입니다.
복제본에 대해 공개 IP 주소 할당을 중지하려면 값을 false 로 설정합니다.
프로젝트에 constraints/sql.restrictPublicIp 조직 정책 사용 설정한 경우 Cloud SQL 복제본을 만들려면 ipv4Enabled 속성 값을 false 로 설정해야 합니다. 공개 IP 주소 할당 중지에 대한 자세한 내용은 공개 IP 사용 중지를 참조하세요. |
PROJECT_ID | Cloud SQL 복제본이 비공개 네트워크에 있으면 replica.json 파일에 privateNetwork 속성을 포함합니다.
PROJECT_ID의 경우 Google Cloud에서 프로젝트의 ID를 지정합니다. |
NETWORK_NAME | Cloud SQL 복제본에 사용할 비공개 네트워크의 이름입니다. |
AVAILABILITY_TYPE | Cloud SQL 복제본의 가용성 유형입니다. 기본값은 ZONAL 입니다. 복제본을 HA로 만들려면 값을 REGIONAL 로 설정합니다. 허용되는 값에 대한 자세한 내용은 SqlAvailabilityType을 참조하세요.
외부 서버 HA 복제본을 만든 후에는 이를 비HA 복제본으로 변경할 수 없습니다. 반대의 경우도 마찬가지입니다. 외부 서버 비HA 복제본을 HA 복제본으로 변경할 수 없습니다. 인스턴스가 아직 초기 데이터를 로드할 때 수동 장애 조치를 시도하면 마이그레이션이 복구할 수 없는 상태로 되거나 인스턴스가 소스에서 이미 복제되는 경우 일시적인 다운타임이 발생할 수 있습니다. 복제 상태를 확인합니다. |
SOURCE_REPRESENTATION_INSTANCE_NAME | 소스 표현 인스턴스의 이름입니다. |
SOURCE_REGION | 소스 표현 인스턴스에 할당된 리전입니다. |
DATABASE_VERSION | Cloud SQL 복제본에서 사용할 데이터베이스 버전입니다. 이 버전의 옵션은 POSTGRES_9_6 , POSTGRES_10 , POSTGRES_11 , POSTGRES_12 , POSTGRES_13 , POSTGRES_14 , POSTGRES_15 또는 POSTGRES_16 입니다.
외부 서버에서 실행 중인 데이터베이스 버전과 일치시키거나 해당 값을 최대 한 버전 뒤로 합니다. |
REPLICA_NAME | 만들 Cloud SQL 복제본의 이름입니다. |
Cloud SQL 복제본 만들기
이 단계를 시작하기 전에 복제본 요청 데이터가 포함된 JSON 파일을 생성해야 합니다. 그런 다음 Cloud SQL 복제본을 만들려면 Cloud Shell 터미널을 열고 다음 명령어를 실행합니다.
curl
gcloud auth login ACCESS_TOKEN="$(gcloud auth print-access-token)" curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \ --header 'Content-Type: application/json' \ --data @JSON_PATH \ -X POST \ https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances
예시
gcloud auth login ACCESS_TOKEN="$(gcloud auth print-access-token)" curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \ --header 'Content-Type: application/json' \ --data @./replica.json \ -X POST \ https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances
속성 | 설명 |
---|---|
PROJECT_ID | Google Cloud에서 소스 인스턴스와 동일해야 하는 프로젝트의 ID입니다. |
JSON_PATH | Cloud SQL 복제본에 대한 요청 데이터가 포함된 JSON 파일의 경로입니다. |
설정 확인
인스턴스가 올바르게 설정되었는지 확인하려면 Cloud SQL 인스턴스 페이지로 이동합니다.
다음과 비슷한 목록에 소스 표현 인스턴스 및 Cloud SQL 복제본이 표시됩니다.
인스턴스 ID | 유형 | 공개 IP |
---|---|---|
(-) source-representation-instance | 데이터베이스 외부 기본 | 10.68.48.3:5432 |
복제 인스턴스 | 데이터베이스 읽기 복제본 | 34.66.48.59 |
또한 Cloud SQL 복제본에 대한 cloudsql.instances.migrate
권한이 있어야 합니다. 이 권한은 cloudsql.admin
또는 cloudsql.editor
IAM 역할에 포함되어 있습니다.
Cloud SQL 복제본에 사용자를 추가합니다.
외부 서버에서 데이터베이스 사용자 계정을 가져올 수 없지만 Cloud SQL 복제본에서 이를 만들 수 있습니다. 외부 서버에서 복제하기 전에 이 작업을 수행합니다.
Cloud SQL 복제본의 발신 IP 주소 확인
Cloud SQL 복제본의 발신 IP 주소를 사용하여 외부 서버와 Cloud SQL 복제본 간의 보안 연결을 만들 수 있습니다. 이 IP 주소에 대한 요금은 청구되지 않습니다.
콘솔
복제본의 발신 IP 주소를 가져오려면 다음을 수행합니다.
-
Google Cloud 콘솔에서 Cloud SQL 인스턴스 페이지로 이동합니다.
Cloud SQL 복제본의 공개 IP 주소 옆에 있는 추가 정보 도움말 위에 마우스 포인터를 올려놓고 발신 IP 주소를 검색합니다.
발신 IP 주소는 Google Cloud 콘솔에서 복제본의 기본 목록에 표시되는 IP 주소가 아닙니다.
gcloud
복제본의 발신 IP 주소를 가져오려면 다음 명령어를 실행합니다.
gcloud sql instances describe REPLICA_NAME --format="default(ipAddresses)"
속성 | 설명 |
---|---|
REPLICA_NAME | 발신 공개 IP 주소를 검색하려는 Cloud SQL 복제본의 이름입니다. |
외부 서버에서 들어오는 연결 허용
복제가 성공하려면 Cloud SQL 복제본이 외부 서버에 연결되어야 합니다. 다음 조건이 적용되는 경우 Cloud SQL 복제본의 발신 IP 주소에서 연결을 수락하도록 외부 서버의 네트워크 방화벽을 구성해야 합니다.
- 외부 서버가 방화벽 뒤에 있거나 일부 다른 네트워크 제한이 적용됩니다.
- Cloud SQL 복제본이 공개 IP를 사용합니다.
Cloud SQL 복제본에 연결하려면 복제본의 기본 IP 주소를 사용합니다. 이 IP 주소는 Google Cloud 콘솔에 표시됩니다.
Cloud SQL 복제본으로 복제할 수 있도록 소스 표현 인스턴스 업데이트
Cloud SQL 복제본의 소스 표현 인스턴스를 설정한 후에는 소스 표현 인스턴스를 업데이트해야 할 수 있습니다. 예를 들어 다음과 같은 경우 구성을 업데이트해야 합니다.
- 외부 서버의 호스트, 포트 또는 IP가 변경된 경우
- 다른 PostgreSQL 복제 사용자를 사용하려는 경우
- PostgreSQL 복제 사용자의 비밀번호가 변경된 경우
- 외부 서버에 안전하게 연결하는 데 사용되는 SSL 인증서가 변경된 경우
Cloud SQL 복제본 시드
외부 서버에서 Cloud SQL 복제본으로 데이터를 처음 로드하는 경우 관리형 가져오기를 사용하세요. 외부 서버에서 데이터를 추출하고 Cloud SQL 인스턴스로 직접 가져오는 서비스가 사용됩니다. 자세한 내용은 관리형 가져오기를 사용하여 외부 데이터베이스에서 복제 설정을 참조하세요.
복제 모니터링
Cloud SQL 복제본은 초기 데이터 로드를 완료하면 외부 서버에 연결하고 내보내기 작업 후 실행된 모든 업데이트를 적용합니다. 복제 상태를 확인합니다.
복제본을 독립 실행형 인스턴스로 승격하기 전에 복제 상태를 확인하는 것이 중요합니다. 복제 프로세스가 성공적으로 완료되지 않으면 승격된 복제본에 외부 서버의 모든 변경사항이 포함되지 않습니다.
복제 지연이 0에 가깝지 않은 경우 이를 해결하기 위한 단계를 수행합니다.
/postgresql/external_sync/initial_sync_complete
, postgresql/external_sync/max_replica_byte_lag
, database/replication/state
측정항목을 확인하는 것이 좋습니다. Cloud SQL 측정항목 목록을 확인합니다.
Cloud SQL 복제본이 외부 서버를 따라잡고 Cloud SQL 복제본에 복제 지연이 없으면 데이터베이스에 연결합니다. 적절한 데이터베이스 명령어를 실행하여 외부 서버와 비교할 때 콘텐츠가 예상대로인지 확인합니다. 필요한 검증이 완료될 때까지 외부 서버를 보존합니다.
연쇄 복제본 설정
마이그레이션 후에는 Cloud SQL 복제본을 승격하기 전에 Cloud SQL 복제본 아래에 연쇄 읽기 복제본을 만들 수 있습니다.
연쇄 복제본을 만들려면 다음 명령어를 실행합니다.
콘솔
-
Google Cloud 콘솔에서 Cloud SQL 인스턴스 페이지로 이동합니다.
- 만들려는 복제본의 상위 요소 역할을 할 복제본의 복제본 탭을 클릭합니다.
- 복제본 만들기를 클릭합니다.
- 읽기 복제본 만들기 페이지에서 인스턴스 ID를 비롯해 이름, 리전, 영역 등의 기타 구성 옵션을 업데이트합니다.
- 만들기를 클릭합니다.
Cloud SQL은 복제본을 만듭니다. 상위 복제본의 인스턴스 페이지가 다시 표시됩니다.
- 만들려는 새 연쇄 복제본마다 4~6단계를 수행합니다.
gcloud
--master-instance-name
플래그를 사용하여 Cloud SQL 복제본을 기본 인스턴스로 지정하여 새 복제본을 만듭니다.- REPLICA_NAME: 만들려는 복제본의 고유 ID
- PARENT_REPLICA_NAME: Cloud SQL 복제본의 이름
복제본이 생성되면 기본 인스턴스의 변경사항이 연쇄 복제본 체인의 모든 복제본을 통해 복제되는 것을 확인할 수 있습니다.
gcloud sql instances create REPLICA_NAME \ --master-instance-name=PARENT_REPLICA_NAME \
curl
- 상위 복제본 아래에 복제본을 만들려면 다음 JSON 코드 샘플을 수정하고
request.json
파일에 저장합니다.{ "masterInstanceName": "EXTERNAL_SERVER_REPLICA_NAME", "project": "PROJECT_ID", "name": "REPLICA_NAME", "region": "REPLICA_REGION", "settings": { "tier": "MACHINE_TYPE", } }
- 다음 명령어를 실행합니다.
curl -X POST -H "Authorization: Bearer "$(gcloud auth print-access-token) -H "Content-Type: application/json; charset=utf-8" -d @request.json "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances"
복제본 승격
다음 단계를 수행하여 복제본을 승격합니다.
- 복제본을 기본 인스턴스로 승격.
- 인스턴스에 읽기 복제본 추가
- 선택사항: 고가용성(HA)에 대한 인스턴스 구성.
추가 다운타임을 방지하려면
AVAILABILITY_TYPE
을REGIONAL
로 설정하여 복제본을 설정하는 동안 HA를 사용 설정할 수 있습니다.
제한사항
Cloud SQL에서 지원하지 않는 외부 소스 데이터베이스에 확장 프로그램을 설치하는 경우 데이터베이스를 대상 인스턴스로 마이그레이션할 때 Cloud SQL에서 이러한 확장 프로그램을 마이그레이션하지 않습니다. 원활한 마이그레이션을 위해 확장 프로그램을 참조하는 객체나 애플리케이션이 없는지 확인합니다. 마이그레이션을 진행하기 전에 소스 데이터베이스의 참조와 함께 확장 프로그램을 삭제하는 것이 좋습니다.
Cloud SQL에서 지원하는 확장 프로그램에 대한 자세한 내용은 PostgreSQL 확장 프로그램 구성을 참조하세요.
외부 소스 데이터베이스에
pg_cron
확장 프로그램을 설치한 경우 데이터베이스를 대상 인스턴스로 마이그레이션하면 Cloud SQL에서 확장 프로그램 또는 확장 프로그램과 연관된cron
설정을 마이그레이션하지 않습니다. 데이터베이스를 마이그레이션하고 복제본을 승격한 후에는 마이그레이션된 각 데이터베이스에서pg_cron
확장 프로그램을 다시 사용 설정하는 것이 좋습니다.
다음 단계
- 관리형 가져오기를 사용하여 외부 데이터베이스에서 복제 설정 방법 알아보기