읽기 복제본 구성

IBM Cloud® Databases for MySQL 배포를 다른 Databases for MySQL 배포의 읽기 복제본으로 설정할 수 있습니다.

읽기 복제본은 비동기 복제를 사용하여 소스 인스턴스에서 복제본 배포로 모든 데이터를 복제하도록 설정됩니다. 이름에서 알 수 있듯이 읽기 복제본은 읽기 트랜잭션을 지원하며 쓰기 작업이 많은 데이터베이스와 읽기 작업이 많은 데이터베이스의 균형을 맞추는 데 사용할 수 있습니다. 소스 데이터베이스 인스턴스가 실패하는 경우 데이터 복구를 위해 읽기 복제본 승격을 사용할 수도 있습니다. 읽기 복제본에는 단일 MySQL 데이터 멤버가 있으며, 소스 데이터베이스 인스턴스와 동일한 멤버당 사용량 요금으로 청구됩니다.

복제본 고려 사항 읽기

  • 읽기 복제본은 소스 데이터베이스 인스턴스와 동일한 리전 또는 다른 리전에 존재할 수 있으므로 여러 리전에 걸쳐 데이터를 복제할 수 있습니다.

  • 읽기 복제본은 소스 데이터베이스 인스턴스와 동일한 주 버전이어야 합니다.

  • 읽기 복제본에서는 백업을 사용할 수 없습니다. 백업은 소스 데이터베이스 인스턴스에서만 수행됩니다.

  • EU 클라우드 사용 지역(현재 eu-de)에서/으로의 읽기 복제는 지원되지 않습니다. 해당 지역 내에서 지원됩니다.

  • 소스 인스턴스당 읽기 복제본은 5개로 제한됩니다.

  • 읽기 복제본은 소스 데이터베이스 인스턴스에 대한 선거에 참여하지 않으며 읽기 복제본으로의 장애 복구는 자동화되지 않습니다. 읽기 복제본을 전체 배포로 승격하는 것은 수동으로 사용자가 시작해야 하는 작업입니다.

  • 읽기 복제본의 최소 크기는 2GB RAM과 20GB 디스크입니다. 이는 소스 데이터베이스 인스턴스 배포 규모가 더 작은 경우에도 마찬가지입니다.

  • 읽기 복제본은 소스 데이터베이스 인스턴스와 일치하도록 자동 확장되지 않습니다. 저장하는 데이터의 양이 배포에 할당된 디스크를 초과하는 경우 읽기 복제본에서 디스크를 확장한 다음 소스 데이터베이스 인스턴스에서 디스크를 확장합니다. 읽기 복제본을 먼저 확장하면 읽기 복제본의 공간이 부족하지 않습니다. 소스 데이터베이스 인스턴스의 디스크를 공간이 아닌 성능을 위해 확장한 경우 읽기 복제본을 확장할 필요가 없습니다.

  • 복제는 비동기식이며 복제 지연이 발생할 수 있습니다. 기본적으로 일관성과 관련하여 기본 및 복제본 간에 통신이 없습니다. 읽기 복제본이 다시 동기화해야 할 만큼 충분히 뒤처질 수 있습니다. 복제본이 소스 데이터베이스 인스턴스에서 지리적으로 멀리 떨어진 지역에 있는 경우 복제 지연이 더 커질 수 있습니다.

  • 읽기 복제본은 단일 데이터 구성원이 있는 배포이며 내부 고가용성이 없습니다. 유지보수 중에 일시적인 중단과 작동 중지가 발생하기 쉽습니다. 읽기 복제본에 의존하는 애플리케이션이 있는 경우, 실패한 쿼리를 다시 시도하거나 여러 읽기 복제본에 걸쳐 부하를 분산하는 로직이 있어야 합니다.

리더

읽기 복제본이 프로비저닝되기 전 Databases for MySQL 배포의 읽기 복제본 탭에서 중앙 창에 읽기 복제본이 존재하지 않는다고 표시되고 만들기 버튼이 제공됩니다.

복제본 이전의 복제
이전의 복제

배포가 리더이고 이미 연결된 읽기 복제본이 있는 경우 복제 창에 복제본 배포 목록과 각 복제본에 대한 링크가 표시됩니다.

리더에 첨부된 복제본 목록
리더에 첨부된 복제본 목록

읽기 복제본 프로비저닝

리더의 읽기 복제 본 탭에서 읽기 복제본 만들기를 클릭하여 읽기 복제본을 프로비저닝할 수 있습니다. 소스 인스턴스가 자동으로 채워집니다. 읽기 복제본의 이름은 서비스 이름 필드에 자동으로 생성되지만 이름을 자유롭게 변경할 수 있습니다. 읽기 전용 복제본을 배치할 지역과 초기 메모리 할당을 선택할 수 있습니다. 디스크 크기, 버전, 퍼블릭 또는 프라이빗 엔드포인트는 소스 데이터베이스 인스턴스 배포의 설정과 일치하도록 자동으로 구성됩니다.

Key Protect를 사용하는 경우 CLI 및 API에서 프로비저닝할 때만 지원됩니다. 그렇지 않으면 읽기 복제본이 생성된 키로 암호화됩니다.

