2009-07-07 92 views
0

集羣中的每臺服務器都有一個搜索索引,每15分鐘從一臺服務器同步一次搜索索引。這樣做是因爲附加到索引不能在nfs上發生,因爲羣集;請參閱documentation(否則索引將位於所有服務器均可訪問的共享文件夾中)。管理負載平衡環境中的Zend_Search_Lucene索引

我遇到的問題是,如果採取的行動需要修改索引,修改發生在索引的本地副本上,我需要一種方法將這些更改同步到父級儘可能使用侵入性最小的方法(以便通過下一次同步將更改傳播到集羣中的所有服務器)。

我試着通過http引用父服務器索引,但這不起作用,因爲mkdir無法通過http完成。有沒有辦法引用遠程服務器的索引?如果有一個完全不同的方法可用,將被考慮

回答

0

正如我所理解的這種情況下,如果服務器的索引之一進行修改,您希望主索引作爲rsynch的來源在下一個之前接收更新rsync發生 - 用更新更新所有服務器。

而不是rsync主服務器索引,爲什麼不rsync採取最新的修改日期作爲rsync的源?因此,如果服務器D上的最新索引更新大於主服務器A上的索引,則只需同步源D上的所有服務器即可。我是否正確理解您的情況?

編輯

那麼在這種情況下,編輯建立索引-ES的代碼,並添加一個檢查,看看是否索引的以前的版本是不同的線路,如果是這樣發動exec調用一個shell腳本或手動構建命令以更新中央服務器。通過這種方式,中央服務器可以即時接收更新,當大同步關閉時,您的問題就會解決。

+0

此解決方案的問題在於服務器B和C可能也有更新,並且同步一個會覆蓋另一個。 – Akeem 2009-07-07 12:43:30

+0

看看我的解決方案和下面的'傑森的'解決方案..它們在架構上非常相似,看起來像你最好的選擇 – 2009-07-08 19:08:22

0

我能想到的最佳解決方案是遵循更傳統的主/從複製模式。從RDBMS複製中獲得一些啓發:所有寫入都應該發送給主節點。

當然,你不能直接這樣做。正如你所提到的,你不能直接寫入遠程索引。

所以,這給你留下了一個選擇:在主服務器上公開一個API服務器,從屬服務器可以使用它來間接地更新索引。然後,所有更改將在您下一次預定推送時同步。我意識到這可能是您設計的重大改變,但在複製或分佈式環境中,這往往是必要的。