こんにちは。開発部のtorigakiです。
弊社ではDBにPostgreSQLを使用しているのですが、先日PostgreSQLを9.3から9.6にアップグレードする機会がありましたので、今回はそのアップグレード手順について書いていきたいと思います。
システム構成
- GCPの仮想インスタンスで運用
- OS: Ubuntu 14.04.4 LTS
- PostgreSQLサーバーは3台(マスター1台、スレーブ2台)
事前準備
既存の運用システムにパラメータ調整した9.6用の以下設定ファイルを準備しておきます。
- postgresql.conf
- pg_hba.conf
事前に準備しておくことで、アップグレード作業時には設定ファイルを上書きコピーするだけなので作業時間の短縮になります。
アップグレード作業
PostgreSQLの停止
マスターとスレーブのPostgreSQLのプロセスを停止します。
設定ファイルのバックアップ
マスターとスレーブにて、9.3用のconfigファイルのバックアップをとっておきます。
データのバックアップ
cpコマンドにて、DBデータのバックアップをとっておきます。
マスターサーバーのアップグレード作業
9.6のインストール
apt-getにて9.6のインストールを実施します。
apt-get -y install python-software-properties wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main" > /etc/apt/sources.list.d/postgresql.list' apt-get update apt-get install postgresql-9.6 apt-get install postgresql-plperl-9.6
9.6の設定ファイルをコピー
事前準備にて用意した、「postgresql.conf」と「pg_hba.conf」を上書きコピーします。
9.6にアップグレード
以下コマンドでアップグレードします。
sudo -H -u postgres /usr/lib/postgresql/9.6/bin/pg_upgrade \ -b /usr/lib/postgresql/9.3/bin \ -B /usr/lib/postgresql/9.6/bin \ -d /var/lib/postgresql/9.3/main \ -D /var/lib/postgresql/9.6/main \ -o ' -c config_file=/etc/postgresql/9.3/main/postgresql.conf' \ -O ' -c config_file=/etc/postgresql/9.6/main/postgresql.conf' \ -k
「-k」オプションで9.3のデータを9.6にハードリンクを作ります。これにより、データ量が倍になることを防ぐことができます。
成功すると以下のメッセージが表示さます。
Upgrade Complete ---------------- Optimizer statistics are not transferred by pg_upgrade so, once you start the new server, consider running: ./analyze_new_cluster.sh Running this script will delete the old cluster's data files: ./delete_old_cluster.sh
9.3をアンインストール
以下コマンドで9.3をアンインストールします。
apt-get remove postgresql-9.3 postgresql-client-9.3 dpkg --purge postgresql-9.3
9.6を起動
PostgreSQLのプロセスを起動します。 pg_lsclustersコマンドにて、起動を確認することができます。
# pg_lsclusters Ver Cluster Port Status Owner Data directory Log file 9.3 main 5432 down postgres /var/lib/postgresql/9.3/main /var/log/postgresql/postgresql-9.3-main.log 9.6 main 5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log
vacuumdbを実行
アップグレード処理時に作成されたスクリプトにてvacuumdbを実行します。
su - postgres ./analyze_new_cluster.sh
スレーブサーバーのアップグレード作業
9.6のインストール
マスターサーバーと同様の方法でインストールします。
9.6の設定ファイルをコピー
マスターサーバーと同様の方法でコピーします。
9.3をアンインストール
マスターサーバーと同様の方法でアンインストールします。
レプリケーション設定
以下コマンドにてマスターサーバーからデータを取得します。
pg_basebackup -h マスターIP -U repl -D /var/lib/postgresql/9.6/main --xlog --progress
recovery.conf を9.3のバックアップしたデータディレクトリから、9.6のデータディレクトリにコピーします。
9.6を起動
PostgreSQLのプロセスを起動します。
レプリケーションの確認
以下コマンドにて確認します。
psql -x -p 5432 -c "SELECT * FROM pg_stat_replication"
state が streaming になっていれば、正常にレプリケーションが進行しています。
まとめ
今回はPostgreSQLのアップグレード方法について紹介させていただきました。
少しでもPostgreSQL のアップグレード作業について検討されている方のお役に立てれば幸いです。
弊社では引き続きエンジニア・デザイナーを募集中ですので、ご興味のある方は下からご応募いただければと思います。