API 또는 CLI를 통해 프로비저닝

CLI 및 API를 통해 읽기 복제본을 프로비저닝하는 것은 표준 Databases for MySQL 배포를 프로비저닝하는 것과 유사하게 작동합니다. 프로비저닝은 리소스 컨트롤러에 의해 처리되며, {"remote_leader_id": "crn:v1:..."} 매개변수를 사용하여 프로비저닝할 복제본의 리더를 지정합니다.

예를 들어 CLI를 통해 읽기 복제본을 프로비저닝하는 경우입니다,

ibmcloud resource service-instance-create <replica_name> databases-for-mysql standard <region> \
-p \ '{
  "remote_leader_id": "crn:v1:bluemix:public:databases-for-mysql:us-south:a/54e8ffe85dcedf470db5b5ee6ac4a8d8:1b8f53db-fc2d-4e24-8470-f82b15c71819::",
  "members_memory_allocation_mb": "2048",
  "members_disk_allocation_mb": "10240"
}'

리소스 컨트롤러 API를 통해 읽기 복제본을 프로비저닝할 때도 동일한 매개 변수가 사용됩니다.

curl -X POST \
  https://resource-controller.cloud.ibm.com/v2/resource_instances \
  -H 'Authorization: Bearer <>' \
  -H 'Content-Type: application/json' \
    -d '{
    "name": "<replica_name>",
    "target": "<region>",
    "resource_group": "<your_resource_group_id>",
    "resource_plan_id": "databases-for-mysql-standard",
    "remote_leader_id": "crn:v1:bluemix:public:databases-for-mysql:us-south:a/54e8ffe85dcedf470db5b5ee6ac4a8d8:1b8f53db-fc2d-4e24-8470-f82b15c71819::",
    "members_memory_allocation_mb": "2048",
    "members_disk_allocation_mb": "10240"
  }'

CLI 및 API 명령 모두에서 RAM 및 디스크 양을 모두 지정해야 하며 최소 크기 2GB RAM 및 20GB 디스크를 기억해야 합니다. 읽기 복제본이 공개 또는 비공개 엔드포인트를 사용할지 여부를 선택적으로 지정할 수 있습니다. 읽기 복제본의 버전을 지정할 수 없습니다. 버전은 소스 데이터베이스 인스턴스 배포와 동일한 주 버전으로 자동 설정됩니다.

읽기 복제본

읽기 복제본의 읽기 복제본 탭에서 복제 창에는 해당 이름과 지역, 그리고 소스 데이터베이스 인스턴스의 이름과 지역이 포함됩니다. 또한 읽기 복제본을 다시 동기화하고 홍보할 수 있는 버튼도 있습니다.

읽기 복제본의 복제
복제본의 복제

복제 상태 확인

복제 상태는 자동으로 모니터되지 않으므로 복제를 모니터해야 합니다.

소스 데이터베이스 인스턴스에서 mysql 을 사용하여 읽기 복제본의 복제 상태와 복제 지연을 확인할 수 있습니다. mysql 으로 소스 데이터베이스 인스턴스 배포에 연결합니다 을 사용하여 관리자 자격 증명 을 추가합니다. 연결되면 다음 명령을 실행하십시오.

mysql> SHOW SLAVE STATUS \G

명령의 상태 보고서의 키 필드는 Seconds_Behind_Master: _입니다. 복제 SQL 스레드가 소스의 2진 로그를 처리하는 시간(초)입니다.

자세한 정보는 MySQL의 복제 상태 확인을 참조하십시오.

복제본 사용자 및 권한 읽기

  • 원본 데이터베이스 인스턴스의 모든 사용자(읽기 복제본 프로비저닝 이전에 존재하는 사용자도 포함)는 원본 데이터베이스 인스턴스에 있는 개체와 동일한 권한으로 읽기 복제본에 로그인하고 읽기 작업을 실행할 수 있습니다.

  • 소스 데이터베이스 인스턴스에 연결된 읽기 복제본이 둘 이상 있는 경우 소스에서 생성된 사용자는 다른 모든 읽기 복제본에도 생성됩니다.

  • 소스 데이터베이스 인스턴스에서 생성된 사용자는 독립 실행형 배포로 승격될 때 admin 사용자를 포함하여 읽기 복제본에 유지됩니다. 읽기 복제본이 승격되면 소스 데이터베이스 인스턴스의 모든 사용자에 대한 사용자 및 권한이 승격된 배포로 이전됩니다.

  • 모든 사용자의 읽기 복제본에 대한 쓰기 작업은 필터링되거나 거부되지 않지만 데이터베이스 수준에서 실패합니다.

  • 읽기 복제본에서 생성된 읽기 복제본 사용자는 SELECT 권한으로 소스 데이터베이스 인스턴스에 연결할 수 있습니다.

읽기 복제본 다시 동기화

