Monitor Module
This section focus on Monitor v1.2.1, as it introduces multiple improvements compared to v1.2.0
Variables removed as unused or deprecated:
- mysql-monitor_query_variables
- mysql-monitor_query_status
mysql-monitor_timer_cached
Variables currently not in use:mysql-monitor_query_interval
- mysql-monitor_query_timeout
Overview
The Monitor Module is responsible for a series of check against the backends.It currently supports 4 types of checks:
- connect : it connects to all the backends, and success/failure is logged in table
mysql_server_connect_log
; - ping : it pings to all the backends, and success/failure is logged in table
mysql_server_ping_log
. In case ofmysql-monitor_ping_max_failures
missed heartbeat, sends a signal to MySQL_Hostgroups_Manager to kill all connections; - replication lag : it checks
Seconds_Behind_Master
to all backends configured withmax_replication_lag
greater than 0, and check is logged in tablemysql_server_replication_lag_log
. IfSeconds_Behind_Master
>max_replication_lag
the server is shunned untilSeconds_Behind_Master
<max_replication_lag
; - read only : it checks
read_only
for all hosts in the hostgroups in tablemysql_replication_hostgroups
, and check is logged in tablemysql_server_read_only_log
. Ifread_only=1
the host is copied/moved to thereader_hostgroup
, while ifread_only=0
the host is copied/moved to thewriter_hostgroup
.
Variables
General variables:
- mysql-monitor_username
Specifies the username that the Monitor module will use to connect to the backend. The user needs only USAGE
privileges to connect, ping and check read_only
. The user needs also REPLICATION CLIENT
if it needs to monitor replication lag.
- mysql-monitor_password
Password for user mysql-monitor_username
- mysql-monitor_enabled
It enables or disables MySQL Monitor. Since MySQL Monitor can interfere with changed applied directly on the Admin interface, this variable allows to temporary disable it.
Connect variables:
- mysql-monitor_connect_interval
How frequently a connect check is performed, in milliseconds.
- mysql-monitor_connect_timeout
Connection timeout in milliseconds. The current implementation rounds this value to an integer number of seconds less or equal to the original interval, with 1 second as minimum. This lazy rounding is done because SSL connections are blocking calls.
Ping variables:
- mysql-monitor_ping_interval
How frequently a ping check is performed, in milliseconds.
- mysql-monitor_ping_timeout
Ping timeout in milliseconds.
- mysql-monitor_ping_max_failures
If a host misses mysql-monitor_ping_max_failures pings in a row, MySQL_Monitor informs MySQL_Hostgroup_Manager that the node is unreachable and that should immediately kill all connections.It is important to note that in case a connection to the backend is not available, MySQL_Monitor will first try to connect in order to ping, therefore the time to detect a node down could be one of the two:
- mysql-monitor_ping_max_failures * mysql-monitor_connect_timeout
- mysql-monitor_ping_max_failures * mysql-monitor_ping_timeout
Read only variables:
- mysql-monitor_read_only_interval
How frequently a read only check is performed, in milliseconds.
- mysql-monitor_read_only_timeout
Read only check timeout in milliseconds.
- mysql-monitor_writer_is_also_reader
When a node change its read_only
value from 1 to 0, this variable determines if the node should be present in both hostgroups or not:
- false : node will be moved in
writer_hostgroup
and removed fromreader_hostgroup
- true : node will be copied in
writer_hostgroup
and stay also inreader_hostgroup
Replication lag variables:
- mysql-monitor_replication_lag_interval
How frequently a replication lag check is performed, in milliseconds.
- mysql-monitor_replication_lag_timeout
Replication lag check timeout in milliseconds.
Other variables:
- mysql-monitor_history
To prevent that log tables grow without limit, Monitor Module will automatically purge records older than mysql-monitor_history milliseconds. Since ping checks relies on history table to determine if a node is missing heartbeats, the value of mysql-monitor_history is automatically adjusted to the follows if less than it:
- (mysql-monitor_ping_max_failures + 1 ) * mysql-monitor_ping_timeout
Main Threads
The Monitor Module has several internal threads. There are currently 5 main threads:
- Monitor: master thread, responsible to start and coordinate all the others
- monitor_connect_thread: main thread and scheduler for the connect checks
- monitor_ping_thread: main thread and scheduler for the ping checks
- monitor_read_only_thread: main thread and scheduler for the read only checks
- monitorreplication_lag_thread: main thread and scheduler for the replication lag checksUp to version v1.2.0 the above threads but _Monitor were also responsible to perform the checks
Thread Pool
The implementation in v1.2.0 has a limitation with SSL implementation: with SSL, connect()
is a blocking call, causing the threads to stall while performing the connect phase.Version v1.2.1 tries to overcome this limitation with a new implementation. Now:
- Monitor initializes a Thread Pool of workers and creates a queue;
- monitor_connect_thread, monitor_ping_thread, monitor_read_only_thread and monitor_replication_lag_thread are producers that generate tasks and sent them to the workers using the queue;
- the workers process the tasks and perform the requires actions;
- if Monitor detects that the queue is growing too fast, it creates new temporary worker threads
Connection purging
Monitor implements its own connection pool. Connections that are alive for more than 3 * mysql_thread___monitor_ping_interval
milliseconds are automatically purged
wait_timeout
To prevent that backends terminated connections, Monitor module automatically configures wait_timeout
= mysql_thread___monitor_ping_interval
* 10