我想升级我的服务器,因为MySQL的负载过高导致缓慢+每当在数据库上运行备份进程,数据库将无法访问,所以想要一些解决scheme。 我目前的服务器是8GB RAM的Opteron 2212。
我的networking主机提出了一个较低的configuration服务器(Phenom Hexacore与8GB内存),但采取3服务器+负载平衡器…他们说,这将有助于在stream量高的情况下,也有助于当一台服务器失败,那会有一个备份服务器。
进一步询问他们说,没有MySQL复制将build立,因为他们收取额外的,但仍然能够configuration一个设置,将满足我的需求。
我真的不确定,如果我有3个这样的服务器,没有mysql复制,我的升级目的是否会实现?他们不清楚如何设置它。 任何想法,这是否是一个好的解决scheme,我可以向他们提出什么?
他们想从你身上赚更多的钱,就这么简单。
首先要做的是:做一个备份让你的数据库无法访问? 要么你有一个非常糟糕的备份解决scheme,或者你有严重的服务器I / O问题。 这很可能是I / O。 我首先想到了这个问题。 如果您使用的是VPS,则您的主机可能能够为您分配原始LUN映射,而不是在共享的抽象LUN上为您提供虚拟磁盘。
如果他们不打算build立MySQL复制,那么你要么自己做,要么向你收取一笔财产。 我不熟悉MySQL的复制(只有MSSQL),但我猜这不是一个微不足道的任务,需要由知道自己在做什么的人来完成。 如果你不打算复制你的SQL服务器,只有你的networking服务器,那么我不明白这将如何帮助你的网站。
第三,你没有给我们关于数据库的任何细节,所以这只是一个黑暗中的刺,但也许有些地方你可以优化你的数据库。 Opteron 2212和8Gb的RAM不是一个缓慢的系统。 我们每天18小时有400个并发用户,每天在我们的门户网站上敲击超过500,000个请求,导致30Gb数据库中有数以百万计的查询,并且在类似规格的机器上运行得非常好。 精心devise的指数可以为您节省大量的金钱,时间和头痛。
我认为还有很多其他的途径可以先考虑,然后再决定下载负载平衡path,特别是如果你要集群SQL服务器。 有一点他们得到了正确的 – 如果一个服务器宕机,你有即时故障转移(如果你的负载平衡器configuration正确),但即使你没有故障转移,你有备份(因此第一点)所以它可能不是世界末日。
虽然我赞赏Farseeeker的观点,并认为它有价值,但我build议他们唯一的动机可能不仅仅是从你那里赚钱。
这听起来似乎可能提供接近理想的解决scheme,或者至less比您现在实施的更专业的解决scheme。 尽pipe如此,它仍然可能过度devise以满足您的需求。 这部分是一个商业问题。 额外的费用是否合理?
高负载需要更多的研究。 修辞是否读取查询? 他们可以优化吗? 你的模式是否优化? 如果是写查询,则可能需要扩大或缩小。 否则,您可以考虑归档不再需要的数据。
备份MySQL数据库的常用解决scheme是使用从属关系,然后对其进行快照,防止数据库locking。 虽然I / O争用是一个可能的原因,但使用mysqldump或mysqlhotcopy常常会引入某种级别的locking。 其他解决scheme包括Xtrabackup 。 您的备份解决scheme有很大的改进余地。
虽然他们所提出的build议肯定比现在更接近理想和更好,但是否有理由由你来决定。 通过改进现有产品,您可能会获得更大的回报,并降低经常性费用,因为这将巩固您未来发展的平台。
您应该能够在该机器上运行备份而不locking数据库。 我会看看其他备份选项。 你现在在用什么?
除非您的并发用户负载是问题,否则负载均衡器+服务器将导致更多的问题比解决scheme。 根据您的数据库使用情况(什么样的I / O?大部分读取?主要是写入?)有几种方法来优化您的数据库。 MySQL复制并不难,但是我不认为这是解决您的问题的方法。
你似乎认为,你的性能问题的源头完全是来自mysql服务器的负载 – 而提出的解决scheme将更有效地处理HTTP负载,似乎对mysql问题什么也不做。 你确定数据库pipe理系统是不是在备份的时候出现问题的原因吗?
我不同意Farseeker – 为了得到一个一致的备份mysql复制是非常简单的设置(简单的主从复制)。 没有利用潜在的负载均衡能力看起来是浪费 – 但是与备份需求相结合,这会使configuration相当复杂。
您应该能够在该机器上运行备份而不locking数据库。
? 哇。 怎么样? 我使用的每个DBMS都可能在备份过程中locking – 包括Oracle和Sybase。 当然,在MySQL中更新的c-isam引擎的locking要less得多,但它仍然存在。
你提到了一个Web应用程序的大量写入,你确定它的65:35? 如果你的MySQL负载很高,那么你的问题就不能通过扩展服务器的数量来解决,因为你不能通过一个简单的方式来分配数据库写操作,而不需要对代码进行大量的修改。
你有几个select:
根据其他答案的build议优化您的数据库。 这意味着,确保所有数据正确索引。
将结果caching在networking服务器上。 对此有不同的策略,最简单的方法是将生成的HTML写入一个您刚才读取并输出的文件(如果caching未失效)。 将PHP对象序列化为文件是另一回事。 阅读不同的caching技术为您的平台(我猜PHP的?)
使用其他备份解决scheme 如果只使用MyISAM表,请查看mysqlhotcopy。 这通常是MyISAM表,由于在备份上完成表锁,所以给你带来麻烦。
从一个从属数据库的备份,驻留在另一台机器,但你的提供商告诉你,他们不能这样做? 似乎对我无能为力。