2008/02/16(土)PostgreSQL 8.3.0+ slony-I

2017/10/11 8:38 サーバ運営・管理
7.3系のサポートが 、こないだの8.3系 リリース(2008/02/04) で終了し、現在使っている 7.4系のサポート終了は時間の問題になってきたので、3回目のマイナーバージョンアップである 8.3 に順次更新中。

前評判どおり、更新系の速度が格段に向上しています。
pg_dump にて明示的なカラム付きで SQL 文出力した約107,000件のデータベースの復旧が約6時間(7.4系)→10分(8.3系) です。

更に、8.2から dbmirror がサポートされていなく、調査したら、「代わりに Slony-I を使いなさい」ということになっているので、仕方なくこれを使うことに。。
#この slony が一番填まりましたつーか。。

先ず、postgreSQL 8.3 は、スレッドセーフ対応になるよう構築する必要があります。
これは、 slony?Tを動作させるために必要。こんな感じ:

$ ./configure --with-perl --with-openssl --with-libxml --with-libxslt --enable-thread-safety
(xml サポート使わない場合は、--with-libxml と --with-libxslt は不要)

$ gmake
$ gmake check
# gmake install

8系になって、オプション設定などが少し変更になっています。
・ initdb は、--no-locale の代わりに --locale=C を指定
・ initdb で構築したディレクトリに生成される postgresql.confにて、

listen_addresses = 'localhost,稼動サーバのIPアドレス1,稼動サーバのIPアドレス2,....'

のように指定。複数のIPアドレスを持つサーバであれば、公開するIPアドレスをカンマで区切って指定。

・ initdb で構築したディレクトリに生成される pg_hba.conf にて、IPアドレスは、CIDR 形式でしか指定できない。
・ pg_ctl または postgres(postmaster) の起動オプションの -i は意味が無くなる。
・ syslog 機能はデフォルトで有効。実際に稼動させるための設定は、postgresql.conf 内で該当項目を設定。
・ アクセス権は USER の拡張概念である ROLE(ロール)という概念である(使う分には今までとさほど変わらない)

slony ?Tは、以下のような感じでよいでしょう。

$ ./configure --prefix=/usr/local/pgsql --with-perltools
$ gmake
# gmake install

slony-Iの設定は、以下が参考になります。
31 Slony-Iでデータベースをレプリケーション 〔マイコミジャーナル〕
32 Slony-Iのslonikコマンドラインユーティリティ 〔マイコミジャーナル〕
Slony-I HEAD_20050613 ドキュメント 〔日本 PostgreSQL ユーザ会〕

が、しかし、実運用時への適用は注意が必要。
・ サーバ設定に localhost は使わないほうがよい。IPアドレスの指定は可能。ホスト名指定の場合はフルのFQDNで。
・ パラメータ指定に 必ずカンマが要るところと、決してカンマをつけてはいけないところが随所にあるので、間違わないように例示をよく確認すること。← これに数時間填まったので。。orz
・ 指定クラスタ名に _(アンダーバー)を先頭につけたものが、該当データベースのスキーマとして新規追加される。
 (造りとしては、上手いやり方だ。既存スキーマに全く影響与えないので)
 これはマスター側にもスレーブ側にも追加される模様。設定ミスなどで削除するときは、SQL文の DROP SCHEMA が使える。
・ dbmirror 同様、非同期レプリケーションだが、その確認周期はすこぶる短い(2秒がデフォルト)。環境によっては、周期を長くする必要があるだろう。

一度動作し始めると、すんなりレプリケ-ションされます。dbmirror と違ってタイムラグが殆どありません。(この点は 8.3 だから、というのもあるかもしれない)