이 페이지에서는 Cloud SQL 인스턴스의 읽기 복제본을 만드는 방법을 설명합니다.
외부 구독자에 대해 게시자로 작동하도록 Cloud SQL 인스턴스를 설정하려면 외부 복제본 구성을 참조하세요.
읽기 복제본은 일반적인 상황에서 거의 실시간으로 기본 인스턴스의 변경사항을 반영하는 기본 인스턴스의 사본입니다. 읽기 복제본을 사용하여 기본 인스턴스의 읽기 요청이나 분석 트래픽을 오프로드합니다.
또한 재해 복구를 위해 리전 마이그레이션을 수행할 수 있습니다. 복제본이 리전 간 복제본인 경우 다른 리전으로 장애 조치를 수행할 수 있습니다. 특히 복제본을 독립형 인스턴스로 승격할 수 있습니다(이 경우 기존 복제본은 해당 인스턴스를 기본 인스턴스로 간주하지 않음).
복제 작동 방식에 대한 자세한 내용은 Cloud SQL의 복제를 참조하세요.
시작하기 전에
이 인스턴스의 첫 번째 복제본을 만드는 경우 인스턴스가 기본 인스턴스의 요구사항을 충족하는지 확인합니다. 자세히 알아보기
읽기 복제본 만들기
기본 인스턴스당 최대 8개의 읽기 복제본을 만들 수 있습니다.읽기 복제본을 만드는 단계는 아래와 같습니다.
Console
-
Google Cloud 콘솔에서 Cloud SQL 인스턴스 페이지로 이동합니다.
- 복제본을 만들 인스턴스를 찾은 후 등록정보 옆에 있는
more actions
메뉴를 엽니다. - 읽기 복제본 만들기를 선택합니다.
해당 선택 옵션이 표시되지 않으면 인스턴스가 복제본인 것입니다. 복제본의 복제본을 만들 수 없습니다.
인스턴스 맞춤설정 섹션에서 복제본의 설정을 업데이트합니다. 구성 옵션 표시를 클릭하여 설정 그룹을 표시합니다. 그런 다음 원하는 그룹을 펼쳐 설정을 검토하고 맞춤설정합니다. 선택한 모든 옵션의 요약이 오른쪽에 표시됩니다. 이 설정을 맞춤설정하는 것은 선택사항입니다. 맞춤설정이 수행되지 않는 모든 경우에 기본값이 할당됩니다.
각 설정에 대한 자세한 내용은 인스턴스 설정 정보 페이지를 참조하세요.
- 복제본 만들기를 클릭합니다.
Cloud SQL이 백업을 만들고, 필요한 경우 복제본을 만듭니다. 기본 인스턴스에 대한 인스턴스 페이지로 돌아갑니다.
gcloud
복제본을 만듭니다.
gcloud sql instances create REPLICA_NAME \ --master-instance-name=PRIMARY_INSTANCE_NAME
필요한 경우 --tier
매개변수를 사용하여 다른 등급 크기를 지정할 수 있습니다.
--region
매개변수를 사용하여 다른 리전을 지정할 수 있습니다.
기본 인스턴스에 내부 IP 주소만 있으면 명령어에 --no-assign-ip
매개변수를 추가합니다.
다른 인스턴스 설정에 매개변수를 더 추가할 수 있습니다. 자세한 내용은 gcloud sql instances create를 참조하세요.
복제본을 기본 인스턴스와 동일한 VPC 네트워크에 만들어야 합니다. 또한 이 VPC 네트워크에 allocated-ip-range-name
을 지정할 수 있습니다. 범위가 지정되지 않으면 복제본이 무작위 범위로 생성됩니다.
Terraform
읽기 복제본을 만들려면 Terraform 리소스를 사용합니다.
REST v1beta4
인스턴스 리소스의 insert
메서드를 사용하여 읽기 복제본을 만듭니다. region과 databaseVersion 속성이 마스터와 같아야 합니다.
요청 데이터를 사용하기 전에 다음을 바꿉니다.
- project-id: 프로젝트 ID
- database-version: Enum 버전 문자열(예: SQLSERVER_2017_ENTERPRISE)
- primary-instance-name: 기본 인스턴스 이름
- primary-instance-region: 기본 인스턴스의 리전
- replica-region: 복제본 인스턴스의 리전
- replica-name: 복제본 인스턴스의 이름
- machine-type: 머신 유형의 열거형 문자열 (예: 'db-custom-1-3840')
HTTP 메서드 및 URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances
JSON 요청 본문:
{ "masterInstanceName": "primary-instance-name", "project": "project-id", "databaseVersion": "database-version", "name": "replica-name", "region": "replica-region", "settings": { "tier": "machine-type", "settingsVersion": 0, } }
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
다음과 비슷한 JSON 응답이 표시됩니다.
Private Service Connect가 사용 설정된 인스턴스에 읽기 복제본 만들기
Private Service Connect가 사용 설정된 인스턴스의 읽기 복제본을 만들려면 gcloud CLI 또는 API를 사용합니다. 이 복제본은 기본 인스턴스와 같은 리전 또는 다른 리전(리전 간 읽기 복제본)에 만들 수 있습니다.
다른 연결 유형의 인스턴스에서 읽기 복제본을 복제할 수 없습니다. 예를 들어 Private Service Connect가 사용 설정된 인스턴스는 다른 Private Service Connect 인스턴스에서만 복제할 수 있습니다. 또한 외부 IP 연결을 지원하는 인스턴스 또는 비공개 서비스 액세스로 구성된 인스턴스에서 복제할 수 없습니다.
gcloud
인스턴스의 읽기 복제본을 만들려면 gcloud sql instances create
명령어를 사용합니다.
gcloud sql instances create REPLICA_INSTANCE_NAME \ --master-instance-name=PRIMARY_INSTANCE_NAME \ --project=PROJECT_ID \ --region=REGION_NAME \ --enable-private-service-connect \ --allowed-psc-projects=ALLOWED_PROJECTS \ --availability-type=AVAILABILITY_TYPE \ --no-assign-ip
다음을 바꿉니다.
- REPLICA_INSTANCE_NAME: 복제본 인스턴스의 이름입니다.
- PRIMARY_INSTANCE_NAME: 기본 인스턴스 이름입니다.
- PROJECT_ID: 인스턴스가 포함된 Google Cloud 프로젝트의 ID 또는 프로젝트 번호입니다.
- REGION_NAME: 복제본 인스턴스의 리전 이름입니다.
ALLOWED_PROJECTS: 허용되는 프로젝트 ID 또는 숫자의 목록(쉼표로 구분). 프로젝트가 이 목록에 포함되지 않은 경우 이를 사용하여 인스턴스를 만들고 Private Service Connect를 사용 설정할 수 없습니다.
Cloud SQL은 기본 인스턴스에 허용되는 프로젝트를 복제본으로 복사하지 않습니다. 복제본마다 Private Service Connect 엔드포인트를 만들어야 합니다. Cloud SQL 인증 프록시 또는 Cloud SQL 언어 커넥터를 사용하는 경우 복제본에 DNS 영역과 DNS 레코드를 만들어야 합니다.
- AVAILABILITY_TYPE: 인스턴스에 고가용성을 사용 설정합니다. 이 매개변수에 대해 다음 값 중 하나를 지정합니다.
REGIONAL
: 고가용성을 사용 설정하며, 프로덕션 인스턴스에 권장됩니다. 인스턴스는 선택한 리전 내의 다른 영역으로 장애 조치됩니다.ZONAL
: 장애 조치 기능을 제공하지 않습니다. 이 설정이 기본 설정입니다.
인스턴스의 고가용성 설정 및 삭제에 대한 자세한 내용은 기존 인스턴스를 고가용성으로 구성 및 인스턴스의 고가용성 비활성화를 참조하세요.
REST v1
요청 데이터를 사용하기 전에 다음을 바꿉니다.
- PRIMARY_INSTANCE_NAME: 기본 인스턴스 이름입니다.
- PROJECT_ID: 인스턴스가 포함된 Google Cloud 프로젝트의 ID 또는 프로젝트 번호입니다.
- REPLICA_INSTANCE_NAME: 복제본 인스턴스의 이름입니다.
- REGION_NAME: 복제본 인스턴스의 리전 이름입니다.
- MACHINE_TYPE: 인스턴스의 머신 유형입니다.
- AVAILABILITY_TYPE: 인스턴스에 고가용성을 사용 설정합니다. 이 매개변수에 대해 다음 값 중 하나를 지정합니다.
REGIONAL
: 고가용성을 사용 설정하며, 프로덕션 인스턴스에 권장됩니다. 인스턴스는 선택한 리전 내의 다른 영역으로 장애 조치됩니다.ZONAL
: 장애 조치 기능을 제공하지 않습니다. 이 설정이 기본 설정입니다.
인스턴스의 고가용성 설정 및 삭제에 대한 자세한 내용은 기존 인스턴스를 고가용성으로 구성 및 인스턴스의 고가용성 비활성화를 참조하세요.
ALLOWED_PROJECTS: 허용되는 프로젝트 ID 또는 숫자의 목록(쉼표로 구분). 프로젝트가 이 목록에 포함되지 않은 경우 이를 사용하여 인스턴스를 만들고 Private Service Connect를 사용 설정할 수 없습니다.
Cloud SQL은 기본 인스턴스에 허용되는 프로젝트를 복제본으로 복사하지 않습니다. 복제본마다 Private Service Connect 엔드포인트를 만들어야 합니다. Cloud SQL 인증 프록시 또는 Cloud SQL 언어 커넥터를 사용하는 경우 복제본에 DNS 영역과 DNS 레코드를 만들어야 합니다.
HTTP 메서드 및 URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances
JSON 요청 본문:
{ "masterInstanceName": "PRIMARY_INSTANCE_NAME", "project": "PROJECT_ID", "databaseVersion": "SQLSERVER_2019_STANDARD", "name": "REPLICA_INSTANCE_NAME", "region": "REGION_NAME", "kind": "sql#instance", "settings": { "tier": "MACHINE_TYPE", "availabilityType": "AVAILABILITY_TYPE", "settingsVersion": 0, "ipConfiguration": { "ipv4Enabled": false, "pscConfig": { "allowedConsumerProjects": [ALLOWED_PROJECTS], "pscEnabled": true } }, "kind": "sql#settings", "pricingPlan": "PER_USE", "replicationType": "ASYNCHRONOUS", "tier": "MACHINE_TYPE" } }
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
다음과 비슷한 JSON 응답이 표시됩니다.
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/REPLICA_INSTANCE_NAME", "status": "PENDING", "user": "user@example.com", "insertTime": "2020-01-16T02:32:12.281Z", "operationType": "CREATE_REPLICA", "name": "OPERATION_ID", "targetId": "REPLICA_INSTANCE_NAME", "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID", "targetProject": "PROJECT_ID" }
REST v1beta4
요청 데이터를 사용하기 전에 다음을 바꿉니다.
- PRIMARY_INSTANCE_NAME: 기본 인스턴스 이름입니다.
- PROJECT_ID: 인스턴스가 포함된 Google Cloud 프로젝트의 ID 또는 프로젝트 번호입니다.
- REPLICA_INSTANCE_NAME: 복제본 인스턴스의 이름입니다.
- REGION_NAME: 복제본 인스턴스의 리전 이름입니다.
- MACHINE_TYPE: 인스턴스의 머신 유형입니다.
- AVAILABILITY_TYPE: 인스턴스에 고가용성을 사용 설정합니다. 이 매개변수에 대해 다음 값 중 하나를 지정합니다.
REGIONAL
: 고가용성을 사용 설정하며, 프로덕션 인스턴스에 권장됩니다. 인스턴스는 선택한 리전 내의 다른 영역으로 장애 조치됩니다.ZONAL
: 장애 조치 기능을 제공하지 않습니다. 이 설정이 기본 설정입니다.
인스턴스의 고가용성 설정 및 삭제에 대한 자세한 내용은 기존 인스턴스를 고가용성으로 구성 및 인스턴스의 고가용성 비활성화를 참조하세요.
ALLOWED_PROJECTS: 허용되는 프로젝트 ID 또는 숫자의 목록(쉼표로 구분). 프로젝트가 이 목록에 포함되지 않은 경우 이를 사용하여 인스턴스를 만들고 Private Service Connect를 사용 설정할 수 없습니다.
Cloud SQL은 기본 인스턴스에 허용되는 프로젝트를 복제본으로 복사하지 않습니다. 복제본마다 Private Service Connect 엔드포인트를 만들어야 합니다. Cloud SQL 인증 프록시 또는 Cloud SQL 언어 커넥터를 사용하는 경우 복제본에 DNS 영역과 DNS 레코드를 만들어야 합니다.
HTTP 메서드 및 URL:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances
JSON 요청 본문:
{ "masterInstanceName": "PRIMARY_INSTANCE_NAME", "project": "PROJECT_ID", "databaseVersion": "SQLSERVER_2019_STANDARD", "name": "REPLICA_INSTANCE_NAME", "region": "REGION_NAME", "kind": "sql#instance", "settings": { "tier": "MACHINE_TYPE", "availabilityType": "AVAILABILITY_TYPE", "settingsVersion": 0, "ipConfiguration": { "ipv4Enabled": false, "pscConfig": { "allowedConsumerProjects": [ALLOWED_PROJECTS], "pscEnabled": true } }, "kind": "sql#settings", "pricingPlan": "PER_USE", "replicationType": "ASYNCHRONOUS", "tier": "MACHINE_TYPE" } }
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
다음과 비슷한 JSON 응답이 표시됩니다.
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_NAME", "status": "PENDING", "user": "user@example.com", "insertTime": "2020-01-16T02:32:12.281Z", "operationType": "CREATE_REPLICA", "name": "OPERATION_ID", "targetId": "REPLICA_INSTANCE_NAME", "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID", "targetProject": "PROJECT_ID" }
연쇄 복제본 만들기
이 섹션에서는 연쇄 복제본을 만들고 관리하는 방법을 설명합니다.
연쇄 복제본 작동 방식에 대한 자세한 내용은 연쇄 복제본을 참조하세요.
시작하기 전에
기본 인스턴스에는 연쇄 가능한 복제본이 있어야 합니다. 다음 섹션에서는 계층화 가능한 복제본을 만드는 단계를 제공합니다.
계층화 가능한 복제본 만들기 단계
연쇄 가능한 복제본을 만들 때는 기본 인스턴스와 다른 리전에 복제본을 만들어야 합니다.
cascadable-replica
플래그를 설정하여 계층화 가능한 복제본을 구성합니다.
gcloud
--master-instance-name
플래그를 사용하여 기본 인스턴스를 지정하고 --cascadable-replica
플래그를 사용하여 새 복제본을 만듭니다.
gcloud sql instances create REPLICA_NAME \ --master-instance-name=PRIMARY_INSTANCE_NAME \ --cascadable-replica \ --region=REGION
다음을 바꿉니다.
- REPLICA_NAME: 만들려는 복제본의 고유 ID
- PRIMARY_INSTANCE_NAME: 기본 인스턴스 이름입니다.
- REGION: 새 복제본을 만들려는 리전입니다. 이 리전은 기본 인스턴스의 리전과 달라야 합니다.
복제본은 기본 인스턴스와 동일한 VPC 네트워크에 만들어야 합니다. 해당 VPC 네트워크에서 할당된 IP 범위 이름을 지정할 수도 있습니다. 범위가 지정되지 않으면 복제본이 무작위 범위로 생성됩니다.
다른 인스턴스 설정에 매개변수를 더 추가할 수 있습니다. 예를 들면
--tier
매개변수를 사용하여 다른 머신 등급 크기를 지정할 수 있습니다.-
기본 인스턴스에 비공개 IP 주소만 있으면 명령어에
--no-assign-ip
매개변수를 추가합니다.
인스턴스 설정에 매개변수를 추가하는 방법에 관한 자세한 내용은 gcloud sql instances create를 참고하세요.
계층화 가능한 복제본이 생성된 후 계층화 복제본을 만들 수 있습니다.
curl
- 기본 인스턴스 아래에 계층화 가능한 복제본을 만들려면 다음 JSON 코드 샘플을 수정하고
request.json
파일에 저장합니다.요청 데이터를 사용하기 전에 다음을 바꿉니다.
- PROJECT_ID: 프로젝트 ID입니다.
- DATABASE_VERSION: 데이터베이스 버전의 열거형 문자열입니다. 예를 들면
SQLSERVER_2017_ENTERPRISE.
입니다. - PRIMARY_INSTANCE_NAME: 기본 인스턴스 이름입니다.
- PRIMARY_INSTANCE_REGION: 기본 인스턴스의 리전
- REPLICA_REGION: 복제본 인스턴스의 리전
- REPLICA_NAME: 복제본 인스턴스의 이름
- MACHINE_TYPE: 머신 유형의 열거형 문자열 예를 들면
db-custom-2-3840
입니다.
{ "masterInstanceName": "PRIMARY_INSTANCE_NAME", "project": "PROJECT_ID", "databaseVersion": "DATABASE_VERSION" "name": "REPLICA_NAME", "region": "REPLICA_REGION", "settings": { "tier": "MACHINE_TYPE", "settingsVersion": 0, } "replicaConfiguration": { "cascadableReplica": true } }
replicaConfiguration
섹션에서cascadadableReplica
필드가true
로 설정되어 있는지 확인합니다.- 다음 명령어를 실행합니다.
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"
계층화 가능한 복제본이 생성된 후 계층화 복제본을 만들 수 있습니다.
연쇄 복제본 만들기 단계
연쇄 복제본을 만들 때는 연쇄 복제본과 동일한 리전에 복제본을 만들어야 합니다.–master-instance-name
매개변수에 계층화 가능한 복제본의 이름을 제공하여 계층화 복제본을 구성합니다.
Console
-
Google Cloud 콘솔에서 Cloud SQL 인스턴스 페이지로 이동합니다.
- 만들려는 복제본의 상위 요소 역할을 할 복제본의 복제본 탭을 클릭합니다.
- 복제본 만들기를 클릭합니다.
- 읽기 복제본 만들기 페이지에서 인스턴스 ID를 비롯해 이름, 리전, 영역 등의 기타 구성 옵션을 업데이트합니다.
- 만들기를 클릭합니다.
Cloud SQL은 복제본을 만듭니다. 상위 복제본의 인스턴스 페이지가 다시 표시됩니다.
- 만들려는 새 연쇄 복제본마다 4~6단계를 수행합니다.
gcloud
--master-instance-name
플래그에서 계층화 가능한 복제본 인스턴스를 지정하여 새 복제본을 만듭니다.- REPLICA_NAME: 만들려는 복제본의 고유 ID
- CASCADABLE_REPLICA_NAME: 계층화 가능한 복제본의 이름
- 연쇄 복제본을 만든 후 기본 인스턴스에 수행된 변경사항이 연쇄 복제 체인에 있는 모든 복제본에 복제되었는지 확인할 수 있습니다.
gcloud sql instances create REPLICA_NAME \ --master-instance-name=CASCADABLE_REPLICA_NAME \
curl
- 계층화 가능한 복제본 아래에 계층화 복제본을 만들려면 다음 JSON 코드 샘플을 수정하고
request.json
파일에 저장합니다.{ "masterInstanceName": "CASCADABLE_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"
문제 해결
문제 | 문제 해결 |
---|---|
생성 시 읽기 복제본이 복제를 시작하지 않음 | 로그 파일에 더 구체적인 오류가 있을 수 있습니다. Cloud Logging의 로그를 검사하여 실제 오류를 찾으세요. |
읽기 복제본을 만들 수 없음 - invalidFlagValue 오류 | 요청의 플래그 중 하나가 잘못되었습니다. 명시적으로 제공한 플래그 또는 기본값으로 설정된 플래그일 수 있습니다.
먼저
|
읽기 복제본을 만들 수 없음 - 알 수 없는 오류 | 로그 파일에 더 구체적인 오류가 있을 수 있습니다.
Cloud Logging의 로그를 검사하여 실제 오류를 찾으세요.
오류가 |
디스크가 가득 참 | 복제본을 만드는 동안 기본 인스턴스 디스크 크기가 가득 찰 수 있습니다. 기본 인스턴스를 수정하여 더 큰 디스크 크기로 업그레이드합니다. |
복제본 인스턴스가 너무 많은 메모리를 사용하고 있습니다. | 복제본은 임시 메모리를 사용하여 자주 요청되는 읽기 작업을 캐시하므로 기본 인스턴스보다 더 많은 메모리를 사용할 수 있습니다.
복제본 인스턴스를 다시 시작하여 임시 메모리 공간을 회수합니다. |
복제가 중지되었습니다. | 최대 스토리지 한도에 도달했고 스토리지 자동 증가가 사용 설정되지 않았습니다.
인스턴스를 수정하여 |
긴 복제 지연 시간이 지속적으로 발생함 | 쓰기 부하가 너무 높아 복제본이 처리할 수 없습니다. 복제본의 SQL 스레드가 IO 스레드를 따라잡을 수 없는 경우 복제 지연이 발생합니다. 일부 쿼리 또는 워크로드로 인해 특정 스키마에서 일시적이거나 영구적인 복제 지연이 발생할 수 있습니다. 복제 지연이 발생하는 일반적인 원인은 다음과 같습니다.
가능한 솔루션은 다음과 같습니다.
|
제한 시간으로 인해 복제본을 만들지 못했습니다. | 기본 인스턴스에서 커밋되지 않은 장기 실행 트랜잭션으로 인해 읽기 복제본을 만들지 못할 수 있습니다.
실행 중인 모든 쿼리를 중지한 후 복제본을 다시 만듭니다. |