2009-07-07 10 views
0

クラスタ内の各サーバーには、15分ごとに1台のサーバーから同期される検索インデックスがあります。これは、フロックのためにnfs上でインデックスに追加することができないためです。 documentationを参照してください(インデックスがすべてのサーバーがアクセスする共有フォルダにある場合)。負荷分散環境でZend_Search_Luceneインデックスを管理する

私が実行している問題は、インデックスの変更が必要なアクションが実行された場合、インデックスのローカルコピーで変更が発生し、それらの変更を可能なかぎり最小限の侵入方法(次回の同期で変更がクラスタ内のすべてのサーバーに伝播するように)。

httpで親サーバーのインデックスを参照しようとしましたが、httpでmkdirを実行できないため、これは機能しません。リモートサーバーのインデックスを参照する方法はありますか?利用可能なアプローチが全く異なる場合は、

答えて

0

私はこのような状況を理解していますが、サーバーのインデックスの1つが変更された場合、rsynchのソースとしてメインインデックスを使用して、 rsyncが実行され、すべてのサーバーが更新されます。

メインサーバのインデックスをrsyncするのではなく、rsyncがrsyncのソースとして最新の変更日時を取得するのはなぜですか?サーバーDのインデックスの最新の更新がメインサーバーAのインデックスよりも大きい場合は、Dサーバーのすべてのサーバーを同期してください。

状況を正しく理解しましたか?

編集

は、その場合には、インデックス-ESを構築し、コードを編集して、そのシェルにexecの呼び出しを起動した場合、インデックスの前のビルドが違っていたかどうかを確認し行を追加します。スクリプトを実行するか、コマンドを手動でビルドしてセントラルサーバーを更新します。このようにして、中央サーバーは即座に更新を受信し、大きな同期がダウンすると、問題が解決されます。

+0

この解決方法の問題は、サーバーBとCも更新されている可能性があり、同期するともう一方が上書きされるためです。 – Akeem

+0

下の私のソリューションと 'Jason's'ソリューションを見てください。彼らはアーキテクチャが非常に似ており、あなたのベスト・ベットのようです。 –

0

私が考えることができる最も良い解決策は、より伝統的なマスター/スレーブレプリケーションパターンに従うことです。 RDBMSレプリケーションからインスピレーションを受けてください:すべての書き込みはマスターに行かなければなりません。

もちろん、これを直接行うことはできません。前述したように、リモートインデックスに直接書き込むことはできません。

スレーブがインデックスを間接的に更新するために使用できる、API /サービスを公開するオプションが1つあります。次に、すべての変更は、次のスケジュールされたプッシュで同期されます。私はこれがあなたの設計に大きな変化をもたらすかもしれないことを認識していますが、複製された環境や分散した環境では、これはしばしば必要です。

+0

私はApiを公開するというアイデアが好きです。より良いオプションは、SOLRを使用することです – Hemc

関連する問題