Hey,

Yes, you are correct, when defining multiple RabbitMQ servers (which is normal for clustered setup), it's a client who picks the backend. And the client does that in a pretty much random manner. So I'm not sure if you can do anything from this perspective.

Moreover, in OpenStack-Ansible by default we enable HA queues [1] (which we finally should stop doing and switch fully to quorum queues, but as of Ussuri there's no such choice). This means that a huge amount of data coming to 1 rabbitmq server will be mirrored to others (except fanout and reply queues). So if you want to reduce load on your RabbitMQ cluster, you might want to consider disabling that. However, it might lead to other nasty consequences in case of controller outages...

Another thing is that you can have different RabbitMQ clusters for each service [2], or specifically for nova - consider using multiple cells.


[1] https://opendev.org/openstack/openstack-ansible/src/tag/ussuri-eol/inventory/group_vars/all/infra.yml#L27-L31
[2] https://superuser.openinfra.dev/articles/scaling-openstack-ansible-deployment-rabbitmq-and-mariadb-option-one/

пн, 12 февр. 2024 г. в 22:09, keshav bareja <keshav.bareja@gmail.com>:
Hi Team

We have 3 node/container cluster of rabbitmq .
and need to balance connection requests equally coming to them from different openstack services ie nova, cinder, neutron etc. considering nova here.

In nova.conf  we have a parameter transport_url having the connection details for all 3 rabbitmq separated by comma.

As per documentation I can see that client nova can choose any of them for active connection and switch to other in case first one fails.



You may include multiple different network locations separated by commas. The client will connect to any of the available locations and will automatically fail over to another should the connection fail.


So in this case , is there any way to balance the connection requests equally among the three rabbitmq containers.

Regards
Keshav

Sent from my iPhone