본문 바로가기

Cloud-computing/GCP

[GCP]How to Upgrade Major Database Version with DMS

버전 업그레이드

주 버전 / 부 버전 / 수(패치) 버전

  • 주 버전: 기존 버전과 호환되지 않게 API가 바뀌는 경우
  • 부 버전: 기존 버전과 호환되면서 새로운 기능을 추가할 때
  • 수 버전: 기존 버전과 호환되면서 버그를 수정
  • MySQL 8.0.29
    • 주 버전: 8.0
    • 부 버전: 8.0.29

부 버전 업그레이드

  • 작업 중 인스턴스가 다시 시작되어 다운타임 발생
  • Cloud SQL에서는 유지보수 중 부 버전을 정기적으로 업데이트한다.
    • MySQL 5.6/5.7
      • 정기 유지보수 중 최신 버전으로 자동 업그레이드
    • MySQL 8.0
      • 다운그레이드 지원되지 않는다 → 정기 유지보수에 자동으로 포함되지 않음
      • 인스턴스를 원하는 부 버전으로 업그레이드 해야한다.
        1. 스테이징에서 업그레이드 테스트
        2. 읽기 복제본 업그레이드
        3. 기본 Instance 백업
        4. 부 버전 업그레이드

롤백

  • 이전의 부 버전에서 복구 데이터베이스 인스턴스를 프로비저닝
  • 복구 데이터베이스 인스턴스의 설정을 업그레이드 전 상태로 구성
  • 업그레이드 전 백업을 복구 인스턴스로 복원

*프로비저닝: 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 미리 준비해 두는 것을 말한다.

주 버전 업그레이드

  • 2 가지 방법
    • Database Migration Service(DMS) 사용
    • 데이터 내보내기 → 버전 업그레이드 → 가져오기
      • 다운타임 발생
      • 현재 인스턴스를 읽기 전용 모드로 전환 필요

사전 테스트 진행하는 경우

  • dry run Test
    • 인스턴스 클론 후 내보내기 실행
    • 업그레이드 후 검증

데이터 마이그레이션 - 내보내기

  1. 목표 주 버전으로 대상 인스턴스 생성
    • 확인
      • 충분한 스토리지
      • 네트워크 (Whitelist IP)
      • 권한과 비밀번호가 같은 동일한 사용자 계정
  2. 현재 Cloud SQL 읽기 전용 모드로 설정
    • 플래그 설정: read_only: on
  3. 현재 인스턴스의 데이터를 SQL 덤프 파일로 내보내기
    • mysql 시스템 데이터베이스 제외
  4. 새 인스턴스에 데이터 가져오기
  5. 애플리케이션 업데이트 (e.g. 연결정보 변경)
  6. 애플리케이션 테스트

데이터 마이그레이션 - DMS

기존 데이터베이스 정보

Create a connection profile

  • 사용자 이름 / 비밀번호
    • 원본 데이터베이스의 사용자 이름과 암호
    • 데이터베이스의 다른 측면을 손상시킬 가능성을 제한하려면 이 목적을 위해 별도의 계정을 만드는 것이 좋습니다.
  • 연결 프로필
    • 리전에 저장된다.
    • 성능 향상을 위해서는 데이터가 필요한 서비스와 가까운 곳으로 설정
  • 연결 보호 방법
    • 없음
      • Must: Nothing
    • 서버 전용 인증
      • Must: the x509 PEM-encoded certificate of the certificate authority (CA)
      • 소스 데이터베이스에 연결되면 인스턴스가 소스를 인증하여 인스턴스가 올바른 호스트에 안전하게 연결되고 있는지 확인한다.
      • 서버 전용 인증의 경우 소스가 인스턴스를 인증하지 않는다.
    • 서버-클라이언트 인증
      • Must: CA Cert, Client Cert, Client, Key
      • 대상 인스턴스가 소스에 연결되면 인스턴스가 소스를 인증하고 소스가 인스턴스를 인증한다.
      • 가장 강력한 보안 제공

