0

(バージョン pgpool-II-pg93-3.4.0-3pgdg.rhel6.x86_64.rpm)

しばらく前からこれについてオンラインでチャットを見たことがありますが、解決策は見つかりませんでした。

ストリーミング レプリケーションと負荷分散を実行している 2 つの pgpool サーバーがあります。それらは 3 つの postgres サーバーに接続します。2 台は仮想マシンで、1 台は物理マシンです。

物理マシンをマスター サーバーにすることをお勧めします。pcp_promote_node コマンドを使用してテストを行ったところ、show pool_nodes; プライマリとして選択したノードを示していますが、postgres 側ではコマンド SELECT pg_is_in_recovery(); そのサーバーがまだ回復中であることを示します。

pcp_promote コマンドが行うのは、マスター ノードの切り離しだけです。これにより、DB への挿入が防止されます。

次に、マスターに障害が発生した場合、別のサーバーがマスターになりますが、他のスレーブはこれを知らず、新しいマスターから復元するまで新しいデータを複製しません。

上記の 2 つの問題の回避策はありますか。また、ログなどの詳細情報が必要な場合はお知らせください。

ありがとう

4

1 に答える 1

2

わかりました。設計上、pgpool は上記のことを行います。

この問題を解決するには、pgpool.conf ファイルの follow_master_command を使用する必要があります。

次のスクリプトを使用します( /etc/pgpool-II フォルダーに配置する follow_master.sh )

#!/bin/sh

################
##
## $1 = node id
## $2 = Old master node id
## $3 = node hostname
##
############### 
PGPOOLIP=10.**.**.**    
PGUSER=postgres
PGPASS=*************
PGHOME=/var/lib/pgsql/9.3
REMOTE_PGDATA=/var/lib/pgsql/9.3/data

if [ $1 = $2 ]; then
        /usr/bin/pcp_detach_node 10 $PGPOOLIP 9898 $PGUSER $PGPASS $1
else
        sleep 5
        ssh -T postgres@$3 "
        LD_LIBRARY_PATH=$PGHOME/lib:LD_LIBRARH_PATH;
        $PGHOME/bin/pg_ctl -w -D $REMOTE_PGDATA stop"
        /usr/bin/pcp_detach_node 10 $PGPOOLIP 9898 $PGUSER $PGPASS $1
        /usr/bin/pcp_recovery_node 10 $PGPOOLIP 9898 $PGUSER $PGPASS $1
        /usr/bin/pcp_attach_node 10 $PGPOOLIP 9898 $PGUSER $PGPASS $1
fi

テストを行いましたが、問題なく動作しているようです。

これが将来誰かに役立つことを願っています。

ありがとう

ロブ

于 2015-01-14T09:04:51.520 に答える