19_Monitor_Module

备注:文章编写时间201904-201905期间,后续官方在github的更新没有被写入

一、监控功能模块[Monitor Module]

本节重点介绍Monitor v1.2.1,因为它引入了与v1.2.0相比的多项改进。

已删除的未使用或已弃用的变量: mysql-monitor_query_variables mysql-monitor_query_status mysql-monitor_timer_cached

目前尚未使用的变量: mysql-monitor_query_interval mysql-monitor_query_timeout

二、概述[Overview]

监控模块负责对后端进行一系列检查。它目前支持4种类型的检查: 1)connect ==>它连接到所有后端MySQL服务,成功/失败将记录在表mysql_server_connect_log中; 2)ping ==>它ping到所有后端的MySQL服务,并在表 mysql_server_ping_log 中记录成功/失败。如果丢失心跳的次数超过 mysql-monitor_ping_max_failures 值,则向MySQL_Hostgroups_Manager发送信号以终止所有连接; 3)replication lag ==>它将检查配置了 max_replication_lag 大于0的所有后端MySQL的 Seconds_Behind_Master 值,并将检查结果记录在表 mysql_server_replication_lag_log 中。如果 Seconds_Behind_Master > max_replication_lag 则服务器被忽略,直到 Seconds_Behind_Master < max_replication_lag; 4)read only ==>它检查表 mysql_replication_hostgroups 内记录的主机组中所有主机的 read_only 参数值,并将检查结果在记录表mysql_server_read_only_log中。

三、参数[Variables]

A-常规参数:

1)mysql-monitor_username 指定Monitor模块用于连接后端MySQL的用户名。 用户只需要USAGE权限即可连接,以便用于执行ping和read_only检查。如果需要监视复制延迟,用户还需要REPLICATION CLIENT权限。

2)mysql-monitor_password mysql-monitor_username用户的密码

3)mysql-monitor_enabled 它启用或禁用MySQL Monitor。 由于MySQL Monitor可以直接干扰在Admin界面上执行的更改,因此该变量允许临时禁用它。

B-连接参数:

1)mysql-monitor_connect_interval 执行连接检查的频率,以毫秒为单位。

2)mysql-monitor_connect_timeout 连接超时时间(以毫秒为单位)。 当前实现中将此值四舍五入到小于或等于原始间隔的整数秒,最小值为1秒。

C-Ping 参数:

1)mysql-monitor_ping_interval 执行ping检查的频率,以毫秒为单位

2)mysql-monitor_ping_timeout Ping超时时间(以毫秒为单位)。

3)mysql-monitor_ping_max_failures 如果主机连续丢失了 mysql-monitor_ping_max_failures 次ping,则MySQL_Monitor会通知MySQL_Hostgroup_Manager,告知该节点无法访问,应立即终止所有连接。 在添加服务器信息后,MySQL_Monitor将第一个发起尝试连接以进行ping操作,因此检测节点的时间可能是以下两种情况之一: mysql-monitor_ping_max_failures * mysql-monitor_connect_timeout 或 mysql-monitor_ping_max_failures * mysql-monitor_ping_timeout

D-只读参数:

1)mysql-monitor_read_only_interval 执行只读检查的频率,以毫秒为单位。

2)mysql-monitor_read_only_timeout 只读检查超时时间(以毫秒为单位)

3)mysql-monitor_writer_is_also_reader 当节点将其read_only值从1更改为0时,此参数将指明该节点是否存在于两个主机组中: false :节点将在 writer_hostgroup 中移动并从 reader_hostgroup 中删除; true :节点将在 writer_hostgroup 中复制并保留在 reader_hostgroup 中;

E-复制延时参数:

1)mysql-monitor_replication_lag_interval 执行复制延迟检查的频率,以毫秒为单位。

2)mysql-monitor_replication_lag_timeout 复制延迟检查超时时间(以毫秒为单位)。

F-其他参数:

1)mysql-monitor_history 为防止日志表无限制地增长,Monitor Module将自动清除早于 mysql-monitor_history 毫秒的记录。 由于ping检查依赖于历史表来确定节点是否缺少心跳,因此如果小于ping所要求的,则mysql-monitor_history的值会自动调整为以下值: (mysql-monitor_ping_max_failures + 1 ) * mysql-monitor_ping_timeout

四、监控模块的主线程[Main Threads]

监控模块有几个内部线程。目前有5个主线程: 1)Monitor ==>主线程,负责启动和协调所有其他线程; 2)monitor_connect_thread ==>连接检查的主线程和调度程序; 3)monitor_ping_thread ==>ping检查的主线程和调度程序; 4)monitor_read_only_thread ==>只读检查的主线程和调度程序; 5)monitor_replication_lag_thread ==>复制延迟检查的主线程和调度程序;

在v1.2.0及以上版本中,处以上各线程的检测外,Monitor线程也负责执行这些检查。

五、监控模块的线程池[Thread Pool]

在版本v1.2.0中由于SSL在实现上的一些限制导致了版本的实现也不可避免的具有了限制:使用SSL时,connect()是阻塞调用的, 这将导致上面4个monitor_*_thread线程在执行连接阶段时被柱塞。在版本v1.2.1尝试使用新的实现方式来克服此限制。 目前: 1)Monitor会初始化一个 workers 的线程池并创建一个队列; 2)monitor_connect_thread, monitor_ping_thread, monitor_read_only_thread 和 monitor_replication_lag_thread 它们生成任务并使用队列将任务发送给workers; 3)workers 处理任务并执行需要的操作; 4)如果Monitor检测到队列增长太快,则会创建新的临时 worker 线程。

六、连接清理[Connection purging]

Monitor实现了维护自己的连接池。超过 3 * mysql-monitor_ping_interval 毫秒的活动连接将自动被清除。

七、wait_timeout

为防止后端自行终止连接,Monitor模块自动配置了 wait_timeout = mysql-monitor_ping_interval * 10

完毕!