읽기 복제본 만들기

이 페이지에서는 Cloud SQL 인스턴스의 읽기 복제본을 만드는 방법을 설명합니다.

읽기 복제본은 기본 인스턴스의 복사본으로 기본 인스턴스의 변경사항을 거의 실시간으로 반영합니다. 복제본을 만들어 기본 인스턴스의 읽기 요청이나 분석 트래픽을 오프로드합니다.

복제 작동 방식에 대한 자세한 내용은 Cloud SQL의 복제를 참조하세요.

시작하기 전에

이 인스턴스의 첫 번째 복제본을 만드는 경우 인스턴스가 기본 인스턴스의 요구사항을 충족하는지 확인합니다. 자세히 알아보기

읽기 복제본 만들기

읽기 복제본을 만드는 단계는 아래와 같습니다.

Console

  1. Google Cloud Console의 Cloud SQL 인스턴스 페이지로 이동합니다.

    Cloud SQL 인스턴스 페이지로 이동

  2. 복제본을 만들 인스턴스를 찾고 목록 맨 오른쪽에 있는 more actions 메뉴를 엽니다.
  3. 읽기 복제본 만들기를 선택합니다.

    이 옵션이 표시되지 않으면 인스턴스가 복제본인 것입니다. 복제본의 복제본은 만들 수 없습니다.

  4. 인스턴스의 백업 및 바이너리 로깅이 사용 설정된 경우 6단계를 진행합니다. 그렇지 않으면 백업 자동화바이너리 로깅 사용 설정을 선택하고 계속을 클릭한 후 저장 및 다시 시작을 클릭하여 인스턴스를 다시 시작합니다.

    바이너리 로깅을 사용 설정하면 인스턴스가 다시 시작됩니다.

  5. 읽기 복제본 만들기 페이지에서 인스턴스 ID를 업데이트합니다. 필요한 경우 이름, 리전, 영역 등의 기타 구성 옵션을 필요에 맞게 업데이트합니다.
  6. 만들기를 클릭합니다.

    Cloud SQL이 백업을 만들고, 필요한 경우 복제본을 만듭니다. 기본 인스턴스에 대한 인스턴스 페이지로 돌아갑니다.

gcloud

  1. 기본 인스턴스의 상태를 확인합니다.
    gcloud sql instances describe [PRIMARY_INSTANCE_NAME]

    databaseReplicationEnabled 속성이 true인 경우 인스턴스는 복제본입니다. 복제본의 복제본은 만들 수 없습니다.

  2. backupConfiguration 아래의 enabled 속성이 false이면 기본 인스턴스에 백업을 사용 설정합니다.
    gcloud sql instances patch [PRIMARY_INSTANCE_NAME] --backup-start-time [HH:MM]
    backup-start-time 매개변수는 UTC±00 시간대의 24시간 형식으로 지정되며 백업 기간(4시간)의 시작 시간을 지정합니다. 백업 기간에는 언제든지 백업이 시작될 수 있습니다.
  3. binaryLogEnabled 속성이 false이면 바이너리 로그를 사용 설정합니다.
    gcloud sql instances patch --enable-bin-log [PRIMARY_INSTANCE_NAME]
    바이너리 로그를 사용 설정하면 인스턴스가 다시 시작됩니다.
  4. 복제본을 만듭니다.
    gcloud sql instances create [REPLICA_NAME] --master-instance-name=[PRIMARY_INSTANCE_NAME]
    

    필요한 경우 --tier 매개변수를 사용하여 다른 등급 크기를 지정할 수 있습니다.

    --region 매개변수를 사용하여 다른 리전을 지정할 수 있습니다.

    기본 인스턴스에 비공개 IP 주소만 있는 경우 명령어에 --no-assign-ip 매개변수를 추가합니다.

