Kubernetes에서 AlloyDB Omni 버전 16.8.0으로 업그레이드

이 페이지에서는 Kubernetes에서 AlloyDB Omni 버전 16.8.0으로 주 버전 업그레이드를 실행하는 방법을 설명합니다.

시작하기 전에

  • AlloyDB Omni Kubernetes 연산자 버전이 1.5.0인지 확인합니다. AlloyDB Omni 연산자 버전을 업그레이드하려면 최신 AlloyDB Omni Kubernetes 연산자 버전으로 이전을 참고하세요.

  • 여유 디스크 공간이 5GB 이상인지 확인합니다.

  • 외부 또는 원격 백업 시스템을 실행하는 경우 업그레이드 프로세스 중에 백업하지 않도록 전체 백업을 실행하고 예약된 백업을 일시중지하세요.

  • 고가용성 (HA) 및 데이터 복원력 (DR) 환경의 경우 데이터베이스 클러스터를 업그레이드하기 전에 분리하세요.

AlloyDB Omni 버전 업그레이드

pg_upgrade를 사용하여 AlloyDB Omni 버전을 업그레이드하려면 다음 중 하나를 실행하세요.

스크립트 업그레이드 실행

GitHub의 AlloyDB Omni 샘플에서 수동 업그레이드 단계를 실행하는 스크립트를 확인할 수 있습니다.

업그레이드 스크립트를 사용하려면 스크립트를 다운로드하고 다음 명령어를 실행하세요.

./MVU.sh 16.8.0 1.5.0 NAME NAMESPACE

다음 변수를 바꿉니다.

  • NAME: 데이터베이스 클러스터의 이름입니다.
  • NAMESPACE: 데이터베이스 클러스터의 네임스페이스입니다.

