1

我们将 Java Enterprise 应用程序部署到多台服务器上。有运行相同应用程序以进行负载平衡的复制服务器(我们称它们为 J2EE 服务器)。请注意,这不是集群的。

有一个通用服务器(我们称之为 props 服务器)托管与所有应用程序相关的所有属性文件。包含属性文件的文件夹是 NFS 在所有其他 J2EE 服务器之间共享的。问题是您可以看到道具服务器是单点故障。如果它没有出现或者如果 NFS 共享被损坏,其他服务器将无法加载属性。

有哪些选择可以避免这种硬依赖?鉴于我们不想将属性文件复制到所有服务器的约束。

4

4 回答 4

3

如果您遇到此问题,则更具可扩展性的解决方案是考虑使用以下方法:

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

这会抽象出它们所在的位置。然后,您可以将这些设置存储在 LDAP 服务器、克隆的属性或任何最好的东西中——您甚至可以为不同的环境使用不同的机制。

于 2010-05-17T15:34:57.757 回答
2

一种方法是让每个 J2EE 服务器拥有一组克隆的配置文件。这意味着每次更改一个服务器的配置时都应该在所有其他服务器中进行 rsync-ed 的约束(在已知更改正常之后)。

积极的方面很明显,您确实有 N 个独立可配置的服务器,并且配置更改只会杀死(如果杀死)一台服务器。

不利的方面是,有时有人会在单个盒子上更改配置后忘记执行“rsync”和“bounce”。

于 2010-05-17T15:34:54.750 回答
1

鉴于我们不想将属性文件复制到所有服务器的约束。

如果您可以将属性复制到某些服务器,选举领导者并确保将任何修改传播到备份,那么 Paxos 就是您的朋友。如果leader失败,可以选举新的leader。我已经更新了维基百科页面。它包含有关算法描述的错误。

于 2011-05-02T00:27:57.043 回答
1

看一下 PAXOS 算法。它旨在使多个服务器达成共识。

http://en.wikipedia.org/wiki/Paxos_algorithm

于 2010-05-17T18:14:22.330 回答