Replies: 4 comments 4 replies
-
The scheduler bind type is set to
I believe this operator uses k8s anti-affinity in order to prevent RabbitMQ pods from running on the same physical host. @mkuratczyk and @Zerpet should be able to provide more information about that.
This would be the appropriate place to open a pull request to mention that setting. |
Beta Was this translation helpful? Give feedback.
-
@mkuratczyk if one RabbitMQ node on a single Kubernetes node, will it be a waste of the resource?do you deploy any other pods on this kubernetes? |
Beta Was this translation helpful? Give feedback.
-
I believe that using However, in containerized environments, this approach might not be as appropriate. In containerization, even in production settings, each machine typically runs multiple pods. It's unlikely that an entire machine would be allocated to a single RabbitMQ replica. Moreover, containerization often aligns with microservices architectural design, where business data is largely isolated. For data security and isolation, it's improbable to use a single RabbitMQ cluster for everything. Therefore, multiple RabbitMQ clusters need to be deployed. Each RabbitMQ cluster can be configured with anti-affinity to ensure that replicas do not co-locate on the same machine. However, pods from different RabbitMQ clusters might still end up on the same server,for we don't want each RabbitMQ replica to occupy an entire machine, as this would be too wasteful of resources. In this scenario, if db is used as the default value, the pods from these two RabbitMQ clusters would interfere with each other. If they are configured with 8 cores and 8GB each, they would both always bind to the CPU cores from cpu0 to cpu7, not utilizing other available CPU cores. Besides, from erlang 23, it takes CPU quotas into account in containerized environments, which limited schedulers of every rabbitmq node in pod. Using |
Beta Was this translation helpful? Give feedback.
-
No too long ago we've had many examples of the opposite problem: RabbitMQ using "too many" cores on Kubernetes. RabbitMQ was called names such as "a resource hog", "a CPU killer" and so on. Give it 128 cores, it uses 128, someone is very unhappy. Give it 128 cores, it uses 8, someone is very unhappy. This can be added as a note to the runtime guide as well as one of the Kubernetes Operator guides. |
Beta Was this translation helpful? Give feedback.
-
Is your feature request related to a problem? Please describe.
We used 7 machines each with 128 cores and 320GB to set up a new production environment. In performing the RabbitMQ performance validation, we deployed a single replica of rabbitmqcluster with 8 cores and 8GB on one of the nodes. With 10 quorum queues and 30 producers, the incoming messages could reach 60-70K/s.
We then deployed another single replica of rabbitmqcluster with the same configuration on that node and stress-tested all instances together, but the incoming rate for the quorum queues remained at 60-70K/s.
After deploying 5 more single replicas of rabbitmqcluster and conducting a stress test on all instances together, the total production/consumption was only around 60-70K/s, showing no improvement.
Through multiple rounds of testing, we discovered that the CPU utilization of cores 0-7 was consistently >90%, while all other CPU cores remained <10%.
Describe the solution you'd like
We set erlang +stbt config to unbound and redo stress test, the load spread around all the cores, and the total production came to 270K/s,though the throughput was not very stable.
Config as below:
Additional context
In Kubernetes, it is quite common to deploy multiple RabbitMQ pods on the same node. If the default value of +stbt is kept as "db" (the actual value is 'tnnps'), it can significantly limit the overall performance of RabbitMQ.
Besides, the unbound config is not listed in rabbitmq doc, which i think shoud be added too.
Doc refer:
Beta Was this translation helpful? Give feedback.
All reactions