2010-05-17 35 views
1

我們將Java企業應用程序部署到多個服務器上。有運行相同應用程序以進行負載均衡的複製服務器(我們稱之爲J2EE服務器)。請注意,這不是集羣化的。從一個位置共享屬性文件

有一個共同的服務器(我們稱之爲道具服務器),託管與所有應用程序相關的所有屬性文件。包含屬性文件的文件夾在所有其他J2EE服務器之間共享。 問題是你可以看到道具服務器是單點故障。如果它沒有出現,或者NFS共享被損壞,其他服務器將無法加載屬性。

有什麼選擇可以避免這種嚴重的依賴性? 鑑於我們不想將屬性文件複製到所有服務器的限制。

+0

爲什麼你不想複製它們? 我想運行一個輔助備份服務器只是爲了託管屬性是矯枉過正:) – Anton 2010-05-17 15:40:23

+0

這意味着一旦屬性文件發生變化,它需要反映在相關的所有服務器上。 – 2010-05-17 15:56:18

回答

1

鑑於我們不 希望屬性文件複製到 所有服務器的限制。

如果您可以將屬性複製到某些服務器,選擇一個領導並確保任何修改傳播到備份,那麼Paxos是您的朋友。如果領導失敗,可以選一個新領導。我已更新維基百科頁面。它包含有關算法描述的錯誤。

2

其中一種方法是每個J2EE服務器都有一套克隆的配置文件。這意味着一個限制,即每次配置更改爲一臺服務器時,它應該在所有其他服務器之間進行rsync-ed(在更改已知爲確定之後)。

好的一面很明顯,你確實有N個可獨立配置的服務器,而配置更改會殺死(如果殺死)只有一臺服務器。

消極的一面是,有時候有人會忘記在一個盒子上更改配置後,'rsync'&'跳動'。

3

如果你有這個問題,更具擴展性的解決辦法是考慮使用這樣的:

http://java.sun.com/j2se/1.4.2/docs/guide/lang/preferences.html

這個抽象了的東西就像他們身在何處。然後,您可以將這些設置存儲在LDAP服務器,克隆的屬性或任何最佳的設置中​​ - 甚至可以針對不同的環境使用不同的機制。

+0

Java SE 8鏈接http://docs.oracle.com/javase/8/docs/technotes/guides/preferences/index.html – 2015-04-10 01:08:44