赤松
akama****@oss*****
2010年 10月 8日 (金) 13:38:47 JST
To:hashiさん 赤松と申します。 結論から述べますと、恐らくですが、PostgreSQL7系を使用する場合 PostgreSQL用RA はこのままでは使用出来なかったはずです。 pgsql_status メソッド内はご存じの通り fuser コマンドを使ってます。 これは PostgreSQL がどこで実行されてもプロセスがデータディレクトリに change directory する仕様である事を想定しています。 この仕様は、たしか PostgreSQL の Ver8以降に採用されていたと記憶 しています。 ◆確認手段 postmaster のpid を取得後 /proc 配下を調べて下さい。 # ls -la /proc/`ps -ef | grep postmaster | grep -v grep | awk '{print $2}'`/cwd PostgreSQL8 以降であればデータディレクトリ(/usr/local/pgsql/data) が表示されます。 しかし 7 であれば、恐らくデータディレクトリでは無く、pg_ctl を実行 した場所になっていると思います。 ◆RA の改造 例えば下記のように fuser を外して /proc 配下の exe あたりから そのPIDは postmaster の物であるかを確認する等、RA を編集する事で 対応できます。 # kill -0 $PID >/dev/null 2>&1 && fuser $OCF_RESKEY_pgdata 2>&1 | grep $PID >/dev/null 2>&1 kill -0 $PID >/dev/null 2>&1 && [ -d /proc/$PID ] && ls -la /proc/$PID/exe | grep postmaster >/dev/null 2>&1 以上です。 > hashiです。 > 高塚様情報ありがとうございます7.4.30を使って、試してみたいと思います。 > 松尾様確かに、1が返ってるなら、! pgsql_statusの部分はあってますよね…何いっ > てるんだろう私は。だとすると、問題となるのは1を返してくるpgsql_status()で行 > われている処理ですよね。ためしに、pgsql_status()のpidが存在する場合の処理を、 > 別のシェルを作成して試してみました。例)ps -ef | grep postmaster出力結果: > root 1111 22222 0 12:12 pts/2 00:00:00 grep > postmasterpostgres 1234 1 0 13:13 pts/1 00:00:00 /usr/local/ > pgsql/bin/postmaster -D /usr/local/pgsql/data > シェル内容#!/bin/bashkill -0 1234 >/dev/null 2>&1 && fuser /usr/local/pgsql/ > data 2>&1 | grep 1234 >/dev/null 2>&1echo $?出力結果:1 > シェルの出力結果で、1以外の値が出力されないと、PostgreSQL is downとして処理 > されてしまいますよね。 > > Date: Thu, 7 Oct 2010 22:04:33 +0900 > > From: haruk****@sraos***** > > To: linux****@lists***** > > Subject: Re: [Linux-ha-jp] postgreSQLのクラスタリング > > > > SRAOSS 高塚と申します。 > > > > PostgreSQL 7.4.30 (先日リリースしたばっかり) で、 > > 以下のような修正が行われています。後段については関係あるかも > > しれません。 > > > > ---- > > * Take care to fsync the contents of lockfiles (both postmaster.pid and > > the socket lockfile) while writing them (Tom Lane) > > > > This omission could result in corrupted lockfile contents if the > > machine crashes shortly after postmaster start. That could in turn > > prevent subsequent attempts to start the postmaster from succeeding, > > until the lockfile is manually removed. > > ---- > > > > > > > > On Thu, 7 Oct 2010 20:52:51 +0900 > > M Hasimoto <dogni****@hotma*****> wrote: > > > > > > > > hashiです。 > > > 現在、postgreSQL7.4.18 + DRBD + PaceMakerでクラスタリングをしようとして > > > います。ですが、postgreSQLのRAがうまく機能していません。RA(pgsql)にロ > > > グを何箇所か書き加えて確認したところ、スタート後にpidを削除しpostgreSQL > > > の起動を行ないますが、その後pgsql_monitor()の4行目 > > > if ! pgsql_status > > > の部分で、pgsql_status()から値1を返しても、 > > > ocf_log info "PostgreSQL is down"return $OCF_NOT_RUNNING > > > の項目に進んでしまうようです。他にも・postgreSQL起動時に、postmaster.pid > > > が作成されないということも、何度か起きています。一度だけ、RAの書き変えも、 > > > パラメータの変更もしていないのに、なぜか認識に成功しましたが、その後再現 > > > できていません。何かわかる方はいませんでしょうか? > > > > > > > ______________________________________________________________________ > > 高塚 遙 haruk****@sraos***** SRA OSS, Inc http://www.sraoss.co.jp > > 〒170-0005 東京都豊島区南大塚3-46-3 大塚セントコアビル5F > > > > _______________________________________________ > > Linux-ha-japan mailing list > > Linux****@lists***** > > http://lists.sourceforge.jp/mailman/listinfo/linux-ha-japan > > > ------------------------------------------------------------------------ > > _______________________________________________ > Linux-ha-japan mailing list > Linux****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/linux-ha-japan