-
Notifications
You must be signed in to change notification settings - Fork 1k
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
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_failuresmissed heartbeat, sends a signal to MySQL_Hostgroups_Manager to kill all connections; -
replication lag : it checks
Seconds_Behind_Masterto all backends configured withmax_replication_laggreater than 0, and check is logged in tablemysql_server_replication_lag_log. IfSeconds_Behind_Master>max_replication_lagthe server is shunned untilSeconds_Behind_Master<max_replication_lag; -
read only : it checks
read_onlyfor all hosts in the hostgroups in tablemysql_replication_hostgroups, and check is logged in tablemysql_server_read_only_log. Ifread_only=1the host is copied/moved to thereader_hostgroup, while ifread_only=0the host is copied/moved to thewriter_hostgroup.
General variables:
-
mysql-monitor_username
Specifies the username that the Monitor module will use to connect to the backend. The user needs only
USAGEprivileges to connect, ping and checkread_only. The user needs alsoREPLICATION CLIENTif 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 rouding 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 unreacheable 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_onlyvalue 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_hostgroupand removed fromreader_hostgroup -
true : node will be copied in
writer_hostgroupand stay also inreader_hostgroup
-
false : node will be moved in
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
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
- monitor_replication_lag_thread: main thread and scheduler for the replication lag checks Up to version v1.2.0 the above threads but Monitor were also responsible to perform the checks
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
Monitor implements its own connection pool. Connections that are alive for more than 3 * mysql_thread___monitor_ping_interval milliseconds are automatically purged
To prevent that backends terminated connections, Monitor module automatically configures wait_timeout = mysql_thread___monitor_ping_interval * 10