<HTML>
<HEAD>
<TITLE>Cluster Disk Node vs Ram Node explanation</TITLE>
</HEAD>
<BODY>
<FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'>I know this has probably been discussed at length in this list and elsewhere.<BR>
<BR>
Reference:<BR>
<a href="http://groups.google.com/group/rabbitmq-discuss/msg/baa8f8b30ba423e0">http://groups.google.com/group/rabbitmq-discuss/msg/baa8f8b30ba423e0</a><BR>
<BR>
I just want to clarify:<BR>
<BR>
GIVEN:<BR>
</SPAN></FONT><UL><LI><FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'>A load balanced cluster consisting of disk node A, ram node B, and ram node C<BR>
</SPAN></FONT></UL><FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'><BR>
WHEN:<BR>
</SPAN></FONT><UL><LI><FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'>A client is routed to ram node B via the load balancer,
</SPAN></FONT><LI><FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'>AND the client declares a <B>durable</B> <B>queue </B>on its connection to ram node B,
</SPAN></FONT><LI><FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'>AND the client declares bindings to a topic exchange being serviced by a producer connected on ram node C;<BR>
</SPAN></FONT></UL><FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'><BR>
WHERE are the messages stored?<BR>
WHAT happens to the producer on ram node C when ram node B fails? (Does it block? Do messages continue to be delivered? Are messages to the client lost?)<BR>
<BR>
POSSIBLE ANSWERS:<BR>
<BR>
A) Messages are stored on disk node A but served up through ram node B.<BR>
If ram node B goes down, messages are preserved and when the client reconnects on any node, the messages can be retrieved. Since the messages are stored on disk node A, the producer connected on ram node C continues to publish messages to its topic exchange without blocking.<BR>
<BR>
B) They are stored on disk for ram node B. If ram node B goes down, the queue is unavailable for delivery, the producer on ram node C blocks on publishing of messages until ram node B comes back up again. (I’m assuming metadata of the network is shared by the cluster therefore ram node C, “knows” it has bindings to a durable queue on node B, which is unresponsive, so it blocks).<BR>
<BR>
C) They are not stored on disk for ram node B (unless under memory pressure). Any messages in memory are lost. C does not block on publishing of messages, but continues to publish messages to topic exchange. Bindings are non-existent until ram node B comes back up again, or the client reconnects/redeclares durable queue on another node for servicing.<BR>
<BR>
D) Something else?<BR>
<BR>
My inclination is to say A) is the right answer above. <BR>
<BR>
However, I just finished a soak test where my durable queue on ram node B lost messages over the weekend due to a network hiccup that crashed ram node B. When it came back up again messages were lost. As such, we are recommending our production configuration to be unclustered, disk node only until we better understand the benefits and use cases associated with clustering with RabbitMQ 2.5.1<BR>
<BR>
A simple tutorial or explanation of “To Disk Node or To Ram Node... that is the question” would be great and useful for those of us implementing, learning and teaching rabbit to our organizations.<BR>
<BR>
Regards,<BR>
--rparra<BR>
<BR>
</SPAN></FONT>
</BODY>
</HTML>