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

문서 버전을 선택합니다.

이 페이지에서는 pg_upgrade을 사용하여 AlloyDB Omni PostgreSQL 15 기반 컨테이너를 AlloyDB Omni PostgreSQL 16으로 업그레이드하는 방법을 설명합니다. 이 페이지의 안내에서는 독립형 서버로 배포된 AlloyDB Omni와 복제된 대기 노드로 구성된 AlloyDB Omni의 업그레이드 단계를 설명합니다. pg_upgrade을 사용하면 데이터 손실 없이 업그레이드를 완료할 수 있습니다.

PostgreSQL 업그레이드 옵션에 대한 자세한 내용은 pg_upgrade를 참고하세요.

시작하기 전에

  • 업그레이드를 시작하기 전에 데이터베이스 클러스터를 전체 백업하는 것이 좋습니다.
  • AlloyDB Omni 15 서비스가 실행 중인지 확인하려면 다음 명령어를 실행하세요.

    Docker

    docker exec ALLOYDB15_CONTAINER psql -U postgres -c "SELECT 1;"
    

    Podman

    podman exec ALLOYDB15_CONTAINER psql -U postgres -c "SELECT 1;"
    
  • PostgreSQL 15의 pg_squeeze 확장 프로그램은 AlloyDB Omni PostgreSQL 16.8.0에서 지원되지 않습니다. pg_squeeze이 AlloyDB Omni 15 설치에 있는 경우 AlloyDB Omni 16으로 업그레이드하기 전에 확장 프로그램을 삭제해야 합니다.

    AlloyDB Omni 위에 맞춤 확장 프로그램을 설치한 경우 해당 맞춤 확장 프로그램이 16.8.0 이미지에도 설치되어 있는지 확인합니다. 다음 명령어를 실행하여 설치된 확장 프로그램을 확인합니다.

    Docker

    docker exec ALLOYDB15_CONTAINER psql -U postgres -d postgres -c "
    SELECT * FROM pg_extension;"
    

    Podman

    podman exec ALLOYDB15_CONTAINER psql -U postgres -d postgres -c "
    SELECT * FROM pg_extension;
    
  • AlloyDB Omni 버전 15.5.2 이하에서 업그레이드하는 경우 먼저 최신 버전의 AlloyDB Omni 15로 업그레이드해야 합니다. AlloyDB Omni 버전 15.5.2 이하에서 최신 버전으로 마이그레이션

Docker 컨테이너 환경에서 AlloyDB Omni 업그레이드

Docker 또는 Podman 컨테이너 환경에서 AlloyDB Omni PostgreSQL 15에서 AlloyDB Omni PostgreSQL 16.8.0으로 업그레이드하려면 다음 단계를 따르세요.

