Skip to main content

ProxySQL Cluster

Overview

ProxySQL is a decentralized proxy designed to scale horizontally. While you can manage ProxySQL nodes individually using configuration management tools (Ansible, Chef, etc.), the ProxySQL Cluster feature provides a native, peer-to-peer synchronization mechanism.

This feature ensures that configuration changes (users, servers, rules, etc.) are automatically propagated across all nodes in the cluster, providing consistent behavior and simplifying administration.


Key Concepts

Cluster Roles

A ProxySQL cluster consists of nodes acting in one of two roles:

  1. Core Nodes: These are the primary nodes that hold and propagate the "Source of Truth." They are explicitly defined in each other's proxysql_servers table.
  2. Satellite Nodes: These nodes fetch configuration from Core nodes but do not propagate changes themselves.

Source of Truth

ProxySQL uses a versioning and epoch-based system to identify the most recent configuration. When you execute a LOAD ... TO RUNTIME command on a Core node, its version number increases, signaling to other nodes that a new "Source of Truth" is available for synchronization.


What is Synchronized?

ProxySQL Cluster can synchronize the following configuration modules:

  • Global Variables: Both Admin and MySQL variables.
  • MySQL Servers: Including hostgroups and SSL parameters.
  • MySQL Users: Credentials and attributes.
  • Query Rules: Routing and rewriting policies.
  • ProxySQL Servers: The list of Core nodes themselves.

How Synchronization Works

The cluster uses a pull-based mechanism triggered by checksum mismatches.

1. Change Detection

Each node periodically checks the global configuration checksum of its peers. A mismatch indicates that a module has changed.

2. Grace Period

Before pulling data, a node waits for a consistent mismatch (defined by diffs_before_sync variables). This prevents unnecessary reconfigurations during transient network states.

3. Data Fetching

Once the threshold is reached, the local node performs a series of SELECT statements against the remote peer's runtime_ tables to retrieve the new configuration.

4. Activation & Persistence

The fetched data is loaded into the local memory and activated via an internal LOAD command. If configured, it is also automatically saved to the local disk.


Monitoring the Cluster

You can monitor the health and synchronization status of the cluster via the stats schema:

  • stats_proxysql_servers_checksums: Shows the configuration versions and checksums of all known peers.
  • stats_proxysql_servers_metrics: Displays real-time performance metrics (uptime, queries, latency) for other nodes.
  • runtime_checksums_values: Shows the local node's current configuration versions.

Next Steps