如何设置多个Web和数据库服务器?

我的网站在stream量方面一直在增长,而mysql的负载也在不断增长。 我想要一个解决scheme,以帮助处理增加的MySQL负载(所有查询已经优化),因为stream量+备份服务器的增加可以作为一个故障转移,如果我的主服务器出现故障。

我已经阅读了关于设置多个Web和数据库服务器的问题,但是有几个问题:

1)如何在维护相同的内容的同时设置多个Web服务器(每次更新或者以其他方式时,是否必须将file upload到所有服务器?)

2)同样,如果我不得不把数据库扩展到多个服务器,除了复制之外还有别的办法,或者是复制mysql是最好的办法。

3)我已经读过,从Web服务器分离数据库是一个好主意,为什么呢? 如果我有2个服务器,我不能同时拥有这两个服务器上的数据库和文件。

4)是否有必要的负载均衡器,它是否有助于平衡MySQL查询以及如果复制设置?

只是非常困惑,想要一些帮助。

传统的设置将是分开您的networking/应用程序服务器和您的数据库服务器。 把它们放在同一个盒子里将是相当严格的。 如果您的Web应用程序由静态和dynamic内容组成,那么进一步分离(单独的Web服务器,应用程序服务器和内容服务器)将会提高性能。

就MySQL而言,你可能想要尝试一下;

  • 绝对有自己的专用服务器上的MySQL。
  • 把尽可能多的内存和机器可以承担的内存,MySQL 喜欢内存。
  • 把你的操作系统,二进制日志和数据放在三个独立的物理磁盘上。

1)如何在维护相同的内容的同时设置多个Web服务器(每次更新或者以其他方式时,是否必须将file upload到所有服务器?)

情况变得越来越复杂。 开始时,您只需手动将所有内容同时部署到所有服务器。 你可以写一个脚本来做到这一点。

你可以做的更大, configurationpipe理软件可以帮助。 另外, OpenEFS将是一个合适的解决scheme。

使用静态内容和某些types的内容,可用的选项更多。 这些决定是因为当你试图通过负载平衡的应用程序本身来修改或上传内容时更加明显,就好像你处理不好,你会导致数据分区。 例如,上传的文件将只在其中一个负载平衡的服务器上。

没有特别的顺序:

  • 使用内容交付networking 。
  • 用自己的caching代理你的静态内容。
  • 将数据存储抽象成高度可用的文件系统。
  • 通常,理想的解决scheme是将内容存储在数据库中。

2)同样,如果我不得不将数据库扩展到多个服务器,除了复制之外还有其他的方法,或者是复制mysql的最好方法。

这取决于您的最终目标:一致性,可用性或分区容差。 妥协可能是必要的。 这是一个膨胀的主题,你可以通过阅读高性能MySQL等书籍获益。 常用选项:

  • 使用诸如Linux-HA , VRRP 或多主MySQL之类的技术进行双主复制。 这将有一个浮动的IP。 您将需要实现自动ID偏移量,并了解应用程序的性能。
  • 使用类似DRBD的解决scheme进行块级存储复制,然后再次使用像Linux-HA这样的技术在发生故障时对资源进行故障转移。

MySQL还发布了各种白皮书 。

3)我已经读过,从Web服务器分离数据库是一个好主意,为什么呢? 如果我有2个服务器,我不能同时拥有这两个服务器上的数据库和文件。

将angular色转化为目标更好,因为它降低了复杂性和安全风险。 您可能会从至less两个负载均衡器,两个数据库服务器和两个Web服务器中受益。 请注意附加的故障点,因为高可用性不会在此停止。 您的networking可能会成为下一个明显的单点故障。

它还支持标准构build,缩放和转移angular色,而且复杂性较低。 尽pipe如此,这些function并不是独立于分离服务器angular色的。

4)是否有必要的负载均衡器,它是否有助于平衡MySQL查询以及如果复制设置?

对于写查询和MySQL,纵向扩展通常更容易。 横向扩展,这将是许多现代解决scheme的首选,你需要使用一个体系结构,如分片 。 理想情况下,您的应用程序将不得不被devise为支持。 还有我通常会担心的各种中间件解决scheme。

您可以轻松地将负载平衡到MySQL复制从属服务器,这将允许您使用负载均衡的VIP进行只读查询。