외부 복제본 구성

이 페이지에서는 Cloud SQL 외부에 있는 하나 이상의 복제본으로 복제되는 Cloud SQL 인스턴스를 구성하는 방법과 외부 복제본 구성에서 마스터 인스턴스를 강등시켜 구성을 되돌리는 방법에 대해 설명합니다.

외부 복제본 구성에 대한 자세한 내용은 복제 구성에 관한 요구사항 및 팁을 참조하세요.

외부 복제본 구성 설정

시작하기 전에

이 작업을 시작하기 전에 Cloud SQL 인스턴스와 외부 복제본 요구사항을 충족하는 외부 MySQL 인스턴스를 보유하고 있어야 합니다.

마스터 인스턴스 구성

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

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

  2. 마스터 인스턴스에서 외부 복제본의 IP 주소에 대한 액세스를 사용 설정합니다.

    IP 액세스 사용 설정에 대한 자세한 내용은 IP 연결을 위한 액세스 구성을 참조하세요.

  3. 나중에 사용하기 위해 마스터 인스턴스의 IP 주소를 기록합니다.

    인스턴스의 개요 페이지에서 IP 주소를 확인할 수 있습니다.

  4. 오른쪽 상단에 있는 Cloud Shell 아이콘(Cloud Shell 아이콘)을 클릭합니다.

  5. Cloud Shell 프롬프트에서 기본 제공 mysql 클라이언트를 사용하여 마스터 인스턴스에 연결합니다.

    gcloud sql connect [MASTER_INSTANCE_NAME] --user=root
    
  6. 루트 비밀번호를 입력합니다.

    mysql 프롬프트가 표시됩니다.

  7. 복제를 위한 특별 사용자를 만듭니다.

    CREATE USER '[REPLICATION_USER]'@'%' IDENTIFIED BY '[REPLICATION_PASSWORD]';
    
  8. 복제 사용자에게 복제 권한을 부여합니다.

    GRANT REPLICATION SLAVE ON *.* TO '[REPLICATION_USER]'@'%';
    
  9. 데이터베이스를 마스터 인스턴스에서 Cloud Storage 버킷으로 내보냅니다.

    SQL 덤프 파일 만들기의 외부 복제 안내를 따릅니다.

  10. 복제본을 호스팅하는 머신에서 Cloud Storage Console의 파일을 클릭하여 내보내기 파일을 버킷에서 복제본으로 다운로드합니다.

외부 복제본 구성

2세대

  1. 복제본을 호스팅하는 머신에서 마스터 인스턴스에서 만든 내보내기 파일을 사용하여 새 외부 MySQL 인스턴스를 시드합니다.

    예를 들어 다음 명령어는 mysqldump.sql이라는 내보내기 파일을 로드합니다.

    mysql --user=root --password <  mysqldump.sql
    
  2. 이 복제본-마스터 쌍의 서버 ID를 결정합니다.

    이 서버 ID는 외부 복제본 구성 전체에서 고유한 숫자 값(예: '3')이어야 합니다(모든 복제본은 고유한 서버 ID가 있어야 함).

  3. 복제본의 my.cnf 옵션 파일에 다음 옵션을 추가합니다.
    [mysqld]
    server-id=[SERVER_ID]
    gtid_mode=ON
    enforce_gtid_consistency=ON
    log_slave_updates=ON
    replicate-ignore-db=mysql
    binlog-format=ROW
    log_bin=mysql-bin
    expire_logs_days=1
    read_only=ON
    

    MySQL 복제 옵션에 대한 자세한 내용은 복제 및 바이너리 로깅 옵션을 참조하세요

    .
  4. 구성 파일이 읽히도록 mysqld 프로세스를 다시 시작합니다.
  5. 복제본의 mysql 클라이언트에서 다음 명령어를 입력합니다.
    CHANGE MASTER TO MASTER_HOST='[MASTER_IP_ADDRESS]', MASTER_USER='[REPLICATION_USER]',
    MASTER_PASSWORD='[REPLICATION_PASSWORD]', MASTER_AUTO_POSITION=1;
    
  6. 복제본에 복제를 시작합니다.
    START SLAVE;
    
  7. 복제 상태를 확인합니다.

    SHOW SLAVE STATUS\G;
    

    'Waiting for master to send event'라고 표시되면 복제가 진행되고 있는 것입니다.

