非同期レプリケーション!
注意点
設定に入る前に2つの点について注意してください。
1つ目が「レプリケーションのタイムラグ」です。先ほど説明したように、Slony-Iのレプリケーションは非同期であるため、更新がスレーブに反映されるまでにタイムラグがあります。
pgpool-IIの負荷分散先がSlony-Iのスレーブであった場合、自分でINSERTしたデータであっても直後にSELECTすると存在しない可能性があります。
もし、このようなタイムラグを許容できないクエリがある場合は、「第3回:レプリケーション&負荷分散!(http://www.thinkit.co.jp/article/98/3/)」で紹介した負荷分散をさせたくない場合と同様、SELECT文の先頭にコメントを付けます(実際の文字列は何でも構いません)。こうすると、負荷分散先に関係無く、SELECT文をマスタに対して実行します。
2つ目が「DML以外のクエリ」です。pgpool-IIのレプリケーションはクエリ自体をレプリケーションするため、CREATE TABLEやALTER TABLEなどのDML以外のクエリもレプリケーションすることができますが、Slony-Iは、INSERT、UPDATE、DELETEなどのテーブルに対して行われたデータの変更しかレプリケーションしません。
Slony-Iでのレプリケーションするテーブルの追加の方法については、Slony-Iのマニュアルをご覧ください。
次からはいよいよ、設定方法について説明していきましょう。
pgpool.confの設定とSlony-Iの設定
では、pgpoolAdminからpgpool.confの設定を以下のように行いましょう。
・「Replication」セクションの「replication_mode」のチェックを外す
・「Others」セクションの「master_slave_mode」をチェックする
・「Others」セクションの「load_balance_mode」をチェックする
ここまでの設定が終わったら、画面最下部の「更新」ボタンを押します。
次はSlony-Iの設定です。本連載ではSlony-Iの機能の詳細までは解説しませんが、設定までの簡単な流れを紹介します。「第3回:レプリケーション&負荷分散!(http://www.thinkit.co.jp/article/98/3/)」と同様、同じマシン上のポート5432と5433で2つのPostgreSQLが起動しているものとします。
ではSlony-Iをインストールします。Slony-IのWebサイト(http://slony.info)からslony1-1.2.14.tar.bz2をダウンロードし展開します。今回は、Slony-Iに付属のPerlで書かれた管理スクリプト群を使うので、configureのオプションに--with-perltoolsを付加します。
$ ./configure --with-pgconfigdir=/usr/local/pgsql/bin --with-perltools
$ make && make install
そして、/usr/local/etcにslon_tools.confを作成します(図2)。このファイルの設定内容については、同じディレクトリにあるslon_tools.conf.sampleを確認してください。