수동 업그레이드 단계 실행

  1. 데이터 손실을 방지하려면 데이터를 백업하세요.

  2. 백업 계획을 삭제합니다.

  3. 모든 복제 프로세스를 종료합니다. 여기에는 고가용성 (HA) 및 데이터 복원력 (DR)에 사용되는 물리적 복제와 모든 논리적 복제 스트림이 포함됩니다.

  4. 데이터베이스 클러스터에 주석을 달아 수동 버전 업그레이드를 지정합니다.

    kubectl annotate dbclusters.alloydbomni.dbadmin.goog NAME dbs.dbadmin.goog.com/manualmvu=true
    

    다음 변수를 바꿉니다.

    • NAME: 데이터베이스 클러스터의 이름입니다.
  5. 업그레이드를 위해 데이터를 이동할 수 있도록 PostgreSQL 프로세스를 중지합니다.

    k exec -ti POD_NAME -- /bin/Bash
    # Shut down postgres
    postgres@POD_NAME:~$ supervisorctl.par stop postgres
    
    postgres@POD_NAME:~$ mkdir /mnt/disks/pgsql/15; mv /mnt/disks/pgsql/data /mnt/disks/pgsql/15/data; cp -r /usr/lib/postgresql/15/bin /mnt/disks/pgsql/15/.; cp -r /usr/lib/postgresql/15/lib /mnt/disks/pgsql/15/.; cp -r /usr/share/postgresql/15 /mnt/disks/pgsql/15/share; rm /mnt/disks/pgsql/15/share/postgresql.conf.sample; cp /usr/share/postgresql/postgresql.conf.sample /mnt/disks/pgsql/15/share/postgresql.conf.sample; chmod 2740 /mnt/disks/pgsql/15/data
    

    다음 변수를 바꿉니다.

    • POD_NAME: 포드의 이름입니다.
  6. 데이터베이스 클러스터를 버전 16.8.0로, 컨트롤 플레인 에이전트 (CPA)를 1.5.0로 패치합니다.

    kubectl patch dbclusters.alloydbomni.dbadmin.goog NAME --type=merge -p '{"spec":{"databaseVersion":"16.8.0","controlPlaneAgentsVersion":"omni_control_plane_agents_version"}}'
    

    다음 변수를 바꿉니다.

    • NAME: 데이터베이스 클러스터의 이름입니다.
  7. 업그레이드된 AlloyDB Omni 버전에 대해 빈 데이터베이스 클러스터를 만듭니다.

    kubectl exec -ti POD_NAME -- /bin/Bash
    
    postgres@POD_NAME:~$ supervisorctl.par stop postgres
    
    # Initialize a new, empty database cluster for the new version.
    postgres@POD_NAME:~$ rm -fr /mnt/disks/pgsql/data; initdb -D /mnt/disks/pgsql/data -U alloydbadmin --data-checksums --encoding=UTF8 --locale=C --locale-provider=icu --icu-locale=und-x-icu --auth-host=trust --auth-local=reject; cd ~
    

    다음 변수를 바꿉니다.

    • POD_NAME: 포드의 이름입니다.
  8. 기존 데이터베이스 클러스터에서 pg_hba.conf을 수정하여 업그레이드 프로세스에 필요한 권한과 연결을 제공합니다.

    # Backup pg_hba.conf of the pg15 cluster
    postgres@POD_NAME:~$ cp /mnt/disks/pgsql/15/data/pg_hba.conf /mnt/disks/pgsql/15/data/pg_hba.conf.bak
    
    # Update pg15 configurations
    postgres@POD_NAME:~$ echo "local      all           all                      trust" >> /mnt/disks/pgsql/15/data/pg_hba.conf; echo "host       all           all      127.0.0.1/32    trust" >> /mnt/disks/pgsql/15/data/pg_hba.conf
    

    다음 변수를 바꿉니다.

    • POD_NAME: 포드의 이름입니다.
  9. 새 데이터베이스 클러스터에서 pg_hba.conf를 수정하여 업그레이드 프로세스에 필요한 권한과 연결을 제공합니다.

    postgres@POD_NAME:~$ rm /mnt/disks/pgsql/data/pg_hba.conf; echo "local      all           all                      trust" >> /mnt/disks/pgsql/data/pg_hba.conf; echo "host       all           all      127.0.0.1/32    trust" >> /mnt/disks/pgsql/data/pg_hba.conf; chmod 2740 /mnt/disks/pgsql/15/data
    

    다음 변수를 바꿉니다.

    • POD_NAME: 포드의 이름입니다.
  10. 데이터베이스 클러스터를 업그레이드합니다.

    # (optional) Make sure postgres is stopped
    postgres@POD_NAME:~$ supervisorctl.par stop postgres
    
    # (optional) Check to verify that data can be upgraded.
    postgres@POD_NAME:~$ pg_upgrade -U alloydbadmin --check -b /mnt/disks/pgsql/15/bin -B /usr/lib/postgresql/16/bin -d /mnt/disks/pgsql/15/data -D /mnt/disks/pgsql/data --link -v
    
    postgres@POD_NAME:~$ pg_upgrade -U alloydbadmin -b /mnt/disks/pgsql/15/bin -B /usr/lib/postgresql/16/bin -d /mnt/disks/pgsql/15/data -D /mnt/disks/pgsql/data --link -v
    
    # Recover pg15 configurations
    postgres@POD_NAME:~$ cp /mnt/disks/pgsql/15/data/pg_hba.conf.bak /mnt/disks/pgsql/data/pg_hba.conf; cp -r /mnt/disks/pgsql/15/data/postgresql.conf /mnt/disks/pgsql/data/.; cp -r /mnt/disks/pgsql/15/data/postgresql.conf.d /mnt/disks/pgsql/data/.; cp -r /mnt/disks/pgsql/15/data/parambackup /mnt/disks/pgsql/data/.
    
    # Start postgres
    postgres@POD_NAME:~$ supervisorctl.par start postgres
    
    # Clean up backup data
    postgres@POD_NAME:~$ rm -fr /mnt/disks/pgsql/15/
    

    다음 변수를 바꿉니다.

    • POD_NAME: 포드의 이름입니다.
  11. 업그레이드가 완료되면 데이터베이스 클러스터에서 수동 버전 업그레이드 주석을 삭제합니다.

    kubectl annotate dbclusters.alloydbomni.dbadmin.goog NAME dbs.dbadmin.goog.com/manualmvu-
    

    다음 변수를 바꿉니다.

    • NAME: 데이터베이스 클러스터의 이름입니다.
  12. 일반 작업을 재개하고 1~3단계에서 사용 중지한 백업, 백업 계획 또는 복제 프로세스를 다시 사용 설정합니다.