REST

  1. 현재 백업 구성 확인

    인스턴스 리소스의 get 메서드를 사용하여 데이터베이스 버전과 기본 인스턴스의 현재 백업 구성을 반환합니다.

    아래의 요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • project-id: 프로젝트 ID
    • primary-instance-name: 기본 인스턴스 이름

    HTTP 메서드 및 URL:

    GET https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/primary-instance-name

    요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

    다음과 유사한 JSON 응답이 표시됩니다.

  2. 복제 필드가 설정되었는지 확인

    enabled 또는 binaryLogEnabledfalse이면 인스턴스 리소스의 patch 메서드를 사용하여 둘 다 사용 설정합니다. 요청에서 변경하려는 백업 구성의 속성을 지정합니다.

    백업을 사용 설정하려면 enabledtrue로, startTimeHH:MM 형식의 시간으로 설정합니다. startTime 매개변수는 UTC±00 시간대의 24시간 형식으로 지정되며 백업 기간(4시간)의 시작 시간을 지정합니다. 백업 기간에는 언제든지 백업이 시작될 수 있습니다.

    point-in-time recovery를 사용 설정하려면 binaryLogEnabledtrue로 설정합니다.

    아래의 요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • project-id: 프로젝트 ID
    • instance-id: 인스턴스 ID
    • start-time 'HH:MM' 형식의 시간

    HTTP 메서드 및 URL:

    PATCH https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

    JSON 요청 본문:

    {
      "settings":
      {
        "backupConfiguration":
        {
          "startTime": "start-time",
          "enabled": true,
          "binaryLogEnabled": true
        }
      }
    }
    

    요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

    다음과 유사한 JSON 응답이 표시됩니다.

  3. 읽기 복제본 만들기

    인스턴스 리소스의 insert 메서드를 사용하여 읽기 복제본을 만듭니다. databaseVersion 속성은 기본 인스턴스와 동일해야 합니다. 리전 간 읽기 복제본의 경우 기본 인스턴스의 리전이 아닌 다른 리전을 지정합니다.

    아래의 요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • project-id: 프로젝트 ID
    • primary-instance-name: 기본 인스턴스 이름
    • primary-instance-region: 기본 인스턴스의 리전
    • replica-region: 복제본 인스턴스의 리전
    • replica-name: 복제본 인스턴스의 이름
    • machine-type: 머신(등급) 유형의 열거형 문자열. 예를 들면 'db-n1-standard-4'입니다.

    HTTP 메서드 및 URL:

    POST https://www.googleapis.com/sql/v1beta4/projects/project-id/instances

    JSON 요청 본문:

    {
      "masterInstanceName": "primary-instance-name",
      "project": "project-id",
      "name": "replica-name",
      "region": "replica-region",
      "settings":
      {
        "tier": "machine-type",
        "settingsVersion": 0,
      }
    }
    

    요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

    다음과 유사한 JSON 응답이 표시됩니다.

문제 해결

자세한 내용을 보려면 표의 링크를 클릭하세요.

문제 설명 문제 원인 해결 방법
생성 시 읽기 복제본이 복제를 시작하지 않았습니다. 바이너리 로깅이 사용 설정된 후에 백업이 최소 한 개 이상 생성되어 있어야 합니다. 바이너리 로그를 사용 설정한 후 백업이 하나 이상 생성될 때까지 기다립니다.
읽기 복제본을 만들 수 없음 - 알 수 없는 오류 여러 근본 원인이 있을 수 있습니다. 로그에서 자세한 내용을 확인하세요.
디스크가 가득 참 복제본을 만드는 동안 기본 인스턴스 디스크 크기가 가득 찰 수 있습니다. 기본 인스턴스를 더 큰 디스크 크기로 업그레이드합니다.
복제본 인스턴스가 너무 많은 메모리를 사용 복제본은 자주 요청되는 읽기 작업을 캐시할 수 있습니다. 임시 메모리 공간을 회수하려면 복제본 인스턴스를 다시 시작합니다.
복제가 중지되었습니다. 최대 저장공간에 도달했고 저장용량 자동 증가가 사용 설정되지 않았습니다. 저장용량 자동 증가를 사용 설정합니다.
긴 복제 지연 시간이 지속적으로 발생합니다. 다양한 근본 원인이 있을 수 있습니다. 여기에서 몇 가지 기능을 사용해 보세요.

