我在EC2实例上使用RabbitMQ并且我在EBS卷上有Mnesia表,因此当我对其进行快照并尝试使用相同的数据启动另一个实例时,似乎该表正由另一个RabbitMQ使用实例
唯一能解决这个问题的方法是关闭RabbitMQ关闭刷新/快照,然后在完成后重新启动它吗?
有没有办法清理文件,使它们不会被锁定或被强行解锁?
这不是我将面临的常见问题,只是好奇是否有更好的解决方案。
澄清一下,我看到的错误是:timeout_waiting_for_tables
。
答案 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中的强制快照目标。