Postgresqlレプリケーション ストリーミングレプリケーション構築メモ

Postgresql9 トリーミングレプリケーション構築メモ


本家
http://www.postgresql.jp/document/current/html/install-procedure.html

こちらのスライドがわかりやすい
http://www.slideshare.net/uptimejp/5postgresql

インストール

インストールモジュール

  • gcc(4.1.2-14.el5)
  • readline(5.1-1.1)
  • readline-devel(5.1-1.1)
  • zlib-devel(1.2.3-3)
  • postgresql(9.0.3)
依存モジュールインストール

たぶん必要ないです。

  • 依存モジュールのインストール
yum install gcc
yum install readline
yum install readline-devel
yum install zlib-devel
postgresqlインストール

ソースからインストール

cd /usr/local/src
wget ftp://ftp.postgresql.org/pub/v9.0.3/postgresql-9.0.3.tar.gz
tar zxf postgresql-9.0.3.tar.gz
cd postgresql-9.0.3
./configure --enable-thread-safety
make
su -

cd /usr/local/src/postgresql-9.0.3
make install
exit
  • パス設定
cat >> ~/bashrc
PG=/usr/local/pgsql
export PATH=$PATH:$PG/bin
export MANPATH="$MANPATH":$PG/man
export PGLIB=$PG/lib
export PGDATA=$PG/data
# ctrl+D

source ~/.bashrc
  • DB初期化
# 文字コードが utf-8の場合
initdb --no-locale --encoding=UTF-8


プライマリサーバ、スタンバイサーバともにインストールしてください。

ストリーミングレプリケーション構成設定

プライマリサーバ、スタンバイサーバで構成が異なりますので、注意してください。
ストリーミングレプリケーション環境を構築してからデータを投入するのであれば問題ありませんが、既にデータのあるDBを同期する場合(たいていの場合はそうだと思いますが)、プライマリサーバのベースバックアップとアーカイブログが必要になるので、ご注意ください。

  • 構成イメージ
    • masterサーバ: プライマリサーバ
    • slaveサーバ: スタンバイサーバ(ホットスタンバイ)

  • 手順概要

(1)プライマリサーバのレプリケーション構成の設定
(2)プライマリサーバの起動(設定反映)
(3)プライマリサーバのベースバックアップ取得
(4)スタンバイサーバのレプリケーション構成の設定
(5)スタンバイサーバの起動(レストアの開始)

プライマリサーバ設定

レプリケーション構成の設定

wal_level = hot_standby
hot_standby = off
archive_mode = on
archive_command = 'test ! -f /path/to/archive_log/%f && /bin/cp %p /path/to/archive_log/%f'
max_wal_senders = 1  # スタンバイの数だけ必要
  • WALストリーム接続許可設定追加

接続を許可するスタンバイサーバを指定します。
vi /usr/local/pgsql/data/pg_hba.conf

host    replication postgres    192.168.0.101/32        trust

適当なところに作成してください

mkdir -p /path/to/archive_log
pg_ctl start
プライマリサーバのベースバックアップの取得

プライマリサーバにDBが存在する場合、ベースバックアップをスタンバイにコピーする作業が必要です。

  • ベースバックアップ取得
# pg_start_backup
psql -c "SELECT pg_start_backup('REPLICATION SNAPSHOT')"

# ベースバックアップ取得
rsync -av --delete /usr/local/pgsql/data --exclude=pg_xlog --exclude=data/postmaster.pid /path/to/basebackup/

# pg_stop_backup
psql -c "SELECT pg_stop_backup()"


スタンバイサーバに、ベースバックアップをコピーし、restore_commandでアーカイブログを取得できるようにしておいてください。

スタンバイ側の設定

vi /usr/local/pgsql/data/postgresql.conf

archive_command = 'test ! -f /path/to/archive_log/%f && /bin/cp %p /path/to/archive_log/%f'
hot_standby = on
max_standby_archive_delay = 30s
max_standby_streaming_delay = 30s

適当なところに作成してください

mkdir -p /path/to/archive_log
  • recovery.conf編集

vi /usr/local/pgsql/data/recovery.conf

standby_mode = 'on'
primary_conninfo = 'host=192.168.0.100 port=5432 user=postgres'
restore_command = 'scp 192.168.0.100:/path/to/archive_log/%f %p'
trigger_file = '/tmp/trigger_file'
archive_cleanup_command = 'pg_archivecleanup /path/to/archive_log %r'
  • スタンバイサーバ起動
pg_ctl start

ベースバックアップからのレストアが起動し、WALの適用終了後、ストリーミングレプリケーションが動作します。