[KEv1.6.10] PostgreSQL のアップグレード手順 # はじめに KE v1.6.10 以降で対応する PostgreSQL のアップグレード手順について、マニュアルから抜粋します。 **【推奨】PostgreSQL のアップグレードをされる場合、VM であればスナップショットを取っておく、システム全体のバックアップを取っておく、など念のためシステムをレストアできるように準備しておくことをお勧めします。** ## PostgreSQL のアップグレード Ver.1.6.0 から Ver.1.6.9 までは PostgreSQL 12 を固定的にインストールしていましたが、PostgreSQL 12 は 2024/11 に EOL を迎えました。そこで、Ver.1.6.10 以降の Kompira では PostgreSQL 13 以上のインストールに対応するようになりました。 - Kompira を新規インストールする場合は、その時点の Kompira が対応している最新の PostgreSQL をインストールします。 - Kompira をアップデートする場合は、既存の PostgreSQL のメジャーバージョンを保持します。ただし PostgreSQL のマイナーアップデートは実施されます。 - Kompira v1.6.10 時点で、インストール先の OS ごとに対応する PostgreSQL の最新版は以下のとおりです。 - RHEL8 / RockyLinux8 / AlmaLinux8 / MiracleLinux8: PostgreSQL 17.x - RHEL7: PostgreSQL 15.x - AmazonLinux2: PostgreSQL 14.x いずれの場合でも、install.sh の ``--postgresql-version`` オプションでインストールする PostgreSQL のバージョンを指定することができます。 - install.sh に ``--postgresql-version=16`` や ``--postgresql-version=16.*`` と指定すると、指定したメジャーバージョンの最新版をインストールします。 - install.sh に ``--postgresql-version=16.4`` などと指定すると、特定のバージョンをインストールします。 - install.sh に `--postgresql-version=latest` と `latest` を指定すると、インストール先の OS が対応している最新の PostgreSQL をインストールします。 Kompira のアップデート時にバージョンを指定して PostgreSQL をインストールするときに、例えば 12.17 から 17.0 など、メジャーバージョンが上がる場合を PostgreSQL のアップグレードと言います。install.sh は PostgreSQL のアップグレードを検出すると、以下のようなメッセージを表示して実際にアップグレードを実行するか確認します。 # ./install.sh --postgresql-version=17 ... [2024-10-29 12:00:00] ****: ---------------------------------------------------------------- [2024-10-29 12:00:00] ****: Check current PostgreSQL and Kompira database existence. [2024-10-29 12:00:00] ****: [2024-10-29 12:00:00] INFO: CUR_PG_BINDIR=/usr/pgsql-12/bin [2024-10-29 12:00:00] INFO: CUR_PG_DATADIR=/var/lib/pgsql/12/data [2024-10-29 12:00:00] INFO: CUR_PG_SERVICE=postgresql-12 [2024-10-29 12:00:00] INFO: CUR_PG_VERSION=12.17 [2024-10-29 12:00:00] INFO: CUR_PG_MAJVER=12 [2024-10-29 12:00:00] INFO: Check free space for PostgreSQL migration [2024-10-29 12:00:00] INFO: Data used: 152,856 KiB (/var/lib/pgsql/12/data) [2024-10-29 12:00:00] INFO: Free space: 9,344,912 KiB (/var/lib/pgsql) [2024-10-29 12:00:00] INFO: Free space rate: 6113.54% (OK) [2024-10-29 12:00:00] WARN: PostgreSQL migration (12->17) detected, Are you sure? MIGRATE POSTGRESQL 12 TO 17 AND CONTINUE INSTALLATION? (yes/No) PostgreSQL のアップグレードを実施してインストールを継続する場合は ``y`` を入力してください。 ``n`` を入力するとインストールを中止します。なお、install.sh に ``--force`` オプションを付けている場合は、この確認は行われずアップグレードとインストールを継続します。 PostgreSQL のアップグレードを実施する場合、install.sh 内部で PostgreSQL の pg_upgrade ユーティリティを実行して全てのデータを新しいバージョンに移行します。 **【注意】pg_upgrade はサーバ内で全てのデータをコピーすることになるため、データベースクラスタが利用しているデータ量と同程度の空き容量が必要になることに注意してください。** 上のメッセージに既存のデータベースクラスタのデータ量と、新しいバージョンのデータベースクラスタを作成する場所の空き容量を表示しています。 [2024-10-29 12:00:00] INFO: Data used: 152,856 KiB (/var/lib/pgsql/12/data) [2024-10-29 12:00:00] INFO: Free space: 9,344,912 KiB (/var/lib/pgsql) [2024-10-29 12:00:00] INFO: Free space rate: 6113.54% (OK) 上の例では十分な空き容量があることが分かります。空き容量が少ない場合は、アップグレードを実施する前に空き容量を確保することを検討してください。 **【注意】install.sh は PostgreSQL のアップグレード時に空き容量のチェックを行ないます。既存データベースクラスタのデータ量に対して 120% に相当する空き容量が確認できない場合は、インストールを中止します。** ## 冗長構成における PostgreSQL のアップグレード 冗長構成で PostgreSQL のアップグレードを実施する場合は、両系停止アップデートを基本とした専用の手順となります。以下のように手順 3 および手順 4 で、アップグレードしたい PostgreSQL のバージョンを指定してください。 1. スタンバイ系を停止 (pcs cluster stop) 2. アクティブ系を停止 (pcs cluster stop --force) ※ここで動作中のジョブが強制終了します 3. アクティブ系をアップデート (./install.sh --postgresql-version=17) 4. スタンバイ系をアップデート (./install.sh --postgresql-version=17) 5. アクティブ系を再開 (pcs cluster start) 6. スタンバイ系を sync_master.sh で再開 (/opt/kompira/bin/sync_master.sh --force) **【警告】手順 3 および手順 4 で、必ず同じメジャーバージョンを指定するようにしてください。** 手順 3 および手順 4 における install.sh の最後に以下のような警告が表示され、クラスタの自動再開処理もスキップされます。 [2024-10-29 12:00:00] WARN: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! [2024-10-29 12:00:00] WARN: [2024-10-29 12:00:00] WARN: FULL STOP UPGRADES ARE REQUIRED! (For version compatibility) [2024-10-29 12:00:00] WARN: [2024-10-29 12:00:00] WARN: postgresql: 12.17 -> 17.0 [2024-10-29 12:00:00] WARN: [2024-10-29 12:00:00] WARN: - Automatic cluster start was skipped. [2024-10-29 12:00:00] WARN: - Please stop both systems and upgrade each one. [2024-10-29 12:00:00] WARN: - First, start the cluster with the following command on the node that was active before the upgrade. [2024-10-29 12:00:00] WARN: [2024-10-29 12:00:00] WARN: # pcs cluster start [2024-10-29 12:00:00] WARN: [2024-10-29 12:00:00] WARN: - Next, start the cluster with the following command on the node that was standby before the upgrade. [2024-10-29 12:00:00] WARN: [2024-10-29 12:00:00] WARN: # /opt/kompira/bin/sync_master.sh --force [2024-10-29 12:00:00] WARN: [2024-10-29 12:00:00] WARN: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! このあと手順 5 として、アクティブ系を基本の手順同様に pcs cluster start でクラスタを再開させてください。このとき pcs status や crm_mon コマンドで、アクティブ系のすべてのリソースが正常に起動することを確認してください。 最後に手順 6 として、スタンバイ系を sync_master.sh で再開させてください。このとき ``--force`` オプションを付けて、強制的にアクティブ系のデータを同期するようにしてください。 ## アップグレード後の古いデータの削除 PostgreSQL のアップグレードに成功した後は、古いバージョンのデータ(データベースクラスタ)を削除することができます。ストレージの空き容量を確保したい場合は、古いデータの削除について**慎重に**検討してください。 削除できるデータは install.sh を実行したときに以下のように、`CUR_PG_DATADIR=` で表示されるディレクトリになります。 ``` [2024-10-29 12:00:00] INFO: CUR_PG_DATADIR=/var/lib/pgsql/12/data ``` RHEL 系のシステムにおいては、基本的には以下のディレクトリになるはずです。 ``` /var/lib/pgsql/<アップグレード前のPostgreSQLのメジャーバージョン>/data ``` このディレクトリは、postgresql ユーザまたは root 権限で削除することができます。 ``` # rm -rf /var/lib/pgsql/12/data ``` **【注意】アップグレード後に十分動作確認が取れてから削除するようにしてください。**