Docker

  1. bin를 복사하고 업그레이드하려는 AlloyDB Omni 컨테이너 버전에서 디렉터리를 공유합니다.

    mkdir -p TMP/alloydb15_bin TMP/alloydb15_share
    docker cp ALLOYDB15_CONTAINER:/usr/lib/postgresql/15 TMP/alloydb15_bin
    docker cp ALLOYDB15_CONTAINER:/usr/share/postgresql/15 TMP/alloydb15_share
    
  2. 업그레이드된 데이터가 저장될 AlloyDB Omni PostgreSQL 16 컨테이너의 새 데이터 디렉터리를 만듭니다.

    mkdir -p DATA_PATH/16/data
    chown 999 DATA_PATH/16/data
    
  3. 이전 AlloyDB Omni 컨테이너와 동일한 네트워크에 모든 경로가 마운트된 AlloyDB Omni PostgreSQL 16 실행 컨테이너를 시작합니다. 아래 예시를 참조하세요.

    docker run -d --name ALLOYDB16_CONTAINER \
      -e POSTGRES_PASSWORD=PASSWORD -e PGPORT=5433 \
      -v DATA_PATH/16/data:/var/lib/postgresql/data \
      -v DATA_PATH/15/data:/var/lib/postgresql/old_data \
      -v TMP/alloydb15_bin/15:/usr/lib/postgresql/15 \
      -v TMP/alloydb15_share/15:/usr/share/postgresql/15 \
      --network container:ALLOYDB15_CONTAINER \
      google/alloydbomni:IMAGE_TAG /bin/sleep infinity
    
  4. 업그레이드된 버전의 컨테이너에 대한 새 데이터 디렉터리를 초기화합니다.

    docker exec -u postgres ALLOYDB16_CONTAINER bash -c "
      cd /tmp;
      initdb -D /var/lib/postgresql/data --frozen-collations --encoding=UTF8 --locale=C --locale-provider=icu --icu-locale=und-x-icu
    

    이전 클러스터에 --data-checksum 또는 --locale과 같은 특수 설정이 있는 경우 AlloyDB Omni 16 컨테이너를 만들기 위해 해당 매개변수도 전달해야 합니다.

  5. 이전 버전 컨테이너에서 다시 시작 정책을 사용 설정한 경우 다음 예와 같이 다시 시작 정책을 사용 중지해야 합니다.

    docker update --restart=no ALLOYDB15_CONTAINER
    
  6. pg_upgrade --check를 실행하여 클러스터를 AlloyDB Omni 16으로 업그레이드할 준비가 되었는지 확인합니다.

    docker exec -u postgres ALLOYDB16_CONTAINER bash -c "
     cd /tmp;
    
     pg_upgrade -p 5432 -P 5433 --check -v \
                -b /usr/lib/postgresql/15/bin \
                -B /usr/lib/postgresql/16/bin \
                -d /var/lib/postgresql/old_data \
                -D /var/lib/postgresql/data"
    

    pg_upgrade --check 명령어가 완료되면 Clusters are compatible로 끝나는 출력이 표시됩니다. 이는 클러스터를 업그레이드할 준비가 되었음을 나타냅니다. 이 명령어는 AlloyDB Omni PostgreSQL 15 컨테이너를 확인하고 종료하기도 합니다. pg_upgrade --check가 완료되면 애플리케이션이 더 이상 데이터베이스에 연결하거나 쿼리를 실행할 수 없습니다.

  7. pg_upgrade를 실행하여 업그레이드된 데이터를 새 데이터 디렉터리에 복사한 다음 pg_upgrade가 성공적으로 완료되었는지, AlloyDB Omni PostgreSQL 15 컨테이너가 종료되었는지 확인합니다.

    docker exec -u postgres ALLOYDB16_CONTAINER bash -c "
      cd /tmp;
      pg_upgrade -v --copy \
           -b /usr/lib/postgresql/15/bin \
           -B /usr/lib/postgresql/16/bin \
           -d /var/lib/postgresql/old_data \
           -D /var/lib/postgresql/data"
    
    docker ps -a
    
  8. pg_upgrade이 실패하면 PostgreSQL 15 컨테이너를 시작하여 AlloyDB Omni PostgreSQL 15 컨테이너로 롤백합니다.

    docker logs ALLOYDB16_CONTAINER
    docker rm -f ALLOYDB15_CONTAINER ALLOYDB16_CONTAINER
    docker run -d --name ALLOYDB15_CONTAINER -p 5432:5432 \
      -e POSTGRES_PASSWORD=postgres \
      -v DATA_PATH/15/data:/var/lib/postgresql/data \
      google/alloydbomni:15
    

    업그레이드 실패의 원인을 확인하려면 로그를 검토하세요.

  9. 업그레이드가 완료되면 정리한 후 AlloyDB Omni PostgreSQL 16 컨테이너를 다시 시작합니다.

    docker rm -f ALLOYDB16_CONTAINER ALLOYDB15_CONTAINER
    docker run -d --name ALLOYDB16_CONTAINER -p 5432:5432 \
      -e POSTGRES_PASSWORD=postgres \
      -v DATA_PATH/16/data:/var/lib/postgresql/data \
      google/alloydbomni:16
    

