[Linux-ha-jp] postgreSQLのクラスタリング

Back to archive index

赤松 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





Linux-ha-japan メーリングリストの案内
Back to archive index