astamuse Lab

astamuse Labとは、アスタミューゼのエンジニアとデザイナーのブログです。アスタミューゼの事業・サービスを支えている知識と舞台裏の今を発信しています。

PostgreSQL9.3 を 9.6にアップグレードした話

こんにちは。開発部の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 のアップグレード作業について検討されている方のお役に立てれば幸いです。

弊社では引き続きエンジニア・デザイナーを募集中ですので、ご興味のある方は下からご応募いただければと思います。

Copyright © astamuse company, ltd. all rights reserved.