我运行了两个完全独立的网站。 我正在将他们的MySQL数据库移动到Amazon RDS。
我不打算做多A / Z部署 – 让我们从这个问题中删除该variables。
我不确定是使用两个数据库创build单个RDS实例,还是使用单个数据库创build两个Amazon RDS实例。 忽略这个问题的成本。 我不会达到1 TB的数据限制,所以让我们忽略这一点。 但是,其中一个网站崩溃不会影响另一个网站是非常重要的。
基于这个文档 – http://docs.amazonwebservices.com/AmazonRDS/latest/UserGuide/Concepts.DBInstance.html
我假设,如果我写一个可怕的代码,在给定的RDS实例中的一个数据库崩溃,它可能会把整个RDS实例(并因此不经意地影响其他数据库)。 那是对的吗?
为了回应这个评论,我们绝对有趣的是两个RDS实例,每个都有自己的数据库。 我只是想确保这样做实际上有一个好处 – 我假设好处是这些数据库在不同的实例上时不会相互影响。 我认为即使在同一个例子中,也有一个镜头不能互相影响,但听起来并非如此。
– EDIT Hop3less – 感谢您的答案 – 但是,当我说一个单一的数据库的两个RDS实例,我的意思是每个有一个单一的数据库。 只是想确保你意识到我不是指两个EC2实例。 我认为单个RDS实例仍然是单点故障?
我同意@ HopelessN00b的build议,为了让你的每个站点完全独立,你应该运行每个数据库在它自己的实例。 然而,即使这不是一个完全独立的设置,但在云中使用数据库可以最大限度地减less某些风险。 由于您关心的是数据库的高可用性,而您计划将它们转移到RDS,因此我build议您考虑使用Xeround的云数据库选项作为RDS的替代选项。 如果我理解得当,Xeround提供了一个分布在多个服务器上的数据库,并且具有复制function,两者都是可以处理故障转移的function(以下是关于分布式系统和复制的一些wiki信息:)
对,如果你有一个数据库有两个实例,那么你的单点故障就是单个数据库 – 任何影响数据库的东西(比如太多的负载,或者意外删除它,或者你有什么)都会影响到使用它的网站。
如果一个实例包含两个数据库,那么单点故障就是实例,而影响实例的任何事情(例如运行你的操作系统的磁盘空间不足)将影响到两个使用的站点它。
唯一允许你的站点彼此独立的设置是使用自己的数据库在每个站点上运行每个站点。 (即使这不是“完全”独立的,就像你可以控制的完全独立的一样 – 如果硬件或基础设施发生了这两个实例共享的事情,它们都会受到影响。)
CPU和内存将是单点争夺,不必介意每个应用程序的IOconfiguration文件。 如果一个应用程序突然变得比另一个应用程序更受欢迎,那么缓冲池的LRUalgorithm将从一个应用程序中调出行和索引数据,转而使用另一个应用程序,导致分页应用程序的性能下降,因为其读取操作必须到磁盘。
mysql> SHOW ENGINE INNODB STATUS;
将为您的应用程序提供缓冲池指标以监视是否发生此类争用。 ( http://dev.mysql.com/doc/refman/5.5/en/innodb-buffer-pool.html )
从灾难恢复的angular度来看,任何快照或PITR恢复都会导致这两个应用程序closures并强制两个应用程序的回滚。 使用单独的实例,您不具有该依赖关系。