Cloud Native Applications

Running VMware Tanzu RabbitMQ on VMware Tanzu Kubernetes Grid

Whether you’re integrating multiple microservices or building a new streaming app, you’ll need a modern messaging and streaming service. RabbitMQ is one of the most popular open-source messaging and streaming brokers. Beloved by large enterprises and individual developers alike, RabbitMQ is lightweight and easy to deploy on premises and in the cloud, making it a perfect choice for a multi-cloud architecture. Tanzu RabbitMQ is an enhanced distribution of the open-source RabbitMQ. It is specifically designed for enterprise use in both development and production environments and adds additional functionality. It works seamlessly with Tanzu Editions and runs on any certified Kubernetes runtime.

What is Tanzu RabbitMQ?

Tanzu RabbitMQ is a fast and dependable messaging and streaming system that supports a wide range of use cases, including reliable integration, content-based routing, global data delivery, high-volume monitoring and data ingestion. With Tanzu RabbitMQ for Kubernetes, developers can provision both the Tanzu RabbitMQ and the open-source RabbitMQ message brokers with simple commands on top of any Kubernetes cluster. The Operator works automatically with the Kubernetes runtime to maintain the desired cluster state.

With Tanzu RabbitMQ, developers can simplify connections between applications, deploy more scalable systems, and ship faster. At the same time, platform operators get a simplified provisioning and management experience without getting bogged down in tedious configuration and deployment details.

Why Run Tanzu RabbitMQ on Tanzu Kubernetes Grid?

  • Self-service consumption, simplify deployments with messaging as code: Leverage simple and fast deployment to Kubernetes and eliminate DevOps maintenance. Developers can innovate and build with the agility of Kubernetes and IT administrators can manage workloads in their familiar vSphere environment.
  • Fast time to recovery: Leverage built-in Warm Standby Replication capability to create multi-site replicated deployment and Velero to back up and restore the Tanzu Kubernetes cluster for quick recovery. Build a developer-ready infrastructure with enterprise-grade Kubernetes with advanced reliability and security. 
  • Full observability: Expose metrics to Prometheus, and annotate them for discovery by observability software ingesting Prometheus sources; thus, users can access the Kubernetes ecosystem for logging, monitoring and tracing
  • Business continuity and resiliency: Provide automated, specific upgrades between Tanzu RabbitMQ versions without the need to bring down the clusters and increase resiliency with delivery guarantees, replicated messages and highly available options.

How to Deploy Tanzu RabbitMQ on TKG?

In our solution, we deployed the Tanzu RabbitMQ test environment using Tanzu Kubernetes Grid on a 4-node VxRail P570F cluster. Firstly, we deploy the TKG management cluster with Tanzu CLI by either an installer UI or a configuration file. Refer to Prepare to deploy Management clusters to vSphere for more details. After you deploy a management cluster to vSphere, use the Tanzu CLI to deploy the TKG workload cluster. The Tanzu Kubernetes cluster is deployed through a configuration file with customized variables for cluster settings and scalability. Refer to Deploy Tanzu Kubernetes Clusters to vSphere for more details. To support RabbitMQ deployment, we recommend configuring a TKG workload cluster with at least 3 nodes; each node is requested with a minimum value of 12 vCPU, 30GB memory, and 1TB disk space.

Tanzu RabbitMQ

Once the deployment is successful, you can connect to the TKG by using the kubectl command and start deploying the workloads.

Tanzu RabbitMQ for Kubernetes offers a set of Kubernetes Operators/APIs, as well as the Tanzu RabbitMQ OCI (container image). It can provide an easy, automated way to deploy and manage RabbitMQ brokers for a reliable event and message distribution. And it allows specific RabbitMQ configuration options and commands to be managed via the Kubernetes API.

Tanzu RabbitMQ Deployment

Tanzu RabbitMQ Capabilities

Backup and Restore Tanzu RabbitMQ Deployments on TKG

Users can back up and restore Tanzu RabbitMQ deployment on TKG via the Velero plugin for vSphere. This plugin provides snapshots of vSphere volumes and a backup of volume data into S3 compatible storage.

  • Deploy S3 compatible object storage to act as a backup destination
  • Install Velero server and backup driver to provide the ability to back up and restore objects in TKG
  • Add Velero plugin for vSphere

Now we can back up the RabbitMQ deployment using the Velero client. It will trigger a snapshot operation for each volume used by the RMQ cluster and uploaded to the object storage. We can also restore the previous backup taken of RabbitMQ deployment.

Tanzu RabbitMQ Observability

For production systems, it is critical to enable RabbitMQ cluster monitoring. RabbitMQ is observable out of the box, utilizing the most widely adopted open metrics and alert capabilities. You can set up proactive alerts so that if your RabbitMQ deployment has a problem, you get the information you need to troubleshoot and resolve. Install Prometheus and Grafana via Prometheus operator that provides Kubernetes native deployment and management of Prometheus and related monitoring components. The Prometheus operator provides a prebuilt set of Grafana dashboards.

Tanzu RabbitMQ Observability

Tanzu RabbitMQ Schema Sync Plugin (Active/Standby)

Tanzu RabbitMQ for Kubernetes provides a schema synchronization plugin that automatically replicates queues/exchanges created on the active site to one or more standby sites. To improve the availability and disaster recovery capabilities of a system running in your data center, you can implement an active/standby topology across two data centers. The schema plugin provides promotion mechanisms that can be triggered after a failure event to allow for easy failover.

Performance

For RabbitMQ, there are some great how-to resources about maximizing performance, such as how to benchmark and size your cluster. You should clarify the requirement of your application; each configuration decision makes a trade-off between performance and resiliency.

It is recommended that a production deployment of RabbitMQ has 4 CPU and 8GB of per node. You can scale this up and down depending on load. (RabbitMQ Benchmarker, a free tool provided by the RabbitMQ team, makes it easy to deploy and test different configurations and loads on K8s.) With the recommended production defaults, it’s trivial to achieve 1.5B daily messages, or 17,885 messages per second (3 Quorum Queue Replicas with 8kB message size.) With smaller message sizes and higher node specifications, RabbitMQ can achieve over 100,000 messages a second.

Conclusion

In this solution, we deployed Tanzu RabbitMQ clusters on Tanzu Kubernetes Grid that provides the simplified operation of servicing cloud native workloads and can scale without compromise. Running Tanzu RabbitMQ on Tanzu Kubernetes Grid provides self-service deployment with automated operations, full observability, and fast time to recovery; thus, the solution increases your business continuity and security in any environment.  See the Running VMware Tanzu RabbitMQ on VMware Tanzu Kubernetes Grid RA for more information.