适用于MySQL的Amazon RDS与在Amazon EC2实例上安装MySQL


31

在工作中,我们将所有Web服务器托管在Amazon EC2上,通常使用与Apache Web服务器安装在同一盒子上的MySQL数据库,并通过进行通信localhost。现在,我们需要将数据库迁移到我们系统之一的自己的服务器上。我可以选择两种解决方案:使用Amazon RDS,或仅启动一个新的Amazon EC2盒并在其上安装MySQL。

作为与EC2相同的公司提供的专用数据库服务,RDS似乎应该是显然更好的选择。但是,当我查看这两个选项的价格时(请参见http://aws.amazon.com/ec2/pricinghttp://aws.amazon.com/rds/pricing),似乎RDS服务器的成本几乎是对于具有相同规格的设备,其容量是EC2服务器的两倍。

鉴于我自己能够处理备份,并且EC2提供了与RDS相同的按比例扩展实例的能力,因此我完全看不出有任何理由使用RDS代替EC2。但是,似乎我可能遗漏了一些大的东西,因为如果我做对了,没有人会使用RDS。我究竟缺少什么?与在EC2实例上安装自己的数据库相比,RDS有什么优势?


值得注意的是,自从我问了这个问题以来,EC2和RDS之间的价格比率已经发生了很大变化。EC2上的实例正常运行时间仍然比较便宜,但超过RDS价格的三分之二;从EC2迁移到RDS(反之亦然)不再意味着将服务器费用增加一倍(或减半)。(当然,根据您的情况,这可能仍然值得关注。)
Mark Amery

Answers:


20

一般而言,我是AWS的忠实拥护者,但RDS却不多。

@RolandoMySQLDBA指出了反对它的一些不错的观点。

与EC2上的MySQL相比,我在RDS中看到的唯一优势是能够执行指向和单击快照,克隆和时间点恢复,但是这些不足以弥补失去控制和灵活性的不足,它们最肯定的是不能证明价格较高。RDS在某些方面很诱人,但您最终不能相信自己最终无法解决的问题,因为您无法了解所有活动的部分。

我不喜欢没有SUPER特权。我不喜欢无法跟踪错误日志。我不喜欢无法在数据库服务器上运行“ top”或“ iostat”来查看核心和驱动器如何承受负载。我不喜欢没有访问联邦存储引擎的权限。我不喜欢购买热备用(多可用区)备份主计算机,而我什至无法利用它作为只读副本。当然,对于要成功地将MySQL成功打包并作为RDBMS-in-a-box进行销售的MySQL,必须有所有这些限制的完全合理的解释。唯一的事情是,RDBMS-in-a-box可以“解决” 我所没有的一系列问题 ……并以我的方式陷入困境,从而导致新的问题。

但是,对我而言,使用RDS的绝对优势在于完全缺乏对二进制日志和复制的访问权限。Binlog,尤其是基于行的Binlog是用于小型灾难的出色恢复工具,但是如果您无法访问它们,则对您没有帮助。是否要在办公室中配置本地服务器作为RDS中生产数据库的只读副本?如果驻留在RDS中的数据发生不可思议的事情,则可以从本地备份中获取报表,并进行报告以备灾难恢复?这是一个显而易见而又辉煌的想法。

糟糕,抱歉,无法直接访问复制。当然,您可以支付只读副本的费用……但只能作为其他RDS实例的费用。这不是我书中的价值主张。

更新:MySQL 5.6的RDS中的一项重大更改

与许多原因相比,我仍然更喜欢运行自己的服务器(甚至在EC2中),而不是运行RDS,其中包括缺乏对用户定义功能的支持,无法使用联合存储引擎以及无法拥有一个服务器。额外的连接可用于紧急访问...但是...

亚马逊在RDS的MySQL 5.6中进行了重大更改,消除了我的主要反对意见之一-也许是我最大的反对意见:二进制日志现在可以访问了,您可以将非RDS实例作为从属实例运行,或者将其他实用程序连接到读取binlog流的服务器。

http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MySQL.Procedural.Exporting.NonRDSRepl.html

正式而言,文档表明它们正在公开此信息,以便您可以进行实时迁移而设置从属服务器-您可以使用同步来自现有RDS实例的国外将来的主服务器mysqldump,然后将其作为从属服务器连接到RDS。以便通过复制流获得实时更新,直到您的应用程序迁移到新的主服务器上-但在非正式情况下,只要您不希望它们支持您,就可以持续进行此操作...对我来说,似乎很合理。

最近一次网络研讨会上在大约56:45开始的对话中证实这一点:

“您可以将其无限期地保持在复制状态...

“ ...只要您负责维护复制...”

“如果您要这样做,我们不会阻止您进行正在进行的复制。”

这项新功能足以让我毫不犹豫地拒绝在我们面向公众的网站支持的MySQL实例中使用RDS,在这些实例中我们根本不使用FEDERATED或根本不使用其他任何东西。

所以我仍然不赞成它,但是我不再反对它了,因为拥有二进制日志的实时流最终使我最终回到实时控制数据的状态,并承担确保没有事务发生的责任。在灾难性的停机中迷失了自己,因为我(作为DBA)重新控制了-这正是我想要的。如果第三方供应商指责对方或对其提起诉讼,或者其他任何事情,如果丢失的数据消失在黑匣子内的黑洞中,则该数据不会找回。

管理层似乎喜欢RDS的“想法”,并且不反对成本差异,因此我们现在启动所有带有RDS的新网站。

我承认,即时点和单击时间点恢复是RDS中的一项不错的功能……它不会改变或破坏您的现有计算机,而是使用以前的备份来启动一个全新的实例。在最接近所选时间点的时间,然后应用必要的binlog将新机器带入您指定的时间点。

与此相关,但是在另一个方向上,现在也可以使用类似的策略将实时MySQL数据库迁移到RDS中……您可以连接RDS主服务器(大概,这通常是新部署的)实例)作为现有系统的从属,以便RDS实例在迁移到该实例时具有实时数据版本。与仅用于5.6的对RDS二进制日志进行向外复制的访问不同,RDS从5.5.33和5.6.13开始支持向内复制


