如何在运行RabbitMQ实例的情况下正确快照EBS卷?

时间:2009-09-07 21:35:59

标签: amazon-ec2 rabbitmq mnesia

我在EC2实例上使用RabbitMQ并且我在EBS卷上有Mnesia表,因此当我对其进行快照并尝试使用相同的数据启动另一个实例时,似乎该表正由另一个RabbitMQ使用实例

唯一能解决这个问题的方法是关闭RabbitMQ关闭刷新/快照,然后在完成后重新启动它吗?

有没有办法清理文件,使它们不会被锁定或被强行解锁?

这不是我将面临的常见问题,只是好奇是否有更好的解决方案。

澄清一下,我看到的错误是:timeout_waiting_for_tables

1 个答案:

答案 0 :(得分:3)

您首先要关注文件系统。不确定你是使用LVM,ext3,xfs还是什么,但如果你在LVM上,你可能想要查看dmsetup man page;特别是 dmsetup暂停/恢复

你最终会得到类似的东西:

dmsetup suspend <dev> 
ec2-create-snapshot <vol> 
dmsetup resume <dev> 

一旦你有文件系统同步/暂停,就会有担心的兔子问题。 Rabbitmq开发人员Matthias Radestock在email thread中说:

  
    

但对于持久的信息,我不太确定。怎么样?     rabbit_persister.LOG管理?我可以把它的备份副本     无论何时,或者我只能选择一个rabbit_persister.LOG.previous?

  
     

我会备份这两个文件。 应该是   有可能恢复   来自备份的rabbit_persister.LOG   即使进行了备份   追加的中间 - 我没有   尽管如此。 .previous日志   如果备份需要,则需要   日志正在滚动时放置。

     
    

我想在哪里找出它滚动的频率?

  
     

决定何时滚动的逻辑   日志相当复杂。

     
    

我可以触发手动滚动吗?

  
     

rabbit__persister:force_snapshot()in   Erlang shell可以解决问题。

查看Rabbitmq Makefile中的强制快照目标。