이 페이지에서는 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 버전을 업그레이드하려면 다음 중 하나를 실행하세요.
업그레이드를 실행하는 Bash 스크립트를 실행합니다.
스크립트 업그레이드 실행
GitHub의 AlloyDB Omni 샘플에서 수동 업그레이드 단계를 실행하는 스크립트를 확인할 수 있습니다.
업그레이드 스크립트를 사용하려면 스크립트를 다운로드하고 다음 명령어를 실행하세요.
./MVU.sh 16.8.0 1.5.0 NAME NAMESPACE
다음 변수를 바꿉니다.
- NAME: 데이터베이스 클러스터의 이름입니다.
- NAMESPACE: 데이터베이스 클러스터의 네임스페이스입니다.
수동 업그레이드 단계 실행
데이터 손실을 방지하려면 데이터를 백업하세요.
모든 복제 프로세스를 종료합니다. 여기에는 고가용성 (HA) 및 데이터 복원력 (DR)에 사용되는 물리적 복제와 모든 논리적 복제 스트림이 포함됩니다.
데이터베이스 클러스터에 주석을 달아 수동 버전 업그레이드를 지정합니다.
kubectl annotate dbclusters.alloydbomni.dbadmin.goog NAME dbs.dbadmin.goog.com/manualmvu=true
다음 변수를 바꿉니다.
- NAME: 데이터베이스 클러스터의 이름입니다.
업그레이드를 위해 데이터를 이동할 수 있도록 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: 포드의 이름입니다.
데이터베이스 클러스터를 버전
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: 데이터베이스 클러스터의 이름입니다.
업그레이드된 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: 포드의 이름입니다.
기존 데이터베이스 클러스터에서
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: 포드의 이름입니다.
새 데이터베이스 클러스터에서
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: 포드의 이름입니다.
데이터베이스 클러스터를 업그레이드합니다.
# (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: 포드의 이름입니다.
업그레이드가 완료되면 데이터베이스 클러스터에서 수동 버전 업그레이드 주석을 삭제합니다.
kubectl annotate dbclusters.alloydbomni.dbadmin.goog NAME dbs.dbadmin.goog.com/manualmvu-
다음 변수를 바꿉니다.
- NAME: 데이터베이스 클러스터의 이름입니다.
일반 작업을 재개하고 1~3단계에서 사용 중지한 백업, 백업 계획 또는 복제 프로세스를 다시 사용 설정합니다.