Consider a cluster with A and B nodes,I want a solution which meet these requirements:
1) When node A goes down the system continue working properly with node B till node A comes up again
2) Preventing extra network hop when master node is on Node A and client was connected to Node B, so when client publish a message, RAbbitmq route it to Node A i want to pervent this extra network hop
I should write my balancer or any framework (like HA Proxy) exist that can do these requirements?
Your question was recently discussed on the rabbitmq-users mailing list: link.
I recommend reading it.
For question #2, don't worry about the extra hop unless you have proof it causes an issue for you.
NOTE: the RabbitMQ team monitors the rabbitmq-users mailing list and only sometimes answers questions on StackOverflow.
Related
The docs say:
Assuming all cluster members are available, a client can connect to
any node and perform any operation. Nodes will route operations to the
queue master node transparently to clients.
What does this "route" mean exactly? Does the node I connected to redirect all the traffic to another node? It means that network utilization is doubled, doesn't it?
Should I try to connect to the master node of the queue when I'm only going to make operation on this single queue only?
The question is, can I save some resources by connecting to the home
node?
Yes you can, but it is a premature optimization that is probably not worth the effort. You can only verify this via running benchmarks.
You will probably spend more time developing code to ensure your application connects to the master node, setting up your benchmark environment and running them than you would save by this optimization.
NOTE: the RabbitMQ team monitors the rabbitmq-users mailing list and only sometimes answers questions on StackOverflow.
I was testing RabbitMQ using a script, I added 500,000 bindings to different routing keys on an exchange. Only when I try to enter the rabbit's UI - the exchange page, the page fails to load and the rabbit server crashes.
Is this a known issue? Is it a memory problem?
Is this a known issue? Is it a memory problem?
The answers are "No" and "Maybe".
You haven't given basic information like RabbitMQ, Erlang and operating system version. I'm assuming you have a script to add that many bindings. If you'd like to share the required information on the mailing list the team may be able to help out.
NOTE: the RabbitMQ team monitors the rabbitmq-users mailing list and only sometimes answers questions on StackOverflow.
I can configure the RabbitMQ client connection in two ways:
comma-separated list of IP addresses
host name that is DNS A record with multiple IP addresses
Will RabbitMQ Client connect to another node when the one with which is connected will fail?
Will do it in both cases?
Yes, it should work as described. Give it a try yourself! I suggest using toxiproxy to interrupt a connection and force a reconnect to another node.
NOTE: the RabbitMQ team monitors the rabbitmq-users mailing list and only sometimes answers questions on StackOverflow.
I am planning to upgrade 3 node rabbitmq cluster. But I need to perform the upgrade without a downtime also I don't want to miss any messages in the queue. Can you please give me suggestions on how this can be achieved.
Version to be upgraded: 3.6.3 --> 3.7.5
Regards,
Rahul N.
The RabbitMQ team monitors the rabbitmq-users mailing list and only sometimes answers questions on StackOverflow.
A simple google search brings up these links, which demonstrate how to upgrade without downtime:
https://www.rabbitmq.com/upgrade.html
https://www.rabbitmq.com/blue-green-upgrade.html
As discussed in rabbitmq-users group, we need to federate queues in the Vhosts individually.
We need to federate the vhosts and then shift the traffic for consumers to new green cluster. Once consumers start consuming the messages from green cluster, we can shift the producers to green cluster.
I am wanting to setup RabbitMQ as a two (or more) node cluster with HA.
Use case: a client producer app (C#.NET) knows that the cluster has two nodes and publishes to the cluster. Various consumer apps (also C#.NET) connect to the cluster and get all messages generated by the producer. So long as at least one node is up and running the producer and consumers will all continue to work without error. Supposing nodes A and B are running and B dies for a while, then gets restarted, then a while later A dies, the clients all continue to function without receiving an error since at all times at least one node is up.
Can it be made to work like this out of the box?
Are there any other MQs that would be more appropriate (commercial ok) for a Windows/.NET application environment?
RabbitMQ v2.6.0 now supports high-availability queues using active/active clustering. Microsoft and a number of other companies have collaborated on Apache QPid which has C# bindings and which also supports active/active HA clustering.
Can it be made to work like this out of the box?
No. When a node goes down, all of its connections are closed. Since AMQP connections are stateful, there's no way around this. What you could achieve is 1) broker goes down, 2) all clients disconnect, 3) clients connect to other node (masquerading as original) and are none the wiser.
On a side note, rabbit does not support active-active HA clustering at the moment. It does support active-passive clustering and a form of logical clustering (which might be what you're looking for).