|
|
機能一覧レプリケーション
Streaming Replicationは、マスタ側とスレーブ側のデータクラスタの内容を(非同期に)
複製(レプリケート)する機能である。
ver9.0でのStreaming Replicationは非同期である。
データベースクラスタ全体をレプリケーションする。
マスタ1台に対して複数のスレーブを接続できる。接続できる最大のスレーブ数はマスタのpostgresql.confにmax_wal_sendersに指定する。 スレーブはマスタに対して並列にのみ接続できる。スレーブをスレーブに接続するカスケードはできない。
マスタのmax_wal_sendersに指定した数までは、どのタイミングであってもスレーブを順次追加できる。追加はスレーブを起動するだけである。
運用と障害対策運用
原則的にどんなSQLでも実行できる。 時刻や乱数やシーケンスなど、レプリケーションで一般的に注意が必要なSQLについて、Streaming Replicationは一切気をつかわずに実行できる。 原則的にmasterもslaveも起動と停止を繰り返しできる。ただし、頻繁に行ったり、 サーバが高負荷のときに停止するのは避けたほうがよい。 特別な操作は不要で、slaveを起動すればmasterに追加され、slaveをshutdownすれば削除される。
slave追加時には、masterのmax_connectionsの値と現在接続している(WEBサーバなど)クライアント数に
注意すること。
現在のところ、動作確認を行うコマンドなどはない。 psコマンドでプロセスを表示させる、pg_log以下のログファイルを読むなどするしかない。 # ps ax | grep "postgres: wal receiver" 22748 ? Ss 0:00 postgres: wal receiver process streaming 0/4E8B7AC # # ps ax | grep "postgres: wal sender" 22749 ? Ss 0:00 postgres: wal sender process postgres 127.0.0.1(27532) streaming 0/4E8B7AC 障害対策
PostgreSQL ver9.0には「trigger_fileを発見したらslaveも更新可能になる」という機能がある。 例えばslaveのrecovery.confファイルに"trigger_file = '/tmp/trigger'"と設定した場合、 # touch /tmp/trigger
とslaveサーバ上で実行すれば、slaveのレプリケーション機能は終了し、更新できるようになる。
この機能と、HeartBeatなどmasterサーバの死活監視を行うクラスタソフトを組み合わせれば、 障害発生時にmasterを切り離してslaveを更新可能にするフェールオーバーを実現できる。
ただし、ver9.0は非同期レプリケーションなので、 masterからslaveに送る前にmasterがダウンするとその間のデータをロストする可能性がある。 また、一般的なクラスタソフト(ソフトウエアベースのもの)は 障害検知にある程度の時間が必要[参照:スプリットブレインシンドローム]なので、 フェールオーバーできるからといって障害時にサービスが止まらないわけではない。 もちろん、これはStreaming Replicationだけでなく、マスタースレーブ型レプリケーションと ソフトウエアベースのクラスタリングソフトを組み合わせた場合の宿命である。 マスタとスレーブを入れ替える、スイッチオーバーはできない。
Last-modified: 2010-12-7
|