1세대

  1. 복제본을 호스팅하는 머신에서 마스터 인스턴스에서 만든 내보내기 파일을 사용하여 새 외부 MySQL 인스턴스를 시드합니다.

    예를 들어 다음 명령어는 mysqldump.sql이라는 내보내기 파일을 로드합니다.

    mysql --user=root --password <  mysqldump.sql
    
  2. 이 복제본-마스터 쌍의 서버 ID를 결정합니다.

    이 서버 ID는 외부 복제본 구성 전체에서 고유한 숫자 값(예: '3')이어야 합니다(모든 복제본은 고유한 서버 ID가 있어야 함).

  3. my.cnf 옵션 파일에 다음 예시와 유사한 줄을 추가하여 읽기 복제본에 서버 ID를 설정합니다.

    [mysqld]
    server-id=[SERVER_ID]
    

    MySQL 복제 옵션에 대한 자세한 내용은 복제 및 바이너리 로깅 옵션을 참조하세요

    .
  4. 구성 파일이 읽히도록 mysqld 프로세스를 다시 시작합니다.
  5. 내보내기 파일을 열고 CHANGE MASTER TO MASTER_LOG_FILE 명령어를 찾습니다.
  6. 해당 줄에서 앞의 대시('--')를 제외하고 복사하여 mysql 클라이언트에 붙여넣습니다.

    아직 Enter 키를 누르지 마세요.

  7. 마지막 세미콜론 앞에 MASTER_HOST, MASTER_USER, MASTER_PASSWORD 값을 삽입합니다.

    다음 예시와 비슷한 문이 될 것입니다.

    CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107,
    MASTER_HOST='[MASTER_IP_ADDRESS]', MASTER_USER='[REPLICATION_USER]', MASTER_PASSWORD='[REPLICATION_PASSWORD]';
    
  8. Enter 키를 눌러서 문을 실행합니다.
  9. 복제본에 복제를 시작합니다.

    START SLAVE;
    
  10. 복제 상태를 확인합니다.

    SHOW SLAVE STATUS\G;
    

    'Waiting for master to send event'라고 표시되면 복제가 진행되고 있는 것입니다.

외부 복제본의 마스터 강등

Cloud SQL 인스턴스에 외부 복제본이 있는 경우 구성을 되돌릴 수 있으며 그에 따른 변경사항은 다음과 같습니다.

  • 외부 복제본이 새 마스터 인스턴스가 됩니다.
  • Cloud SQL 인스턴스가 이전에 외부 복제본(지금은 소스 데이터베이스 서버로 지칭)이었던 서버에서 복제되는 읽기 복제본이 됩니다.

외부 복제본 구성을 되돌리려면 다음 안내를 따르세요.

  1. 소스 표현 인스턴스를 만듭니다.

    이 인스턴스는 강등 작업이 완료된 후 Cloud SQL 복제본에 대한 소스 데이터베이스 서버를 표현합니다.

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data '{
             "name": "[SOURCE_REPRESENTATION_NAME]",
             "region": "[REGION]",
             "databaseVersion": "[EXTERNAL_SERVER_MYSQL_VERSION]",
             "onPremisesConfiguration": {
                 "hostPort": "[EXTERNAL_SERVER_IP]:[EXTERNAL_SERVER_PORT]"
             }
         }' \
         -X POST \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances
    

    Cloud SQL 복제본을 상주시킬 지역을 사용합니다.

  2. 강등 절차를 시작합니다.

    이 API 호출을 사용할 때는 민감한 정보를 입력해야 하므로 명령줄에 데이터를 제공하지 말고 JSON 파일을 사용하여 데이터를 cURL에 제공해야 합니다.

    데이터 파일을 만듭니다.

    {
        "demoteMasterContext": {
            "replicaConfiguration": {
                "mysqlReplicaConfiguration": {
                    "username": "[MYSQL_REPLICATION_USERNAME]",
                    "password": "[PASSWORD]",
                    "caCertificate": "[EXTERNAL_SERVER_CA]",
                    "clientCertificate": "[CLIENT_CERT]",
                    "clientKey": "[PRIVATE_KEY]"
                }
            },
            "masterInstanceName": "[SOURCE_REPRESENTATION_NAME]",
        },
    }
    

    그런 다음 API를 호출합니다.

    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @[PATH_TO_DATA_FILE] \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]/demoteMaster
    

    SSL/TLS 옵션에 대한 자세한 내용은 SSL/TLS 옵션을 참조하세요. replicaConfiguration 객체에서 사용하는 속성에 대한 자세한 내용은 외부 서버에서 복제를 참조하세요.

  3. 외부 복제본이 마스터 인스턴스에서 대기 중인 모든 트랜잭션을 완료할 때까지 기다립니다.

    복제본이 포착되면 SHOW SLAVE STATUS 명령어에서 Seconds Behind Master가 0으로 표시되고 외부 복제본과 Cloud SQL 마스터의 Executed_Gtid_Set 값이 동일해집니다.

  4. mysql 클라이언트를 사용해 외부 복제본의 복제를 중지합니다.

    STOP SLAVE
    RESET SLAVE ALL
    
  5. Cloud SQL 인스턴스가 소스 데이터베이스 서버에 해당하는 외부 서버에서 복제를 시작할 때까지 기다립니다.

    Cloud SQL 인스턴스에서 SHOW SLAVE STATUS 명령어를 실행하면 복제 상태를 확인할 수 있습니다.

  6. Cloud SQL 인스턴스가 소스 데이터베이스 서버에서 복제를 성공적으로 마치면 소스 데이터베이스 서버의 read_only 플래그를 off로 설정하고 소스 데이터베이스 서버를 가리키도록 애플리케이션을 업데이트합니다.

다음 단계