[pgsql-jp: 30991] Re: PGReplicate-0.7.2.3jでフェイルオーバ失敗

mitani mitani @ sraw.co.jp
2003年 9月 8日 (月) 14:14:58 JST


三谷@広島です.

> ・RedHat#1	ロードバランスサーバ
> ・RedHat#2	クラスタDBサーバ#1
> ・RedHat#3	クラスタDBサーバ#2、レプリケーションサーバ
> の構成でテストを行ったのですが、やはり停止しているクラスタDBサーバ#1に
> クエリを投げてしまっているようです。
こちらで追試しましたが,ロードバランサが停止しているクラスタDBに何度もク
エリを投げるという現象は再現できませんでした.(OSはRedHat7.3)
片方のクラスタDBを停止させても,ちゃんと動いている方のクラスタDBに全てのク
エリーを投げて応答を返しています.(コネクションをプールした場合とプールし
ない場合で試しましたが,いずれの場合も,停止したクラスタDBサーバにクエリー
は投げていませんでした)

> 根本的に、この構成に問題があるのでしょうか。。。
テストしていて気づいたのですが,問題があります.
レプリケーションサーバと同居しているクラスタDBサーバに投げられたクエリー
はレプリケーション済が否かの判別がクラスタDBサーバにはつきません.
すべてレプリケーション済のクエリーとみなして処理します.
ロードバランサを使っている場合,RedHat#2とRedHat#3に均等にクエリーを分配
して投げるのですが,RedHat#3に投げられたクエリーはレプリケーション済のクエリーとみな
されるため,RedHat#2にレプリケーションされません.
そのため,データの同期が崩れてしまいます.

ロードバランサを使う場合は
・レプリケーションサーバとクラスタDBサーバを同居させない.
・同居させる場合はロードバランサのクラスタDB定義から外す.
のいずれかにする必要があります.

これは注意事項に追加します.

> クラスタDBサーバの状態にかかわらず、必ず『status:0』と表示されます。
> 関係があるのかどうかわかりませんが、念のためのせておきます。
『status:0』は初期化状態を意味します.
単に「設定ファイルを読み込んで領域を確保した」という意味です.

> > > # 最初はPGClusterで行っていたのですが、公式ページに記述
> > > # されている『クラスタDBサーバ再起動』の状況がおきてしまった為、
> > > # PGReplicate-0.7.2.3jでやり直しました。
> > これはレプリケーションサーバのポート番号を変えることで回避できました.
> 
> こちらについては、ポート番号で解決いたしました。
> 無事、クラスタDBサーバが再起動することなく動作いたしました。
> ありがとうございました。
ご報告,ありがとうございました.

=============================
三谷 篤<mitani @ sraw.co.jp>
=============================






pgsql-jp メーリングリストの案内