Podman

  1. bin를 복사하고 업그레이드하려는 AlloyDB Omni 컨테이너 버전에서 디렉터리를 공유합니다.

    mkdir -p TMP/alloydb15_bin TMP/alloydb15_share
    podman cp ALLOYDB15_CONTAINER:/usr/lib/postgresql/15 TMP/alloydb15_bin
    podman cp ALLOYDB15_CONTAINER:/usr/share/postgresql/15 TMP/alloydb15_share
    
  2. 업그레이드된 데이터가 저장될 AlloyDB Omni PostgreSQL 16 컨테이너의 새 데이터 디렉터리를 만듭니다.

    mkdir -p DATA_PATH/16/data
    chown 999 DATA_PATH/16/data
    
  3. 이전 AlloyDB Omni 컨테이너와 동일한 네트워크에 모든 경로가 마운트된 AlloyDB Omni PostgreSQL 16 실행 컨테이너를 시작합니다. 아래 예시를 참조하세요.

    podman run -d --name ALLOYDB16_CONTAINER \
      -e POSTGRES_PASSWORD=PASSWORD -e PGPORT=5433 \
      -v DATA_PATH/16/data:/var/lib/postgresql/data \
      -v DATA_PATH/15/data:/var/lib/postgresql/old_data \
      -v TMP/alloydb15_bin/15:/usr/lib/postgresql/15 \
      -v TMP/alloydb15_share/15:/usr/share/postgresql/15 \
      --network container:ALLOYDB15_CONTAINER \
      google/alloydbomni:16 /bin/sleep infinity
    
  4. 업그레이드된 버전의 컨테이너에 대한 새 데이터 디렉터리를 초기화합니다.

    podman exec -u postgres ALLOYDB16_CONTAINER bash -c "
      cd /tmp;
      initdb -D /var/lib/postgresql/data --frozen-collations --encoding=UTF8 --locale=C --locale-provider=icu --icu-locale=und-x-icu
    

    이전 클러스터에 --data-checksum 또는 --locale과 같은 특수 설정이 있는 경우 AlloyDB Omni 16 컨테이너를 만들기 위해 해당 매개변수도 전달해야 합니다.

  5. 이전 버전 컨테이너에서 다시 시작 정책을 사용 설정한 경우 다음 예와 같이 다시 시작 정책을 사용 중지해야 합니다.

    podman update --restart=no ALLOYDB15_CONTAINER
    
  6. pg_upgrade --check를 실행하여 클러스터를 AlloyDB Omni 16으로 업그레이드할 준비가 되었는지 확인합니다.

    podman exec -u postgres ALLOYDB16_CONTAINER bash -c "
     cd /tmp;
    
     pg_upgrade -p 5432 -P 5433 --check -v \
                -b /usr/lib/postgresql/15/bin \
                -B /usr/lib/postgresql/16/bin \
                -d /var/lib/postgresql/old_data \
                -D /var/lib/postgresql/data"
    

    pg_upgrade --check 명령어가 완료되면 Clusters are compatible로 끝나는 출력이 표시됩니다. 이는 클러스터를 업그레이드할 준비가 되었음을 나타냅니다. 이 명령어는 AlloyDB Omni PostgreSQL 15 컨테이너를 확인하고 종료하기도 합니다. pg_upgrade --check가 완료되면 애플리케이션이 더 이상 데이터베이스에 연결하거나 쿼리를 실행할 수 없습니다.

  7. pg_upgrade를 실행하여 업그레이드된 데이터를 새 데이터 디렉터리에 복사한 다음 pg_upgrade가 성공적으로 완료되었는지, AlloyDB Omni PostgreSQL 15 컨테이너가 종료되었는지 확인합니다.

    podman exec -u postgres ALLOYDB16_CONTAINER bash -c "
      cd /tmp;
      pg_upgrade -v --copy \
           -b /usr/lib/postgresql/15/bin \
           -B /usr/lib/postgresql/16/bin \
           -d /var/lib/postgresql/old_data \
           -D /var/lib/postgresql/data"
    
    podman ps -a
    
  8. pg_upgrade이 실패하면 PostgreSQL 15 컨테이너를 시작하여 AlloyDB Omni PostgreSQL 15 컨테이너로 롤백합니다.

    podman logs ALLOYDB16_CONTAINER
    podman rm -f ALLOYDB15_CONTAINER ALLOYDB16_CONTAINER
    podman run -d --name ALLOYDB15_CONTAINER -p 5432:5432 \
      -e POSTGRES_PASSWORD=postgres \
      -v DATA_PATH/15/data:/var/lib/postgresql/data \
      google/alloydbomni:15
    

    업그레이드 실패의 원인을 확인하려면 로그를 검토하세요.

  9. 업그레이드가 완료되면 정리한 후 AlloyDB Omni PostgreSQL 16 컨테이너를 다시 시작합니다.

    podman rm -f ALLOYDB16_CONTAINER ALLOYDB15_CONTAINER
    podman run -d --name ALLOYDB16_CONTAINER -p 5432:5432 \
      -e POSTGRES_PASSWORD=postgres \
      -v DATA_PATH/16/data:/var/lib/postgresql/data \
      google/alloydbomni:16
    

대기 노드에서 AlloyDB Omni 서버 업그레이드

AlloyDB Omni 서버가 활성 및 스트리밍 복제 대기 구성으로 배포된 경우 대기 노드에서 pg_upgrade를 실행할 수 없습니다. 대기 노드에서 AlloyDB Omni 서버를 업그레이드하려면 활성 노드에서 AlloyDB Omni를 업그레이드하기 전에 대기 노드에 복제 지연이 없는지 확인하는 것이 좋습니다.

대기 AlloyDB Omni 서버를 업그레이드하려면 다음 개략적인 단계를 따르세요.

  1. 활성 노드를 업그레이드하기 전에 대기 AlloyDB Omni 컨테이너를 중지합니다.
  2. 활성 노드가 업그레이드된 후 rsync를 사용하여 새 활성 노드에서 대기 노드로 업그레이드된 데이터 디렉터리를 동기화합니다. 스트리밍 복제 대기 서버 업그레이드에 관한 자세한 내용은 pg_upgrade을 참고하세요.
  3. 동일한 데이터 디렉터리를 사용하여 PostgreSQL용 AlloyDB PostgreSQL 16 이미지를 사용하여 컨테이너를 시작합니다.

논리적 복제를 사용하는 경우 복제를 통한 데이터 업그레이드를 참고하세요.