3

我在 EBS 卷上设置了一个带有 MySQL 的 EC2 实例,并设置了另一个充当复制从属的实例。复制设置很好。我的问题是关于拍摄这些卷的快照。我注意到需要为快照过程锁定表,这可能会给用户带来不便。所以,我的想法是不理会主实例,并拍摄充当从属实例的快照。这是一个好主意吗?有没有人有类似的设置并且可以以正确的方式指导我?

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

提前致谢。

4

2 回答 2

6

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

也就是说,还有一些您没有提到的其他注意事项:

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

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

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

正如您建议的那样,我通过在从属设备而不是主设备上执行频繁、一致的快照来解决第二个问题。我仍然建议对主节点执行偶尔的快照,以提高其固有的持久性(深度 EBS 属性),但这些快照不需要在锁定或冻结的情况下执行,因为您不会将它们用于备份。

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

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

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

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

于 2012-01-03T01:39:58.523 回答
1

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

根据您的描述,从属设备似乎没有被操作使用。

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

  1. 停止从服务器上的 mysql 服务器
  2. 启动快照(通过 AWS 控制台或命令行)
  3. 快照完成后,重启从服务器上的mysqld
于 2012-11-20T00:37:54.243 回答