읽기 복제본을 다시 동기화해야 하는 경우 읽기 복제본 다시 동기화 버튼을 클릭합니다. 재동기화는 중단성 작업이며 재동기화를 수행하면 읽기 복제본의 데이터가 삭제되고 다시 작성됩니다. 읽기 복제본은 재동기화가 실행되는 동안에는 다른 작업을 수행하거나 쿼리를 실행할 수 없습니다. 쿼리는 소스 데이터베이스 인스턴스로 다시 라우팅되지 않으므로 읽기 복제본에 대한 모든 연결은 동기화가 완료될 때까지 실패합니다.

읽기 복제본을 다시 동기화하는 데 걸리는 시간은 다양하지만 프로세스가 매우 오래 걸릴 수 있습니다.

CLI를 통해 재동기화를 시작하려면 cdb read-replica-resync 명령을 사용하십시오.

ibmcloud cdb read-replica-resync <deployment name>

API를 통해 재동기화를 시작하려면 /deployments/{id}/remotes/resync 엔드포인트에 POST를 전송하십시오.

curl -X POST \
  https://api.{region}.databases.cloud.ibm.com/v4/ibm/deployments/{id}/remotes/resync \
  -H 'Authorization: Bearer <>'

읽기 복제본 홍보하기

읽기 복제본은 읽기 작업뿐만 아니라 쓰기 작업도 허용할 수 있는 독립 클러스터로 승격될 수 있습니다. 소스 데이터베이스 인스턴스에 문제가 발생하면 읽기 복제본이 독립형 클러스터로 승격되어 애플리케이션에서 쓰기를 수락하기 시작할 수 있습니다.

UI에서 읽기 복제본을 승격하려면 읽기 복제본 승격 버튼을 클릭합니다.

승격되면 읽기 복제본은 소스 데이터베이스 인스턴스에 대한 연결을 종료하고 독립형 Databases for MySQL 배포가 됩니다. 배치가 읽기 및 쓰기 오퍼레이션 허용 및 실행을 시작할 수 있으며 백업이 사용으로 설정되고 자체 admin 사용자로 발행됩니다. 배치가 세 개의 데이터 멤버가 있는 클러스터가 되도록 새 데이터 멤버가 추가됩니다. 이는 비용이 멤버 이용 비율과 동일하게 청구되므로 비용이 증가하지만 배치에는 한 멤버가 아닌 세 멤버가 있습니다.

읽기 복제본을 승격하면 일반적으로 승격 시 수행되는 초기 백업을 건너뛸 수 있습니다. 초기 백업을 건너뛰면 복제본이 보다 빠르게 사용 가능하게 되지만 즉시 사용 가능한 백업이 없습니다. 승격 프로세스가 완료된 후 On-Demand 백업을 시작할 수 있습니다.

읽기 복제본이 독립 배포로 승격된 후에는 읽기 복제본으로 되돌리거나 소스 데이터베이스 인스턴스에 다시 가입하도록 할 수 없습니다.

CLI를 통해 승격하려면 cdb read-replica-promote 명령을 사용하십시오.

ibmcloud cdb read-replica-promote <deployment name>

API를 통해 승격하려면 /deployments/{id}/remotes/promotion 엔드포인트에 POST를 전송하십시오.

curl -X POST \
  https://api.{region}.databases.cloud.ibm.com/v4/ibm/deployments/{id}/remotes/promotion \
  -H 'Authorization: Bearer <>'  \
 -H 'Content-Type: application/json' \
 -d '{"promotion": {}}' \

승격 후 초기 백업을 승격하고 건너뛰려면 JSON 본문에서 skip_initial_backup을 설정하십시오.

curl -X POST \
  https://api.{region}.databases.cloud.ibm.com/v4/ibm/deployments/{id}/remotes/promotion \
  -H 'Authorization: Bearer <>'  \
 -H 'Content-Type: application/json' \
 -d '{"promotion": {"skip_initial_backup": true}}' \

완료 시간

승격 레시피는 데이터베이스의 가용성이 높은 경우에만 완료됩니다. 하지만 읽기/쓰기 가용성은 약 10분 후에 나타나며 다음과 같은 중요한 주의사항이 있습니다. 레시피가 완료될 때까지 데이터베이스의 가용성이 높지 않습니다.

읽기 복제본의 전체 승격 시간은 다음과 같이 두 방식 중 하나를 사용하여 데이터 크기로 결정됩니다.

  • 읽기 복제본은 단일 멤버입니다. 승격되면 두 명의 멤버가 복제본으로 추가됩니다. 소요 시간은 데이터 크기에 따라 다릅니다. 데이터베이스가 커지면서 작성 시간이 오래 걸릴 수 있습니다. 두 복제본의 작성이 완료될 때까지 승격 조작은 완료되지 않습니다.
  • 승격의 일부로 백업을 작성하도록 선택한 경우 레시피가 완료되기 전에 이 백업을 완료해야 합니다. 이 경우도 완료 시간이 데이터베이스의 크기에 따라 다릅니다.

프로모션 레시피가 완료될 때까지 고가용성 멤버는 존재하지 않는다는 점을 기억하세요. 마찬가지로, 초기 백업을 사용하도록 선택한 경우 두 번째 지점이 완료되거나 수동 백업이 작성될 때까지 백업이 존재하지 않습니다.