根据下列员额:
http://rabbitmq.1065348.n5.nabble.com/RabbitMQ-Backup-td18268.html
http://rabbitmq.1065348.n5.nabble.com/rabbitmq-server-Mnesia-backup-and-restore-td28598.html
通过执行以下步骤,可以备份并恢复持久排队消息:
要备份,我们必须:
1- (狂犬病)服务器:
# rabbitmqctl stop_app2- (Tar)文件夹"/var/lib/rabbitmq/mnesia/":# tar -cvf mnesia.tar /var/lib/rabbitmq/mnesia/3- 启动(狂犬病)服务器:# rabbitmqctl start_app
然后,要还原,我们必须:
1- (狂犬病)服务器:
# rabbitmqctl stop_app2- 复制(untar)文件夹"/var/lib/rabbitmq/mnesia/":# tar -xvf mnesia.tar -C /3- 启动(狂犬病)服务器:# rabbitmqctl start_app
,但当尝试将这些步骤应用于兔子or集群甚至单个节点时,无法恢复任何消息.。
还注意到:/var/lib/rabbitmq/mnesia/rabbit@rabbitmq-node1/msg_store_transient的内容似乎存储了排队的消息,总是在rabbitmq服务器重新启动后清除 (stop_app和start_app)。然后,在启动rabbitmq之后,尝试复制备份的tar,以避免清除/msg_store_transient文件夹,但这也没有帮助(IOW在web管理控制台中没有恢复消息的迹象)。
我们正在虚拟机上执行我们的测试:Ubuntu-14.04、Erlang-R16B03、RabbitMQ-3.4.1、以及java客户端创建的持久队列。
将感谢任何帮助或提示来正确恢复排队的消息,特别是在rabbitmq服务器故障之后。
发布于 2014-12-04 09:31:08
持之以恒
发布的消息应该被标记为持久化--通过提供一个值为2的delivery_mode属性。
在Java客户机中,我们可以将其设置如下:
AMQP.BasicProperties basicProperties = new AMQP.BasicProperties().builder().deliveryMode(2).build();
Channel channel = initializeChannel(...);
channel.basicPublish(exchange, rootinKey, basicProperties, message body in bytes);存储位置
已发布的消息存储在
/var/lib/rabbitmq/mnesia/rabbit@rabbitmq-node1/msg_store_persistent目录,而不是
/var/lib/rabbitmq/mnesia/rabbit@rabbitmq-node1/msg_store_transientmnesia/rabbit@rabbitmq-node1/msg_store_persistent**含量在重新启动后仍未被清除。
还曾表示,在重新启动单个节点或所有集群节点后,标记为持久性的所有消息都是可用的。
单节点配置的还原
还原备份的消息也在单个节点rabbitmq配置中正常工作,因为它只备份了/var/lib/rabbitmq/mnesia/rabbit@rabbitmq-node1 dir,该dir很好,足以用它的所有消息恢复队列,在使用rabbitmq管理器web控制台删除队列及其内容之后。
对群集配置和更改的节点名称进行还原
但是,在多个节点组成的集群中,在从所有群集节点删除队列后,无法恢复备份的消息。
作为解决办法,尝试将备份从集群还原到具有相同节点名称的单个节点rabbitmq服务器(在我的示例中,节点名为rabbit@rabbitmq-node1),并通过执行以下步骤成功完成:
\# /etc/init.d/rabbitmq-server restart这有助于我将特定队列的队列消息从集群恢复到单个节点rabbitmq服务器(IOW迁移)。
https://stackoverflow.com/questions/27108899
复制相似问题