usogres。
簡単に言うと、postgresのバックアップツール。レプリケーションツールとも言います。。
これを導入する際に色々なトラブルが発生したので、メモとして残しておきます。
わかる人じゃないとわからんと思います。postgresを初めてインストールするんだーって人は参考にならないと思います。。
環境は以下の通り。
FreeBSD 4.11(cvsup最新)
postgresql-7.4.13
usogres 0.8.1
postgersqlの導入については割愛。「postgres blog」で検索すればトップページに、一番解りやすいTipsがあります。というわけで、postgresqlは導入済みという事で話を進めます。
自分の場合、postgresのdataは /home/postgres/data/* に置く事にしました。
まずは、usogresのインストールです。
こちらから安定版をダウンロードしてください。導入方法には、.configure -> make -> su -> make install の流れでいけると書いてありましたが、freebsdではうまく行きません。で、以下のコマンドを。
$ ./configure
$ gmake
$ su
# gmake install
これで導入が完了。
( 参考情報として、/usr/ports/emulators/linux_base/が導入されています。
コンパイルがうまく通らなかったら、これを入れてみてね。)
で。ここまでやっといてアレなんですが・・・。portsん中にありました。
/usr/ports/databases/usogres/
ここで、make install clean すればokです。
次に、設定ファイルですが公式だと
「設定ファイルを usogres を実行するユーザーのホームディレクトリに作成します。
設定ファイルの名前は、.usogresrc。」
となっています。このせいで延々と数時間ハマりました。FreeBSDの場合、/usr/local/etc/usogresrc が設定ファイルの本体になります。
ここに usogresが待ちうけするIP、ポートを指定してあげればokです。これを変えないと、いつまで経っても、127.0.0.1:5432 の呪縛が待っています。
最後に、postgresの多重起動のお話。公式のやり方をまねてみますが、うまく起動しません。共有メモリが足りないと怒られてしまいます。
(参考)
http://www.drive.ne.jp/iMA/showmail.pl?pgsql-jp=22981
http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/kernel-resources.html
というわけで、カーネルのコンパイル。/usr/src/sys/i386/conf/ 以下にあるGENERICをコピーします。
# cd /usr/src/sys/i386/conf/
# cp GENERIC CUSTOM
# vi CUSTOM(追加項目)
options SYSVSHM
options SHMMAXPGS=4096
options SHMSEG=256
options SYSVSEM
options SEMMNI=256
options SEMMNS=512
options SEMMNU=256
options SEMMAP=256# cd /usr/src/
# make clean ; make –j4 buildworld ; make buildkernel KERNCONF=CUSTOM
# make installkernel KERNCONF=CUSTOM
# make installworld
# shutdown -r now
再起動したら、こんな感じでpostgresの設定をします。データが必要なので、data2が存在しない場合にはこんな風にして保存しましょう。今回は、usogresのテストを兼ねているので、ローカルで2つのポートに対して待ちうけをさせます。
usogresが5432で待ちうけし、5434,5436で起動しているpostgres本体にデータを書き込むイメージです。
# mkdir /home/postgres/data
# mkdir /home/postgres/data2
# chown -R postgres:postgres /home/postgres/
# chmod 700 /home/postgres/data
# chmod 700 /home/postgres/data2
# su – postgers
$ initdb (.cshrcか.bash_profileに環境変数の設定はしておいてね。)
$ vi /home/postgres/data/postgresql.conf
>tcpip_socket = true
>port = 5434
>ssl = false
$ vi /home/postgres/data/pg_hba.conf
>利用したいIPをtrustに追加
$ cd /home/postgres/data/
$ tar cf – . | tar xf – -C ../data2
$ vi /home/postgres/data2/postgresql.conf
>port = 5436# /usr/local/pgsql/bin/postmaster -B 128 -N 32 -S -i -p 5434 -D /home/postgres/data
# /usr/local/pgsql/bin/postmaster -B 128 -N 32 -S -i -p 5436 -D /home/postgres/data2
# /usr/local/bin/usogres
以上で完了です。私のusogresrcはこんな感じ。
# usogres本体のIP(外部からの接続を考慮してる。テストなら127.0.0.1で良い)
host = “192.168.0.10”
port = 5432
# オリジナル
hostorg = “127.0.0.1”
portorg = 5434
# コピー (今回は同一ホストによるテスト)
hostcopy = “127.0.0.1”
portcopy = 5436
logdir = ~/.usogres-log
max_process = 32
これで、普通にcreatedbすれば、5434,5436で待ちうけしてるpostgres双方にDBが作成されます。
>psql -h 127.0.0.1 -l
>psql -h 127.0.0.1 -l -p 5434
>psql -h 127.0.0.1 -l -p 5436
駆け足でのメモですが、だいたいこんな感じで動きます。設定にさえハマらなければ、ものの数分で構築できるのではないでしょうか?