用于复制的EBS卷的快照

时间:2012-01-02 20:09:38

标签: mysql amazon-ec2 replication master-slave

我在EBS卷上设置了一个带有MySQL的EC2实例,并设置了另一个充当Slave for Replication的实例。复制设置很好。我的问题是拍摄这些卷的快照。我注意到需要为快照过程锁定表,这可能会给用户带来不便。因此,我的想法是单独保留Master实例并拍摄作为slave的实例的快照。这是一个好主意吗?是否有人有类似的设置,可以正确的方式指导我?

此外,拍摄从属实例的快照需要锁定表格。这是否意味着复制会破裂?

提前致谢。

2 个答案:

答案 0 :(得分:5)

虽然在启动快照时锁定数据库并冻结文件系统是个好主意,但启动快照的实际API调用只需几分之一秒,因此您的数据库和文件系统不会被锁定/冻结很久。

尽管如此,还有一些其他考虑因素没有提及:

  1. 当您尝试在数据库上创建锁时,可能需要在授予锁之前等待其他语句完成。在此期间,您的挂起锁定可能会进一步声明,直到您获得并释放锁定。这可能会导致生产数据库中语句流中断。

  2. 在您开始创建快照之后,您的应用程序/数据库可以自由地使用卷上的文件系统,但是如果您有大量写入,您可能会遇到高iowait,有时足以创建应用程序明显减慢。原因是后台快照进程需要先将块复制到S3,然后才允许在活动卷上写入该块。

  3. 我通过请求锁定来解决第一个问题,如果没有快速授予,则超时。然后我等一下,继续重试,直到我拿到锁。对于不同的数据库负载,适当的超时和重试延迟可能会有所不同。

    我通过在奴隶而不是主人身上执行频繁,一致的快照来解决第二个问题,就像你提出的那样。我仍然建议只是为了提高其固有的持久性(深度EBS属性)而对主服务器执行偶尔的快照,但是这些快照不需要使用锁定或冻结来执行,因为您不打算将它们用于备份。

    我还建议使用支持刷新和冻结(XFS)的文件系统。否则,您正在快照MySQL中的锁定表,这些表可能尚未在EBS卷上拥有所有块,或者文件系统的其他部分可能在快照中被修改和不一致。

    如果您感兴趣,我已经发布了开源软件,该软件执行我收集的与使用MySQL和XFS创建一致EBS快照相关的最佳实践(两者都是可选的)。

      

    http://alestic.com/2009/09/ec2-consistent-snapshot

    要回答上一个问题,锁定主表中的表不会破坏复制。在我的快照软件中,我还使用读锁刷新表,以确保所有内容都在正在快照的磁盘上,并添加关键字“LOCAL”,以便刷新不会复制到任何潜在的从属。

答案 1 :(得分:0)

你绝对可以拍摄奴隶的快照。

根据您的描述,似乎并非在操作上使用奴隶。

如果是这种情况,那么获得可靠卷快照的最安全方法是:

  1. 停止奴隶上的mysql服务器
  2. 启动快照(通过AWS控制台或命令行)
  3. 快照完成后,重启从服务器上的mysqld