[pgsql-jp: 36602] Re: Webサーバ冗長化構成での pgpool の配置

Tatsuo Ishii ishii @ sraoss.co.jp
2006年 1月 7日 (土) 22:53:00 JST


石井です。

> ・WebServer1
>     pgpool -----+---- DBServer1(master)
>                 |
>                 +---- DBServer2(secondary)
> 
> ・WebServer2
>     pgpool -----+---- DBServer1(master)
>                 |
>                 +---- DBServer2(secondary)
> 
> 上図のようにWebサーバの冗長構成を組んでおり、各Webサーバ上でpgpoolを配置しています。
> Webサーバのローカルでpgpoolを稼動させているのは、UNIXドメインソケット経由でWebサーバ
> から接続させることで高速化させようという狙いです。
> 
> 
> ◆ ここで問題(疑問)なのですが、万が一、
> 
>   Web1 の pgpool で縮退運転が開始 → master up, secondary down の状態
>   Web2 の pgpool で縮退運転が開始 → master down, secondary up の状態
> 
> といったことが起こり得るため、上図のような構成は不適切なのでしょうか?

理論的には、DBserver1/2の状態がpgpoolその1、その2で違って見えるはずが
ないので、特に問題ないと思います。あるとすれば、ネットワークやスイッチ
の不具合で、

1) pgpoolその1から見るとDBserver1につながらなくなったので、pgpoolその2
   はDBserver1を切り離した

2) pgpoolその2から見るとDBserver1も2も健全なので、レプリケーション状態
   を維持した

という状況が発生したときくらいですかね。こういう状況にpgpoolだけで対応
するのはなかなかつらいので、ネットワーク経路の二重化とかで対応して欲し
いものだと思いますが...

> ◆ その問題を解消するには、やはりアプリケーション全体で pgpool を1つだけにすべきなのでしょうか?
> その場合、pgpool自体の冗長構成を組むことができないのでしょうか?
> (pgpoolがシングルポイントになってしまう)

pgpoolが single point of failureになります。回避するためには、
heartbeatとかを導入すればできそうな気がしますが、まだ試したことはあり
ません。

> ◆ 同じようなWebServer 2台、DBServer 2台の構成で、最適なシステム構成をご存知の方、実績の
> ある方がいらっしゃいましたら、ぜひアドバイスを頂けないでしょうか?
> 
> まだまだPostgreSQL、pgpoolを勉強中であります。
> 何卒、よろしくお願いいたします。
> 
> 
> ◇ 参考
> 
> ・OS(WebServer1,WebServer2,DBServer1,DBServer2)
> Red Hat Enterprise Linux ES release 3
> 
> ・PostgreSQL(DBServer1,DBServer2)
> PostgreSQL 8.1
> 
> ・pgpool.conf 設定内容(抜粋)(WebServer1,WebServer2)
> replication_mode = true
> replication_strict = true
> load_balance_mode = true
> replication_stop_on_mismatch = true
> insert_lock = true

個人的には、

replication_stop_on_mismatch = false

で運用した方が、ささいなことで縮退しないのでよいと思います。
そのかわりhealth checkを入れてDBサーバの状態を監視するようにした方が良
いのではないでしょうか。health checkがないと、DBにアクセスに行くまで障
害を検知できませんので。
--
Tatsuo Ishii
SRA OSS, Inc. Japan



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