VM で AlloyDB Omni バージョン 16.3.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.3.0 ではサポートされていません。AlloyDB Omni 15 のインストールに pg_squeeze が含まれている場合は、AlloyDB Omni 16 へのアップグレードを行う前に拡張機能を削除する必要があります。

    AlloyDB Omni にカスタム拡張機能をインストールした場合は、それらのカスタム拡張機能が 16.3.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.3.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:16 /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. 同じデータ ディレクトリを使用して、AlloyDB for PostgreSQL の PostgreSQL 16 イメージを使用してコンテナを起動します。

論理レプリケーションを使用している場合は、レプリケーションによるデータのアップグレードをご覧ください。