고급 이전 관리

고급 마이그레이션은 다운타임을 줄여 대규모 데이터베이스의 데이터를 마이그레이션하는 솔루션입니다. 이 기능은 PostgreSQL에서만 사용할 수 있습니다.

마이그레이션 소스 요구사항

마이그레이션 소스를 구성하려면 소스 인스턴스와 기본 소스 데이터베이스를 둘 다 구성해야 합니다.

지원되는 버전

지원되는 자체 관리형 PostgreSQL 버전은 다음과 같습니다.

  • PostgreSQL: 9.4, 9.5, 9.6, 10, 11, 12, 13, 14, 15
  • AlloyDB Omni: 15

소스 인스턴스 구성

소스 인스턴스에는 기본 postgres 데이터베이스가 포함되어야 합니다. 존재하지 않는 경우 만들어야 합니다. pglogical 라이브러리가 소스에 설치되고 shared_preload_libraries 구성 변수에 포함되어야 합니다.

소스 데이터베이스 구성

마이그레이션은 템플릿 데이터베이스 (온프레미스 소스의 경우 template0template1)를 제외한 소스 인스턴스의 모든 데이터베이스를 마이그레이션합니다. 마이그레이션할 각 데이터베이스에 대해 다음 단계를 완료해야 합니다.

  • 확장 프로그램 설치: CREATE EXTENSION IF NOT EXISTS pglogical를 실행하여 데이터베이스에 확장 프로그램을 설치해야 합니다.
  • 기본 키 제약 조건: 기본 키가 있는 테이블의 데이터만 마이그레이션됩니다. 기본 키가 없는 테이블의 경우 마이그레이션 시 데이터가 아닌 테이블 스키마만 복사됩니다. 또한 기본 키가 없는 테이블의 경우 이 마이그레이션은 변경 데이터 캡처 (CDC) 단계에서 초기 스냅샷과 INSERT 문만 지원합니다. UPDATEDELETE 문은 수동으로 처리해야 합니다.
  • 사용자 권한: 소스 인스턴스에 연결하는 데 사용하는 데이터베이스 사용자에게 postgres 기본 데이터베이스, pglogical 스키마, 모든 마이그레이션 스키마 (정보 스키마 및 pg_로 시작하는 스키마 제외)에 대한 충분한 권한이 있어야 합니다. 특히 PostgreSQL의 경우 다음 권한을 부여해야 합니다.

    GRANT USAGE on SCHEMA <SCHEMA> to <USER>;
    GRANT SELECT on ALL TABLES in SCHEMA pglogical to <USER>;
    GRANT SELECT on ALL TABLES in SCHEMA <SCHEMA> to <USER>;
    GRANT SELECT on ALL SEQUENCES in SCHEMA <SCHEMA> to <USER>;
    ALTER USER <USER> with REPLICATION role;
    

DDL 지원

마이그레이션 중에 DML 변경사항만 자동으로 동기화됩니다. 마이그레이션 중에 소스 및 대상 데이터베이스가 호환되도록 데이터 정의 언어 (DDL)를 직접 관리해야 합니다. pglogical.replicate_ddl_command를 사용하여 소스와 대상에서 일관된 지점에 DDL을 실행하는 것이 좋습니다.

연결 및 승인

GDC 콘솔에 제공된 대상 발신 IP 주소 (이전 엔드포인트)에서 수신되는 연결을 수락하도록 네트워크 방화벽을 열고 pg_hba.conf 파일을 구성해야 합니다.

이전 관리

프로젝트 DB 관리자 역할이 있는 사용자가 다음 단계를 수행해야 합니다. GDC 콘솔 또는 Distributed Cloud CLI를 사용하여 마이그레이션을 관리합니다.

