假设我有一个在 Tomcat 上运行并使用 MySQL 数据库的 Spring Framework 应用程序:
在这种情况下,什么是能够实现社交性(价格/性能/集成时间)的最佳解决方案?
更准确地说:Web 负载平衡器盒上应该有什么,谁应该集群化 tomcat Web 服务器?数据库负载平衡器盒上应该有什么,数据库服务器应该如何集群化?如果可能的话,具体的技术集成链接将大有帮助。
答案1
对于 Web 负载平衡,有多种解决方案,开源和付费,我个人使用过思科负载平衡器(CSM 和 ACE)和 F5,并且喜欢它们(但这些解决方案可能会很昂贵)。开源有多种,我想到的是http://www.linuxvirtualserver.org/
对于 mysql 负载平衡,您可以查看 msyql 的主到主复制。查看:http://www.howtoforge.com/mysql_master_master_replication。我过去为一个项目所做的工作是,我有 3 个 Web 服务器服务器群,它们位于大 IP(F5)后面,它们都与一个 mysql 服务器通信。我在另一个站点上有完全相同的设置,并且两个 mysql 服务器都有主到主复制。因此,用户将使用所有 Web 服务器和数据库服务器,如果其中一个数据库服务器发生故障,则该站点上的 Web 群将发生故障,用户将只能使用另一个站点。(DNS 故障转移和监控用于多个站点监控和故障转移)。如果您有预算,可以使用全局负载平衡器来获得更细粒度的效果。
答案2
普通 MySQL 没有负载平衡选项,但是MySQL 集群做。
我建议对多个 MySQL 实例使用 MySQL Cluster。
然后,您可以使用 MySQL Connector/J 透明地平衡 JDBC URL。请参阅http://dev.mysql.com/doc/ndbapi/en/mccj-using-connectorj.html
附言:我投票将此问题移至 ServerFault.com。
答案3
我不推荐使用 MySQL Cluster。我从未见过它表现良好且不经常崩溃。不过已经有一段时间没用它了(因为大约一年前它真的不起作用)。
只需使用带有从属的主服务器。在从属服务器上执行所有读取操作(除非您需要读取自己的写入或当前到 ms 的数据)。如果这对您来说还不够(您需要进行多次写入)。是时候考虑分片了。
另一种选择,如果你的应用程序允许它(或者可以变成允许