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インストール
ソースからインストール
- 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)スタンバイサーバの起動(レストアの開始)
プライマリサーバ設定
レプリケーション構成の設定
- postgresql.confの編集
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
- postgresqlスタート
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でアーカイブログを取得できるようにしておいてください。
スタンバイ側の設定
- postgresql.confの編集
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の適用終了後、ストリーミングレプリケーションが動作します。