콘솔

  1. 기본 메뉴에서 데이터베이스 서비스를 선택합니다.
  2. 마이그레이션 만들기를 클릭합니다.
  3. 시작하기 대화상자에서 소스 및 연결 요구사항을 검토합니다.
  4. 소스 데이터베이스 지정 대화상자에서 소스 데이터베이스 호스트 이름 또는 IP 주소, 사용자 이름, 비밀번호, 암호화 유형, 인증서를 지정합니다.
  5. 클러스터 구성 대화상자에서 대상 데이터베이스 클러스터의 클러스터 ID, 비밀번호, 데이터베이스 버전, CPU, 메모리, 스토리지 용량을 지정합니다. 가장 큰 테이블을 보관할 만큼 충분한 메모리를 선택해야 합니다.
  6. 만들기를 클릭합니다. 마이그레이션 및 타겟 데이터베이스 클러스터를 만드는 데 몇 분 정도 걸릴 수 있습니다. 클러스터가 준비되면 상태가 Reconciling에서 Ready로 변경됩니다. 마이그레이션이 성공적으로 설정되면 마이그레이션 상태가 Unsynced로 변경됩니다. 다음 옵션을 사용하여 이전을 관리합니다.
    1. 시작: 마이그레이션을 시작하고 마이그레이션 상태를 Running로 변경합니다.
    2. 중지: 마이그레이션을 중지하고 마이그레이션 상태를 Stopped로 변경합니다.
    3. 승격: 대상 데이터베이스 클러스터를 독립형 데이터베이스로 승격합니다.
    4. 삭제: 이 마이그레이션을 위해 생성된 마이그레이션 및 대상 데이터베이스 클러스터를 삭제합니다.

다음 단계에 따라 소스 데이터베이스 복제 사용자 비밀번호를 주기적으로 순환합니다.

  1. 소스 데이터베이스로 이동하여 수정 수정을 클릭합니다.
  2. 복제 사용자 비밀번호를 순환하도록 변경합니다.
  3. 저장을 클릭하여 변경사항을 적용합니다.

변경사항이 적용되면 이전 백엔드에서 새 비밀번호를 사용합니다.

gdcloud

  1. Distributed Cloud CLI를 사용하기 전에 설치하고 초기화합니다. 그런 다음 조직으로 인증합니다.

  2. 마이그레이션을 만듭니다.

    gdcloud database connection-profiles create DB_ENGINE_TYPE SOURCE_CONNECTION_PROFILE \
        --username REPLICATION_USERNAME \
        --password REPLICATION_PASSWORD \
        --ca-certificate CA_CERT_FILE_PATH
    
    gdcloud database migrations create MIGRATION_NAME \
        --source SOURCE_CONNECTION_PROFILE \
        --destination DESTINATION_DBCLUSTER
    
    gdcloud database clusters create DESTINATION_DBCLUSTER \
        --database-version DB_VERSION \
        --admin-password ADMIN_PASSWORD
    

    다음 변수를 바꿉니다.

    • DB_ENGINE_TYPE: 마이그레이션의 DB 엔진 유형입니다. 지원되는 값은 postgresql입니다.
    • SOURCE_CONNECTION_PROFILE: 새 연결 프로필의 이름입니다.
    • REPLICATION_USERNAME: 소스 데이터베이스의 복제 사용자의 이름입니다.
    • REPLICATION_PASSWORD: 소스 데이터베이스의 복제 사용자의 비밀번호
    • CA_CERT_FILE_PATH: 소스 데이터베이스 CA 인증서의 경로입니다.
    • MIGRATION_NAME: 새 이전의 이름입니다.
    • DESTINATION_DBCLUSTER: 대상 데이터베이스 클러스터의 이름입니다.
    • DB_VERSION: 새 클러스터의 버전 문자열입니다. 예를 들면 POSTGRESQL_13입니다.
    • ADMIN_PASSWORD: 새 클러스터의 관리자 사용자 비밀번호입니다.
  3. 마이그레이션 시작:

    gdcloud database migrations start MIGRATION_NAME
    
  4. 마이그레이션을 중지하려면 다음 단계를 따르세요.

    gdcloud database migrations stop MIGRATION_NAME
    
  5. 마이그레이션을 승격합니다.

    gdcloud database migrations promote MIGRATION_NAME
    
  6. 기존 연결 프로필을 나열합니다.

    gdcloud database connection-profiles list DB_ENGINE_TYPE
    
  7. 기존 마이그레이션을 나열합니다.

    gdcloud database migrations list --destination DESTINATION_DBCLUSTER
    

