[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 メーリングリストの案内