생성 시 읽기 복제본이 복제를 시작하지 않음

생성 시 읽기 복제본이 복제를 시작하지 않았습니다.

문제 원인

기본 인스턴스에는 적어도 일주일 동안의 binlog가 있어야 합니다. 그렇지 않으면 복제본이 복제를 시작할 수 없습니다.

해결 방법

충분한 binlog가 생성될 때까지 기다립니다.


읽기 복제본을 만들 수 없음 - 알 수 없는 오류

읽기 복제본을 만들 수 없음 - unknown error.

문제 원인

로그 파일에 더 구체적인 오류가 있을 수 있습니다.

해결 방법

Cloud Logging의 로그를 검사하여 실제 오류를 찾습니다. 오류가 set Service Networking service account as servicenetworking.serviceAgent role on consumer project이면 Service Networking API를 사용 중지했다가 다시 사용 설정합니다. 이렇게 하면 프로세스를 계속 진행하는 데 필요한 서비스 계정이 생성됩니다.


디스크가 가득 참

UPDATE_DISK_SIZE 또는 mysqld: disk is full 오류

문제 원인

복제본을 만드는 동안 기본 인스턴스 디스크 크기가 가득 찰 수 있습니다.

해결 방법

기본 인스턴스를 수정하여 더 큰 디스크 크기로 업그레이드합니다.


복제본 인스턴스가 너무 많은 메모리를 사용

복제본 인스턴스가 너무 많은 메모리를 사용하고 있습니다.

문제 원인

복제본은 임시 메모리를 사용하여 자주 요청되는 읽기 작업을 캐시하므로 기본 인스턴스보다 더 많은 메모리를 사용할 수 있습니다.

해결 방법

복제본 인스턴스를 다시 시작하여 임시 메모리 공간을 회수합니다.


복제 중지됨

복제가 중지되었습니다.

문제 원인

최대 저장용량 한도에 도달했고 >automatic storage increase is disabled.

해결 방법

인스턴스를 수정하여 automatic storage increase를 사용 설정합니다.


긴 복제 지연 시간이 지속적으로 발생함

긴 복제 지연 시간이 지속적으로 발생합니다.

문제 원인

쓰기 부하가 너무 높아 복제본이 처리할 수 없습니다. 복제본의 SQL 스레드가 IO 스레드를 따라잡을 수 없는 경우 복제 지연이 발생합니다. 일부 쿼리 또는 워크로드로 인해 특정 스키마에서 일시적이거나 영구적인 복제 지연이 발생할 수 있습니다. 복제 지연이 발생하는 일반적인 원인은 다음과 같습니다.

  • 복제본에 대한 쿼리의 속도가 느립니다. log_slow_slave_statements를 사용 설정하여 이러한 쿼리를 검색한 후 수정하면 됩니다.
  • 모든 테이블에 고유/기본 키가 있어야 합니다. 테이블에 고유/기본 키가 없으면 업데이트할 때마다 복제본에서 전체 테이블 검사를 수행해야 합니다.
  • DELETE ... WHERE field < 50000000과 같은 쿼리의 경우 복제본에 다수의 업데이트가 쌓이게 되므로 행 기준 복제에서 복제 지연이 발생합니다.

해결 방법

가능한 해결책은 다음과 같습니다.

  • 인스턴스를 수정하여 복제본 크기를 늘립니다.
  • 데이터베이스의 부하를 줄입니다.
  • 테이블 색인을 생성합니다.
  • 느린 쿼리를 식별하고 수정합니다.
  • 복제본을 다시 만듭니다.

다음 단계