PostgreSQLストリームレプリケーションクラスタデータベースのアップグレード事例


一、背景紹介
ユーザーが使用するのは2ノードのPostgreSQL HotStandbyクラスタで、バージョンはv 9です.1.6ユーザの要求によりv 9にアップグレードする.3.3.
ホスト:192.168.100.157
スペア:192.168.100.158
(1)お客様の現在の総データ量は29 Gで、現在のPgバージョンは9.1.6である.大きなバージョンにまたがるアップグレードのため、小さなバージョンのアップグレードに適した直接上書きインストールは使用できません.
(2)アップグレード時のダウンタイム処理が許可され、データ量が特に大きくないことを考慮して、今回pg_upgrade方式でアップグレードします.
(3)現在のデータベースにユーザ定義パスが存在しない表領域
二、アップグレード手順
  • 1プライマリ・スペアに新しいデータベース(インストールパスの指定に注意)
  • をインストールします.
      # ./configure --prefix=/opt/pg93
      # make
      # make install
  • 2プライマリ・スペアに新規データベース・データ・ディレクトリとアーカイブ・ディレクトリ
  • をそれぞれ作成する.
      # mkdir -p /pgdata/data93
      # mkdir -p /pgdata/archive93
  • 3インストール拡張pg_upgrade/pg_upgrade_support(ホストのみ)
  •   # cd postgresql-9.3.3/contrib/pg_upgrade
      # make
      # make install
      
      # cd postgresql-9.3.3/contrib/pg_upgrade_support
      # make
      # make install
  • 4新規データベースの初期化(ホストのみ)
  •   $ /opt/pg93/bin/initdb -D /pgdata/data93
  • 5アプリケーションの停止
  • プライマリ・データベース
  • を閉じる
  • 7マスター・ライブラリ・データのコピー(ホストのみ)
  •   # cp -r /pgdata/data91 /pgdata/data91.bak
  • 8アーカイブログをコピー(ホストのみ)
  •   # cp -r /pgdata/archive /pgdata/archive.bak
  • 9アップグレードテスト
  • を実行
    $ /opt/pg93/bin/pg_upgrade -b /opt/pg91/bin/ -B /opt/pg93/bin/ -d /pgdata/data91 -D /pgdata/data93/ -p 5432 -P 5432 -c
    Performing Consistency Checks
    -----------------------------
    Checking cluster versions                                   ok
    Checking database user is a superuser                       ok
    Checking for prepared transactions                          ok
    Checking for reg* system OID user data types                ok
    Checking for contrib/isn with bigint-passing mismatch       ok
    Checking for presence of required libraries                 ok
    Checking database user is a superuser                       ok
    Checking for prepared transactions                          ok
    *Clusters are compatible*
  • 10アップグレード
  • を実行
    $ /opt/pg93/bin/pg_upgrade -b /opt/pg91/bin/ -B /opt/pg93/bin/ -d /pgdata/data91 -D /pgdata/data93/ -p 5432 -P 5432
    ……
    ……
    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
  • 11メイン・スペア環境変数(メイン・スペアが変更)
  • を変更
    $ vim .bash_profile
    export PATH=/opt/pg93/bin:$PATH:$HOME/bin
    export PGDATA=/pgdata/data93
    export PGUSER=postgres
    export PGPORT=5432
    export LD_LIBRARY_PATH=/opt/pg93/lib:$LD_LIBRARY_PATH
  • 12新しいマスターライブラリ
  • を構成する.
    (HotStandbyを満たすように構成し、旧バージョンの構成に従って構成する)
    $ vim postgresql.conf
    $ vim pg_hba.conf
  • 3新しいマスターライブラリを起動し、
  • を確認します.
    起動後、データベースのバージョンが正しいかどうかを確認し、データが古いライブラリと一致しているかどうかを確認します.
  • 14 analyzeスクリプト
  • を実行
    (つまり各ライブラリに対してvacuumを実行する)
    $ ./analyze_new_cluster.sh
  • 15は、スタンバイ上で
  • を同期する.
    $ pg_basebackup -h 192.168.100.157 -U postgres -p 5432 -D /pgdata/data93/ -P
    64363/64363 kB (100%), 1/1 tablespace
    NOTICE:  pg_stop_backup complete, all required WAL segments have been archived
  • 16構成スペア
  • (旧バージョンの構成による)
    $ vim postgresql.conf
    $ vim pg_hba.conf
    $ vim recovery.conf
    standby_mode = 'on'
    primary_conninfo = 'host=127.0.0.1 user=postgres port=54321'
    recovery_target_timeline = 'latest'
  • 17リポジトリ
  • を起動
  • 18試験同期状況
  • 19アプリケーションを起動し、
  • をテストする
  • 旧バージョン処理
  • ユーザの実情に基づいてユーザが最終的に古いバージョンのデータベースと古いデータの処理を決定する