서버-클라이언트 인증 참고
2022.06.28 - [GCP] - [GCP]CloudSQL Server-Client Certificate Configuration

마이그레이션 작업 만들기

  • 서버 ID
    • default: 0
    • 소스 및 각 복제본에서 server_id 시스템 변수를 설정하여 고유한 복제 ID를 설정해야 합니다.
  • REPLICATION SLAVE privilege
    • 마이그레이션 작업 계정에 아래 권한 추가
    mysql> CREATE USER 'repl'@'%.example.com' IDENTIFIED BY 'password';
    mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.example.com';
  • GTID(Global Transaction IDentifier)
    • MySQL 데이터베이스에서 커밋되는 각 트랜잭션과 함께 생성되고 트랜잭션에 연결되는 고유한 식별자
    • Master, Replica 서버에서 고유한 식별자
      • Master - Slave 간의 일관성 확인
    • 구성: GTID = source_id:transaction_id
  • 마이그레이션 작업 유형*CDC (Change Data Capture)
    • MySQL 소스
    • 연결 옵션

시작하기

소스 정의

대상 위치 만들기(버전 업그레이드)

  • 대상 인스턴스 구성 부분은 CloudSQL 인스턴스 생성과 동일
    • 연결
      • VPC를 이용하여 마이그레이션을 진행할 경우 원본, 대상 데이터베이스가 같은 VPC에 있어야 한다.
      • 공개 IP를 사용해서 연결된 애플리케이션이 있는 경우 대상 위치 만들기에서 등록

연결 방법 정의

    • 비공개 IP
    • 공개 IP

      원본 인스턴스에서 비공개 IP 사용 설정 필요

  • 원본 DB에서 네트워크 추가(whitelist)

마이그레이션 테스트 및 생성

  • 테스트
  • 작업 만들기

  • IP 주소
    • 원본 인스턴스에 등록한 IP(Whitelist)와 공개 IP 주소는 다르다. 발신 IP 주소 로 따로 존재한다.
  • Replication - 외부 서버에서 복제
    • Cloud SQL 마이그레이션 경로
    • Database Migration Service는 외부 서버에서 Cloud SQL로 지속적 복제 또는 일회성 데이터베이스 마이그레이션을 제공합니다.

업그레이드 된 버전에서 데이터 확인

추가 작업

  • 애플리케이션 코드, 스키마, 데이터베이스 설정을 수정해야 할 수 있는 호환되지 않는 변경사항이 포함됩니다.
  • DB 사용자 등록
  • 애플리케이션 정상 확인

정리

  • 서버-클라이언트 인증서 구성
    • key 생성 > cert 생성
  • 업그레이드 Path 확인
    • e.g. gitlab target: 14.6.2 my Version: 13.10.2 path: 13.10.2 -> 13.12.15 -> 14.0.12 -> 14.3.6 => 14.6.2
  • 백업과 롤백 시나리오
  • GTID(Global Transaction IDentifier)
    • MySQL 데이터베이스에서 커밋되는 각 트랜잭션과 함께 생성되고 트랜잭션에 연결되는 고유한 식별자
    • Master, Replica 서버에서 고유한 식별자
      • Master - Slave 간의 일관성 확인

참고 문서

[1] https://cloud.google.com/sql/docs/mysql/upgrade-major-db-version-migrate?hl=ko

[2] https://cloud.google.com/database-migration/docs/mysql

[3] https://cloud.google.com/database-migration/pricing

[4] https://cloud.google.com/database-migration/docs/mysql/networking-methods

[5] https://cloud.google.com/sql/docs/mysql/replication/external-server

[6] https://cloud.google.com/blog/topics/developers-practitioners/mysql-major-version-upgrade-using-database-migration-service

[7] https://semver.org/lang/ko/

[8] https://cloud.google.com/sql/docs/sqlserver/upgrade-major-db-version-inplace#faqs