3

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

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

有没有办法清理文件,使它们看起来不被锁定或被强制解锁?

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

为了澄清,我看到的错误是:timeout_waiting_for_tables.

4

1 回答 1

3

您首先要关注文件系统。不确定您使用的是 LVM、ext3、xfs 还是什么,但如果您使用的是 LVM,您可能需要查看dmsetup 手册页;特别是dmsetup 暂停/恢复

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

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

一旦你让文件系统同步/挂起,就有 rabbitmq 需要担心。Rabbitmq 开发人员 Matthias Radestock 在电子邮件线程中指出:

但是对于持久性消息,我不太确定。rabbit_persister.LOG 是如何管理的?我是否可以随时对其进行备份,或者我可以只使用 rabbit_persister.LOG.previous 中的一个?

我会备份这两个文件。即使该备份是在追加过程中进行的,也应该可以从备份中恢复 rabbit_persister.LOG - 不过我还没有测试过。如果在滚动日志时发生备份,则需要 .previous 日志。

我在哪里可以查看它的滚动频率?

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

我可以触发手动滚动吗?

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

签出Rabbitmq Makefile中的force-snapshot目标。

于 2009-11-13T22:52:28.060 回答