我可以知道您如何使用联合存储引擎吗?
巴拉特·哈特里

11

如果扩展DB Server 并非您的最佳选择,那么可以使用Amazon RDS,因为它附带了所有的功能。那些只需要适度的HA,备份和向外扩展的用户将受益匪浅。

另一方面,如果您想扩大硬件规模,那么RDS就是不可能的。如果您想扩大MySQL的功能怎么办?不幸的是,对于许多方面来说,这是不可能的。

例如,您是否知道在所有七个(7)RDS服务器模型中都有两个字段的上限?

请注意以下关于这两个选项的图表:

MODEL      max_connections innodb_buffer_pool_size
---------  --------------- -----------------------
t1.micro   34                326107136 (  311M)
m1-small   125              1179648000 ( 1125M,  1.097G)
m1-large   623              5882511360 ( 5610M,  5.479G)
m1-xlarge  1263            11922309120 (11370M, 11.103G)
m2-xlarge  1441            13605273600 (12975M, 12.671G)
m2-2xlarge 2900            27367833600 (26100M, 25.488G)
m2-4xlarge 5816            54892953600 (52350M, 51.123G)

您没有SUPER特权,也无法直接访问my.cnf。鉴于此,为了更改my.cnf启动选项,必须首先创建基于MySQL的DB参数选项列表,然后使用RDS CLI (Command Line Interface)来更改所需的选项。然后,您必须执行此操作以导入新选项:

  • 创建一个自定义数据库参数组(称为MySettings
  • 下载RDS CLI并使用您的AWS凭证设置一个配置文件
  • 执行以下命令: ./rds-modify-db-parameter-group MySettings --parameters "name=whateveroption,value=whatevervalue,method=immediate"
  • 使用数据库参数选项列表进行修改 MySettings
  • 重新启动MySQL RDS实例

使用API​​更新单个变量并强制重启RDS实例以实现更改吗?要选择任何一个选项,这都是一个痛苦的过程。

如果要扩展MySQL,请使用EC2。然后,您可以my.cnf像往常一样习惯了,按自己的喜好度过。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.