1.6.0에서 AlloyDB Omni 버전 16.9.0으로 업그레이드

문서 버전을 선택합니다.

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

시작하기 전에

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

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

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

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

AlloyDB Omni 버전 업그레이드

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

스크립트 업그레이드 실행

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

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

./MVU.sh 16.9.0 1.6.0 NAME NAMESPACE OS_TYPE

다음 변수를 바꿉니다.

  • NAME: 데이터베이스 클러스터의 이름입니다.
  • NAMESPACE: 데이터베이스 클러스터의 네임스페이스입니다.
  • OS_TYPE: 데이터베이스 이미지의 기본 운영체제입니다. 유효한 값은 DebianUBI9입니다. 지정하지 않으면 데이터베이스 버전 16.9.0 이상의 경우 연산자가 기본적으로 UBI9로 설정됩니다.

수동 업그레이드 단계 실행

업그레이드하는 이전 버전의 안내를 따르세요.

버전 16.x.x에서 17.5.0으로 업그레이드

  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/16; mv /mnt/disks/pgsql/data /mnt/disks/pgsql/16/data; cp -r /usr/lib/postgresql/16/bin /mnt/disks/pgsql/16/.; cp -r /usr/lib/postgresql/16/lib /mnt/disks/pgsql/16/.; cp -r /usr/share/postgresql/16 /mnt/disks/pgsql/16/share; rm /mnt/disks/pgsql/16/share/postgresql.conf.sample; cp /usr/share/postgresql/postgresql.conf.sample /mnt/disks/pgsql/16/share/postgresql.conf.sample; chmod 2740 /mnt/disks/pgsql/16/data
    

    다음 변수를 바꿉니다.

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

    kubectl patch dbclusters.alloydbomni.dbadmin.goog NAME --type=merge -p '{"spec":{"databaseVersion":"16.9.0","controlPlaneAgentsVersion":"1.6.0","databaseImageOSType":"UBI9"}}'
    

    다음 변수를 바꿉니다.

    • 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 pg16 cluster
    postgres@POD_NAME:~$ cp /mnt/disks/pgsql/16/data/pg_hba.conf /mnt/disks/pgsql/16/data/pg_hba.conf.bak
    
    # Update pg16 configurations
    postgres@POD_NAME:~$ echo "local      all           all                      trust" >> /mnt/disks/pgsql/16/data/pg_hba.conf; echo "host       all           all      127.0.0.1/32    trust" >> /mnt/disks/pgsql/16/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/16/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/16/bin -B /usr/lib/postgresql/17/bin -d /mnt/disks/pgsql/16/data -D /mnt/disks/pgsql/data --link -v
    
    postgres@POD_NAME:~$ pg_upgrade -U alloydbadmin -b /mnt/disks/pgsql/16/bin -B /usr/lib/postgresql/17/bin -d /mnt/disks/pgsql/16/data -D /mnt/disks/pgsql/data --link -v
    
    # Recover pg16 configurations
    postgres@POD_NAME:~$ cp /mnt/disks/pgsql/16/data/pg_hba.conf.bak /mnt/disks/pgsql/data/pg_hba.conf; cp -r /mnt/disks/pgsql/16/data/postgresql.conf /mnt/disks/pgsql/data/.; cp -r /mnt/disks/pgsql/16/data/postgresql.conf.d /mnt/disks/pgsql/data/.; cp -r /mnt/disks/pgsql/16/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/16/
    

    다음 변수를 바꿉니다.

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

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

    다음 변수를 바꿉니다.

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

버전 15.x.x에서 17.5.0으로 업그레이드

  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.9.0으로, 컨트롤 플레인 에이전트(CPA)를 1.6.0으로 패치합니다.

    kubectl patch dbclusters.alloydbomni.dbadmin.goog NAME --type=merge -p '{"spec":{"databaseVersion":"16.9.0","controlPlaneAgentsVersion":"1.6.0","databaseImageOSType":"UBI9"}}'
    

    다음 변수를 바꿉니다.

    • 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/17/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/17/bin -d /mnt/disks/pgsql/15/data -D /mnt/disks/pgsql/data --link -v
    
    # Recover pg16 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/16/
    

    다음 변수를 바꿉니다.

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

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

    다음 변수를 바꿉니다.

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