ProxySQL官檔翻譯__19_Monitor_Module

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

完畢!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章