NashTech Blog

Distributed and Clustered Load Testing with Gatling

Table of Contents
Distributed-Clustered-Load-Testing

Introduction

Imagine we’re preparing for a nationwide product launch. Our web application must handle tens of thousands of users simultaneously, from Delhi to Mumbai, across desktops and mobile devices. Trying to test that scale using just one local machine is like rehearsing an entire orchestra with only one instrument.

This is precisely why distributed and clustered load testing has become a vital approach in performance engineering.

This blog covers effective ways to perform distributed and clustered load testing using Gatling, a fast and lightweight tool.


What Is Distributed Load Testing?

A typical local test runs all virtual users from a single machine. This approach quickly reaches its limits when simulating tens of thousands of users. Distributed load testing solves this by spreading the test load across several machines, often referred to as injector nodes.

Why Choose Distributed Testing?

  • Avoid overloading a single system
  • Simulate traffic from multiple locations and networks
  • Scale load testing to support enterprise-level traffic

It’s like replacing a single garden hose with an entire irrigation system. Each injector acts as a separate nozzle, allowing us to cover more ground without overwhelming any single point.

What Is Clustered Load Testing?

Distributed testing spreads the load; clustered testing adds smart coordination with a central controller handling load balancing and real-time result aggregation.

When to Choose Clustered Testing:

Want better orchestration and failure handling

You need dynamic scaling

Require real-time metrics and unified dashboards

When to Use Clustered Testing

Clustered testing proves useful in scenarios where we need:

  • A centralised controller for all test runs
  • Dynamic scaling based on workload or test stage
  • Real-time aggregation of metrics from multiple injectors
  • Geographically distributed traffic with unified management

Think of it as the difference between a group of cyclists riding individually versus a coordinated peloton. The former share the goal, but the latter work together in sync, adjusting pace, position, and effort as one.

Why Gatling for Distributed & Clustered Testing?

Gatling is ideal for modern performance engineering:

  • Lightweight and non-blocking
  • Scalable for large tests
  • Flexible scripting with Scala
  • Seamless CI/CD integration

With Gatling FrontLine (enterprise), you get:

Jenkins/GitLab/GitHub integrations

Centralized dashboard

Multi-region test agent management

Setting Up Distributed Load Testing with Gatling (Open Source)

Step 1 – Prepare Injectors

Install Java and Gatling on all remote nodes (EC2s, VMs, or containers).

sudo apt update && sudo apt install openjdk-11-jdk -y
wget https://repo1.maven.org/maven2/io/gatling/highcharts/gatling-charts-highcharts-bundle/3.9.5/gatling-charts-highcharts-bundle-3.9.5-bundle.zip

After downloading, extract the files and add your test scripts to the user-files/simulations directory.

.

Step 2 – Share the Code Across Nodes

Now, we need to ensure all injector machines have the same codebase. Use tools like rsync or Git to sync the project folder:

rsync -avz gatling-project/ user@192.168.1.2:/home/user/gatling-project

This step avoids version mismatches or outdated scripts during the test run.

Step 3 – Run the Tests Remotely

Remotely initiate the test execution on each load injector using an SSH command:

ssh user@192.168.1.2 "cd /home/user/gatling-project && ./bin/gatling.sh -s simulations.AdvancedSimulation"

Repeat this on every machine participating in the test. Each injector will run the same scenario, collectively generating the desired load.

Advanced Techniques for Clustered Load Testing

When performance testing goes beyond just simulating traffic, coordination becomes key. Clustered load testing steps in when we need better control, smarter distribution, and live insights, especially for large-scale applications with users spread across regions.

Technique 1 – Using Gatling FrontLine (Enterprise)

Best for large teams, it provides:

  • Visual dashboards
  • Agent management
  • CI/CD pipeline hooks
  • Region-specific insights

Use Case: A fintech firm simulated 100,000 users across 5 AWS regions, spotting a regional bottleneck before launch.

Setup Overview:

Install the FrontLine Controller, register all agents, and use the web UI to deploy and monitor tests.

Note: FrontLine is a paid enterprise tool, best suited for mature performance testing setups.


Technique 2 – Docker-Based Gatling Grid

Use Docker Compose to quickly launch multiple Gatling injector containers.

Sample docker-compose.yml

version: '3'
services:
  injector1:
    image: gatlingio/gatling
    volumes:
      - ./simulations:/opt/gatling/user-files/simulations
  injector2:
    image: gatlingio/gatling
    volumes:
      - ./simulations:/opt/gatling/user-files/simulations

Running the Test:

Tests can be triggered via Jenkins or executed through custom shell commands.

docker-compose up

Or run them individually:

docker exec -it injector1 ./bin/gatling.sh -s simulations.AdvancedSimulation

Business Advantage:

This method suits teams using CI/CD pipelines and allows isolated test environments without affecting the main application servers.

Technique 3 – Akka-Based Gatling Cluster

If you need full control and custom logic, you can build your own clustered testing framework using Akka, a toolkit for message-driven distributed systems.

With this method:

  • Each Gatling injector becomes an actor in the cluster
  • A controller node handles load balancing and coordination
  • Real-time messaging and feedback

Example Setup (Scala-based):

val system = ActorSystem("GatlingCluster")
val controller = system.actorOf(Props[ControllerActor], "controller")
val injector = system.actorOf(Props[InjectorActor], name = "injector")

Actors communicate like this:

controller ! StartTest("AdvancedSimulation")

Tip: This requires Scala skills and a solid understanding of Akka actors and routers, so it’s best for tech-savvy teams.


Key Takeaway

By adopting clustering, whether through enterprise tools like FrontLine, containerised grids with Docker, or fully customised Akka-based setups, we can test smarter, faster, and at a global scale.

No matter which method we choose, the goal remains the same: make sure our application performs reliably when it matters most.

Monitoring & Result Aggregation

Let’s be honest—running a large-scale performance test without proper monitoring is like driving blindfolded during rush hour. You need clear visibility into how your system responds under stress. That’s where InfluxDB and Grafana come in handy.

We can configure Gatling to export metrics directly to InfluxDB, a time-series database known for handling large volumes of performance data. This data can then be visualised through Grafana, offering interactive dashboards that reveal how the system behaves in real time.

Here’s a quick example configuration from gatling.conf:

data.writers = [console, file, graphite]
graphite {
  host = "influx_host"
  port = 2003
  protocol = "tcp"
}

Best Practices for Distributed and Clustered Load Testing

  • Keep injector VMs lightweight; avoid browser-based tools
  • Sync all injectors with NTP to align timestamps
  • Use feeder files (CSV, JSON) for dynamic data injection
  • Monitor system-level metrics (CPU, memory, disk IO) alongside test metrics
  • Automate deployments with Ansible, Terraform, or Kubernetes for test repeatability

Conclusion

Distributed and clustered testing transforms load testing from a checkbox to a strategic weapon. Whether using open-source tools or enterprise platforms, the goal is simple: test smart, test early, test globally.

By simulating real-world usage across machines and regions, and coupling that with real-time observability, engineering teams can release confidently, knowing their system won’t buckle under pressure.

Reference

https://docs.gatling.io

https://www.frugaltesting.com/blog/step-by-step-gatling-load-testing-accelerate-your-devops-pipeline

https://www.baeldung.com/gatling-distributed-perf-testing

Picture of shreyaawasthi

shreyaawasthi

Leave a Comment

Your email address will not be published. Required fields are marked *

Suggested Article

Scroll to Top