[Linux-ha-jp] PostgreSQL 9.1 同期レプリケーション対応RA作ってみました

アーカイブの一覧に戻る

Yoshiharu Mori y-mor****@sraos*****
2011年 9月 18日 (日) 16:28:44 JST


盛です。

> 突然ですが、PostgreSQL 9.1 (まだbeta)  の同期レプリケーションに対応した
> リソースエージェント(RA)を書いてみました。

9.1リリース版で利用してみました。

そのままでは動かなかったので、以下の修正を行ってから動作を確認しております。
(SQLの結果を大文字にしただけ)

-1486 CHECK_REPLICATION_STATE_SQL="select application_name,state,sync_state from pg_stat_replication"
+1468 CHECK_REPLICATION_STATE_SQL="select application_name, upper(state),upper(sync_state) from pg_stat_replication"


>  ・ Primary故障時、Hot Standby の Primary への昇格 (Masterのフェイルオーバ)

Masterのフェイルオーバを確認しました。
crmよりdemote&promoteを行うことで、手動でPostgreSQLのPrimary と Hot Standby
の切り替えもできました。
また、Hot Standby側のDBが停止したときには、DBを立ち上げ直してくれました。

ただPrimary側のDBを落とすと、フェイルオーバが発生し、旧Primary側は
Hot Standbyとして立ち上がりました。(migration_threthold=3で実験)
こちらはそういう仕様ですか? (Primary側のDBだけを立ち上げ直すことはしませんか??)

>  ・ DBデータの新旧の管理・判別

xlogの進捗を互いのノードで確認しているようですね。
これで安全に運用できます。

>  ・ 同期レプリケーション・非同期レプリケーションの自動切替

こちらの機能はすごいですね。
PostgreSQL 9.1の同期レプリケーションでは、Hot Standby側が落ちると
PRIMARY側のPostgreSQLの設定を書き直してリロードを行わないと、
書き込みトランザクションがブロックされてしまうので、運用がやや大変ですが、
このRAはそこまで面倒を見てくれますね。
#このRAなしに9.1の同期レプリケーションを使いこなすことは難しそう・・

また、Hot Standby側のDB復帰時もキャッチアップするまで状態を監視していますね。

>  ・ Readの負荷分散 (RAの機能ではないですが、仮想IPと連携させてあげることで可能!?)

こちらは先日リリースしたばかりのpgpool-II 3.1と相性が良さそうです。

レプリケーションはpacemaker側で面倒を見てくれるので、pgpool-IIはクエリの振り分け
をするだけですみます。
pgpool-II 3.1では障害があったDBノードをpgpoolから切りはなさず、フェイルオーバも
発生させない仕組み(DISALLOW_TO_FAILOVER)が使えるので、この機能とPacemakerが
用意してくれる書き込み用の仮想IPと負荷分散用の仮想IPをpgpool-IIに設定すれば、上手く
負荷分散と障害時の切り替えに連動してくれました。

ただ、pgpoolを利用する場合では、スレーブが落ちている時に参照用の仮想IPがなくなってしまうと
困るので、一時的に参照用の仮想IPをマスタ側につける設定にするなどの工夫をする必要はあります。
(以下のように強引に設定したら連動してくれました)

location rsc_location-1 vip-slave \
        rule $id="rsc_location-1-rule" 100: pgsql-status eq PRI \
        rule $id="rsc_location-1-rule-1" 200: pgsql-status eq HS:sync \
        rule $id="rsc_location-1-rule-2" -inf: pgsql-status eq STOP

次は、同期レプリケーション2台+非同期レプリケーション1台で試してみます。

以上です。

> 松尾です。
> 
> 突然ですが、PostgreSQL 9.1 (まだbeta)  の同期レプリケーションに対応した
> リソースエージェント(RA)を書いてみました。
> 
>   https://github.com/t-matsuo/resource-agents/blob/pgsql91/heartbeat/pgsql
> 
> 主な機能は、
> 
>  ・ Primary故障時、Hot Standby の Primary への昇格 (Masterのフェイルオーバ)
>  ・ DBデータの新旧の管理・判別
>  ・ 同期レプリケーション・非同期レプリケーションの自動切替
>  ・ Readの負荷分散 (RAの機能ではないですが、仮想IPと連携させてあげることで可能!?)
> 
> といったところです。
> なお、PostgreSQL 9.1 のインタフェースを前提に作っているので、9.0では動きません。
> 
> RAは本家コミュニティから提供されているPostgreSQL用RA (pgsql) をベース作っており、
> PostgreSQL 9.1 の正式リリース日 (9月ぐらい?) を目標に本家コミュニティに提案して
> みたいと思っています。
> 
> 簡単に概要や使い方を以下に記述していますので、ご興味がある方や、
> PacemakerやPostgreSQLのレプリケーションを使ってみたことがある方は、
> 是非試してみて頂けませんか。
> 
>   https://github.com/t-matsuo/resource-agents/wiki/PostgreSQL-9.1-ストリーミングレプリケーション対応-リソースエージェント
> 
> まだ、とりあえず動く段階のもので、細かな検討漏れ、バグが多数あると思いますが、
> コメントや動作・バグ報告、パッチ等頂けると助かります。
> 使い方がわからない場合も、本ML宛へお願いします。
> 
> 
> ※もうす夏休み時期のため、返信が遅くなるのはご了承ください・・・
> 
> 以上よろしくお願い致します。
> _______________________________________________
> Linux-ha-japan mailing list
> Linux****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/linux-ha-japan


-- 
Yoshiharu Mori <y-mor****@sraos*****>
SRA OSS, Inc Japan http://www.sraoss.co.jp
TEL: 03-5979-2701 
FAX: 03-5979-2702





Linux-ha-japan メーリングリストの案内
アーカイブの一覧に戻る