This is a read-only copy of the MariaDB Knowledgebase generated on 2025-05-01. For the latest, interactive version please visit https://mariadb.com/kb/.

Selecting Replica Servers with MaxScale's Read/Write Split Router

Overview

The Read/Write Split Router (readwritesplit) load balances read-only queries between one or more replica servers. It selects a replica server to execute a query using criteria configured by the slave_selection_criteria parameter.

CriterionDescription
ADAPTIVE_ROUTINGSelects using average response times
LEAST_BEHIND_MASTERSelects based on replication lag
LEAST_CURRENT_OPERATIONSSelects based on number of active operations (the default)
LEAST_GLOBAL_CONNECTIONSSelects based on number of connections from MariaDB MaxScale
LEAST_ROUTER_CONNECTIONSSelects based on number of connections from the service

Using Adaptive Routing

The Read/Write Split Router (readwritesplit) uses adaptive routing when the slave_selection_criteria parameter is set to ADAPTIVE_ROUTING.

In this mode, the router measures average server response times. When the router routes queries, it compares the response times of the different replica servers. It favors the faster servers for most queries, while still guaranteeing some traffic on the slowest servers.

Using Least Behind Primary

The Read/Write Split Router (readwritesplit) uses the replica server that is least behind the primary server when the slave_selection_criteria parameter is set to LEAST_BEHIND_MASTER. This mode is only compatible with MariaDB replication.

In this mode, the router measures replica lag using the Seconds_Behind_Master column from SHOW REPLICA STATUS. The replica server that has the lowest value is considered to be the least behind the primary server.

Setting the Replica Selection Criteria

1. Set the replica selection criteria by configuring the slave_selection_criteria parameter for the Read/Write Split Router in maxscale.cnf:

[split-router]
type                     = service
router                   = readwritesplit
...
slave_selection_criteria = LEAST_GLOBAL_CONNECTIONS

2. Restart the MaxScale instance.

$ sudo systemctl restart maxscale
Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.