[pgcluster: 980] クラスタDB間のデータ不整合について

akira hibakari hiba @ yb3.so-net.ne.jp
2007年 4月 19日 (木) 17:09:28 JST


初めまして、日計(ひばかり)と申します。
よろしくお願いいたします。

さっそくの質問で恐縮ですが、どなたかお知恵を貸していただけると幸いです。

PHP + PGClusterでWebシステムを構築しております。
稀にですが、クラスタDB間でデータの不整合が発生しています。
頻度としては、1週間に1〜2回というところですが、1度でも起きてしまうと
致命的なので、なんとか解決したいところです。

まず、レプリケータのログpgreplicate.logを見ると(抜粋)、
Thu Apr 19 11:56:43 2007  PGRread_packet():recv failed: (Connection reset by peer)
Thu Apr 19 12:18:08 2007  PGRread_packet():recv failed: (Connection reset by peer)
Thu Apr 19 12:18:08 2007  PGRread_packet():recv failed: (Connection reset by peer)
というものが頻発しています。

また、ロードバランサのログpglb.confを見ると(抜粋)、
Tue Apr 17 21:25:30 2007  pool_read: EOF encountered
Tue Apr 17 21:25:30 2007  ProcessFrontendResponse(): failed to read kind
というものがたまに現れており、特にこのようなログが現れるときに上述の問題が発生
するように思えます(頻度が少ないため、確実に同時かどうかは判断できません)。

これらのログの意味するところはどのようなものでしょうか?
また、これらのログの内容と、上述の問題とは関連があるのでしょうか?

なお、上述の問題は、CSE(Common SQL Environment)というWindowsのツールを
用いてデータの更新操作をしたときに特に現れると思える節があります。
#CSEの接続先は、ロードバランサのホスト・ポート番号にしてあります。

お手数ですが、御教授頂けますでしょうか?

構成と設定は以下のようになっております。
(サーバ名は*****のように伏せてありますが、お許しください)。

PGClusterバージョン:pgcluster-1.3.1rc7版
OSバージョン:RedHat Enterprise Linux ES v.4

 --*****-a機--------      --*****-b機-------
| Webサーバ       |     |  クラスタDB2   |
| ロードバランサ  |     |                |
| クラスタDB1     |      ------------------
| レプリケータ    |     
 ------------------

/etc/hostsファイル
*****-aのhosts
127.0.0.1               localhost.localdomain localhost
192.168.0.234           *****-a
192.168.0.235           *****-b

*****-bのhosts
127.0.0.1               localhost.localdomain localhost
192.168.0.235           *****-b
192.168.0.234           *****-a

pglb.conf抜粋
<Cluster_Server_Info>
    <Host_Name>   *****-a  </Host_Name>
    <Port>        5432                </Port>
    <Max_Connect> 40                   </Max_Connect>
</Cluster_Server_Info>
<Cluster_Server_Info>
    <Host_Name>   *****-b   </Host_Name>
    <Port>        5432                </Port>
    <Max_Connect> 40                  </Max_Connect>
</Cluster_Server_Info>
<Host_Name>   *****-a  </Host_Name>
<Backend_Socket_Dir>    /tmp     </Backend_Socket_Dir>
<Receive_Port>          5431     </Receive_Port>
<Recovery_Port>         6001     </Recovery_Port>
<Max_Cluster_Num>        128     </Max_Cluster_Num>
<Use_Connection_Pooling>  no     </Use_Connection_Pooling>


pgreplicate.conf抜粋
<Cluster_Server_Info>
    <Host_Name>   *****-a  </Host_Name>
    <Port>        5432                </Port>
    <Recovery_Port>       7001        </Recovery_Port>
</Cluster_Server_Info>
<Cluster_Server_Info>
    <Host_Name>   *****-b </Host_Name>
    <Port>        5432                </Port>
    <Recovery_Port>       7001        </Recovery_Port>
</Cluster_Server_Info>
<LoadBalance_Server_Info>
    <Host_Name>   *****-a  </Host_Name>
    <Recovery_Port>       6001            </Recovery_Port>
</LoadBalance_Server_Info>
<Host_Name> *****-a </Host_Name>
<Replication_Port>      8001        </Replication_Port>
<Recovery_Port>         8101        </Recovery_Port>
<RLOG_Port>             8301        </RLOG_Port>
<Response_Mode>         normal      </Response_Mode>
<Use_Replication_Log>   yes         </Use_Replication_Log>


クラスタDB1のCluster.conf抜粋
<Replicate_Server_Info>
    <Host_Name> *****-a </Host_Name>
    <Port> 8001 </Port>
    <Recovery_Port> 8101 </Recovery_Port>
</Replicate_Server_Info>
<Recovery_Port>     7001            </Recovery_Port>
<Rsync_Path>        /usr/bin/rsync  </Rsync_Path>
<Rsync_Option>      ssh -1          </Rsync_Option>
<Rsync_Compress>    yes             </Rsync_Compress>
<Pg_Dump_Path>      /usr/local/pgsql/bin/pg_dump    </Pg_Dump_Path>
<When_Stand_Alone>  read_only       </When_Stand_Alone>


クラスタDB2のCluster.conf抜粋
<Replicate_Server_Info>
    <Host_Name> *****-a </Host_Name>
    <Port> 8001 </Port>
    <Recovery_Port> 8101 </Recovery_Port>
</Replicate_Server_Info>
<Recovery_Port>     7001            </Recovery_Port>
<Rsync_Path>        /usr/bin/rsync  </Rsync_Path>
<Rsync_Option>      ssh -1          </Rsync_Option>
<Rsync_Compress>    yes             </Rsync_Compress>
<Pg_Dump_Path>      /usr/local/pgsql/bin/pg_dump    </Pg_Dump_Path>
<When_Stand_Alone>  read_only       </When_Stand_Alone>

以上、よろしくお願いいたします。


-akira hibakari-




pgcluster メーリングリストの案内