[FYI] usogres + FreeBSD 4.11

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

駆け足でのメモですが、だいたいこんな感じで動きます。設定にさえハマらなければ、ものの数分で構築できるのではないでしょうか?

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください