デモ版のソースについて

デモでお見せできなかったReplication Log機能を含むソースを公開します.

1.Replication Logはどんな機能か?

PGClusterではレプリケーションサーバに障害が発生した場合,待機系のレプリケーションサーバが用意されていれば,待機系に自動的に切り替わりますので,システムが止まることはありません.しかし,タイミング的にレプリケーションの途中で障害が発生していた場合,そのレプリケーションは途中で終了してしまいます.その結果クラスタDB間でデータの不整合が発生することになります.

そこで,レプリケーションサーバに障害が発生した場合でもクラスタDBのデータ整合性を保証する仕掛けとして考えたのがReplication Logです.まず,レプリケーションサーバがクエリーを受け取った場合,待機系のレプリケーションサーバにクエリーを送り,Replication Logとして保存します.レプリケーションサーバに障害が発生した場合,待機系のレプリケーションサーバから 保存しているReplication Log を使ってレプリケーションされていないクエリーを補完します.

2.設定方法

Replication Log機能を使う為には,待機系のレプリケーションサーバが必要です.

(1)待機系のレプリケーションサーバでの設定

待機系のレプリケーションサーバの設定ファイル(pgreplicate.conf)にマスタ系のレプリケーションサーバの情報を設定します.
<Replicate_Server_Info>
   <Host_Name> upper_replicate.postgres.jp </Host_Name>
   <Port> 8777 </Port>
   <Recovery_Port> 7778 </Recovery_Port>
</Replicate_Server_Info>

(2)マスタ系のレプリケーションサーバでの設定

マスタ系のレプリケーションサーバの設定ファイル(pgreplicate.conf)でReplication Logを有効にします.
<Use_Replication_Log> yes </Use_Replication_Log>

3.デモ用に障害を発生させるレプリケーションサーバを作るには

レプリケーションの途中でレプリケーションサーバが落ちるようにするには,ヘッダファイル(pgreplicate.h)内でのdefine文を切り替えてコンパイルすることで動きの異なるレプリケーションサーバを作ることができます.

<pgcluster-1.0.7rc_demo/src/pgcluster/pgrp/pgreplicate.h>
#define PGREPLICATE_VERSION "1.0.7rc_demo"

#if 0
#define COMMIT_ABORT_TEST (1)  <−これを有効にするとトランザクションの途中でダウンする
#define INSERT_ABORT_TEST (1)   <−これを有効にするとINSERTの途中でダウンする
#endif

4.デモ版のソースのダウンロード

デモ版のソースはこちら(11,720.6KB)
注意点:このソースはデモ用です.データが壊れても良いテスト用の環境で試してください.