geek.conf.2

あるエンジニアの備忘録

Streaming Replication Parameters Setting

PostgreSQL 9 Streaming Replication(SR)における重要な設定パラメータについて記述する。
前提条件を以下に。

PostgreSQL 9.0系
•マスターノード1台スレーブノード1台構成
•マスター/スレーブは同一NW



◆マスターノードのpostgresql.confパラメータ

●archive_mode = on
アーカイブモードは有効にする。これはwalログの担保のため必要である。
ちなみにスレーブノードではarchive_modeはOffとなる。Onとしても有効にならない。

●archive_command = 'cp %p $PG_DATA/archive/%f'
walログのアーカイブを実行するシェル。%pは$PG_DATA/pg_xlogである。

●wal_keep_segments = 16
walログをスレーブノードのために削除せずに残しておくセグメント数。1セグメントは16MByte。
スレーブノードがwal_keep_segments分のwalログの受信を遅延した場合、以下のエラーログが出て
SRは停止する。デフォルトは0で、チェックポイント後に削除される。

FATAL: could not receive data from WAL stream: FATAL: requested WAL
segment 0000000X00000000000000XX has already been removed

ただし、アーカイブモードを有効にしていれば、後述のrestore_commandより
スレーブノードはwalログのアーカイブを適用しSRを継続できる。

◆スレーブノードのrecovery.confパラメータ

●restore_command = 'scp マスターノード:/$PG_DATA/archive/%f %p'
walログのアーカイブをwalログとしてリストアしリカバリを実行するシェル。
スレーブノードは次に適用されるべきwalログがマスターノードから
見つからなければ(真偽不明)このシェルを実行する。←postgres再起動時
scpでNW越しにマスターノードからwalログのアーカイブを取得しているが、PostgreSQL
の実行ユーザはマスターノードにパスワードなしでsshログイン出来るように準備が必要
である。
このパラメータはSRに特化したものというわけではない。
特にPITRに使用される。recovery_target_timeやrecovery_target_xidでリストアポイントを指定できる。
ちなみにrecovery_target_inclusiveでrecovery_target_time/xid直前(false)直後(true)を選択できる。


◆マスター/スレーブ両ノードのpostgresql.confパラメータ

●checkpoint_segments = 16
チェックポイントを実施するwalログのセグメント数。
walログのアーカイブモードやSRにおいて重要なパラメータのため言及する。
前述のとおり、チェックポイントが実施されると以前のwalログは削除される。
この時、スレーブノードにwalログを転送する前にチェックポイントによってwalログが
削除されてしまえばSRが停止する可能性がある。また、チェックポイントが頻繁に発生すると
レスポンスに悪影響を与える。

●checkpoint_timeout = 600
チェックポイントを実施する間隔(秒)

以上