两个镜像的数据库服务器,或两倍的function

我正在为我的一个应用程序设置一个单独的数据库服务器,该应用程序目前运行在3台服务器上; 1个前端服务器和2个应用程序/数据库服务器。 但出于性能方面的考虑,我正在将数据库移到自己的机器上。

所以归结到这一点,我最好把两台服务器设置为对方的副本。 或者只是一台服务器,但它使function强大一倍?

我到目前为止想过的东西;
使用一台服务器:

  • 易于pipe理
  • 更多的CPU /内存/磁盘可用的数据库,因为操作系统将只占用一个大量的资源
  • 更多的存储空间(如果数据库被复制,我需要两倍的磁盘存储量来存储相同的数据)
  • 便宜(租用的服务器只有一点点,但我更想购买的服务器)

有两台服务器:

  • 更好的冗余(内核恐慌/磁盘故障/操作系统故障/networking故障和数据库作为一个整体仍然可以工作,但可能会放慢一点)
  • 每个服务器的磁盘/networkingIO更less(这会使速度更快吗?)

一些特定于我的情况的技术细节;
服务器将运行在名为StormOnDemand的云服务上,所以我们不会有太多的硬件可靠性问题。 我们也可以根据需要垂直缩放。
我们使用4种不同的数据库系统 Postgresql,MongoDB,Redis和Memcached *
上次我查了一下,我们每天在Postgres上的平均交易量只有2毫米左右,在Mongo上大约是2.5mill,不知道Redis和Memcached,但是我们用它们来caching,所以我想它们差不多。
服务器都通过1GB / s的本地networking连接。
关于中等大小的数据库(Postgresql:32GB,MongoDB:16GB,Redis和Memcached都使用内存进行存储,但我认为他们目前运行Redis:12GB和4GB)
我想要得到的服务器将是单个服务器的8CPU和30GB RAM,或者两个服务器的4CPU和8GB RAM

对于redundency,这是一个networking应用程序,绝大多数的访问者都在这样做,虽然我们不想停机,但是我们会很高兴每个月花费几个小时来节约从单个服务器。 在运行超氧化物歧化酶(SOD)的6个月中,我们从来没有任何停机时间,但这并不是说将来不会发生。

如果我已经排除了任何有用的细节,我很乐意提供这些细节,但是我尽可能地join了这些细节。

* Memcached将继续在应用程序服务器上运行,因此我们将其用作“本地caching”,因此不会在服务器之间复制/分片,使用Redis作为分布式caching

通常数据库受益于大铁。 一般来说,添加额外的盒子可以帮助Web和应用程序服务器的性能,但对于数据库来说,答案通常是获得更大,更快的机器。

但是另一方面,拥有更多等价的节点总是会提高可用性以及性能 – 考虑如果您花费3000美元购买一台shiny的服务器,那么在其生命周期(例如1%)内可能有失败的可能性。 或者你可能会购买2个基本规格机器的失败概率为5%。 你最好把钱花在shiny的盒子上吗? 如果你看一下基本机器出现故障的可能性就会less得多 – 0.05 * 0.05 * 100 = 0.25%,即4倍的可靠性。

但是非常多的依赖于你正在使用的DBMS。 NoSQL数据库旨在扩展大量服务器。 MySQL复制相对可靠和高效。 但是mysql和nosql数据库往往不能实时复制。 如果你需要整个集群的一致性,那么你需要像Oracle RAC这样的多节点 – 而IME,它会产生大量的节点间喋喋不休 – 在这种情况下,你最好购买更大的盒子。

所以在你的情况下,mongoDB和Redis肯定会支持多节点解决scheme。 我对PostGreSQL集群的了解是有限的,但是鉴于它对查询一致性的支持,我期望它的行为更像Oracle(即充足的本地磁盘和networkingI / O)。

我会说你的数据集是一个小方面 – 事实上,我很担心你使用4个不同的基板来pipe理你的数据 – 并强烈build议将它们合并

我不得不说任何你认为可以逃脱的东西,但是数据丢失风险最小。 你谈论使用云存储,并认为这将是更实际的,在我看来,一台服务器。 你也提到几次成本,所以我拿钱是很难的,增加一个系统的规格要比另一个不太强大的系统精确匹配容易得多。 总是问自己“我真的需要这个”吗? 你永远不会出错