API

PostgreSQL 소스 데이터베이스의 경우:

소스 데이터베이스 CA 인증서를 저장할 보안 비밀을 만듭니다.

apiVersion: v1
data:
  ca.crt:  SOURCE_DB_CA_CERT
kind: Secret
metadata:
  annotations:
    propagation.gdch.gke.io/target-namespace:  USER_PROJECT
  name: es-crt-EXTERNAL_SERVER_NAME
  namespace: USER_PROJECT
type: Opaque

소스 데이터베이스 마이그레이션 사용자 비밀번호를 저장할 보안 비밀을 만듭니다.

apiVersion: v1
data:
  password: SOURCE_DB_USER_PASSWORD
kind: Secret
metadata:
  annotations:
    propagation.gdch.gke.io/target-namespace: USER_PROJECT
  name: es-pw-EXTERNAL_SERVER_NAME
  namespace: USER_PROJECT
type: Opaque

externalserver를 만듭니다.

apiVersion: DBENGINE_NAME.dbadmin.gdc.goog/v1
kind: ExternalServer
metadata:
  name: EXTERNAL_SERVER_NAME
  namespace: USER_PROJECT
spec:
  host: SOURCE_DB_HOST
  port: 5432
  username: SOURCE_DB_USERNAME
  password:
    name: es-pw-EXTERNAL_SERVER_NAME
    namespace: USER_PROJECT
  certRef:
    name: es-crt-EXTERNAL_SERVER_NAME
    namespace: USER_PROJECT

마이그레이션을 만듭니다.

apiVersion: DBENGINE_NAME.dbadmin.gdc.goog/v1
kind: Migration
metadata:
  name: MIGRATION_NAME
  namespace: USER_PROJECT
spec:
  source:
    reference:
      apiVersion: DBENGINE_NAME.dbadmin.gdc.goog/v1
      kind: ExternalServer
      name: EXTERNAL_SERVER_NAME
  target:
    reference:
      apiVersion: DBENGINE_NAME.dbadmin.gdc.goog/v1
      kind: DBCluster
      name: DBCLUSTER_NAME
  control: MIGRATION_CONTROL

다음 변수를 바꿉니다.

  • EXTERNAL_SERVER_NAME: 소스 데이터베이스를 나타내는 externalserver의 이름입니다.
  • USER_PROJECT: externalserver가 생성되는 사용자 프로젝트의 이름입니다.
  • DBENGINE_NAME: 데이터베이스 엔진의 이름입니다. 지원되는 값은 postgresql입니다.
  • SOURCE_DB_CA_CERT: 소스 데이터베이스의 CA 인증서입니다.
  • SOURCE_DB_USER_PASSWORD: 소스 데이터베이스의 이전 사용자 비밀번호입니다.
  • SOURCE_DB_USERNAME: 소스 데이터베이스의 마이그레이션 사용자 이름입니다.
  • SOURCE_DB_HOST: 소스 데이터베이스의 이전 호스트 주소입니다.
  • MIGRATION_NAME: 마이그레이션 작업의 이름입니다.
  • DBCLUSTER_NAME: 이전 대상 데이터베이스 클러스터의 이름입니다.
  • MIGRATION_CONTROL: 마이그레이션 작업의 컨트롤입니다. 마이그레이션을 만들 때는 start 또는 stop 중 하나여야 합니다. 마이그레이션 대상 데이터베이스 클러스터를 승격하려면 promote이어야 합니다.