ProxySQL通过Monitor模块监控后端MySQL Server的read_only值来自动调整节点所属的组。所以,在配置读、写组之前,必须先配置好监控。

首先看下Monitor库中的表:

  1. admin> show tables from monitor;
  2. +------------------------------------+
  3. | tables |
  4. +------------------------------------+
  5. | mysql_server_connect_log |
  6. | mysql_server_group_replication_log |
  7. | mysql_server_ping_log |
  8. | mysql_server_read_only_log |
  9. | mysql_server_replication_lag_log |
  10. +------------------------------------+

Monitor监控4种指标:connect、ping、read_only和replication lag。

1.connect监控

ProxySQL连接到各后端是否成功,成功/失败的连接将记录到表mysql_server_connect_log中。

2.ping监控

这是一种心跳检测。Monitor模块向所有后端MySQL节点发起ping检查,ping成功/失败的情况将记录到表mysql_server_ping_log中。当ping某后端的失败次数达到了mysql-monitor_ping_max_failures时表示失去心跳,将发送一个信号给MySQL的主机组管理器来杀掉和该后端节点的所有连接。

请和connect监控区分开,connect监控是通过建立连接来检测和后端节点连接的连通性。ping监控是心跳检测,ProxySQL通过MySQL的一个ping API发送给后端MySQL服务上,然后等待ping回复,虽然是ping检测,但也是需要建立连接的。

所以,有两个确定连接不可用公式:

  • mysql-monitor_ping_max_failures * mysql-monitor_connect_timeout
  • mysql-monitor_ping_max_failures * mysql-monitor_ping_timeout
  1. mysql> select * from global_variables;
  2. +----------------------------------------------------------------------+--------------------------------------------+
  3. | variable_name | variable_value |
  4. +----------------------------------------------------------------------+--------------------------------------------+
  5. | admin-stats_credentials | stats:stats |
  6. | admin-stats_mysql_connections | 60 |
  7. | admin-stats_mysql_connection_pool | 60 |
  8. | admin-stats_mysql_query_cache | 60 |
  9. | admin-stats_mysql_query_digest_to_disk | 0 |
  10. | admin-stats_system_cpu | 60 |
  11. | admin-stats_system_memory | 60 |
  12. | admin-telnet_admin_ifaces | (null) |
  13. | admin-telnet_stats_ifaces | (null) |
  14. | admin-refresh_interval | 2000 |
  15. | admin-read_only | false |
  16. | admin-hash_passwords | true |
  17. | admin-vacuum_stats | true |
  18. | admin-version | 2.4.1-1-g1ea371d |
  19. | admin-cluster_mysql_variables_diffs_before_sync | 3 |
  20. | admin-cluster_admin_variables_diffs_before_sync | 3 |
  21. | admin-cluster_ldap_variables_diffs_before_sync | 3 |
  22. | admin-cluster_mysql_variables_save_to_disk | true |
  23. | admin-cluster_admin_variables_save_to_disk | true |
  24. | admin-cluster_ldap_variables_save_to_disk | true |
  25. | admin-checksum_mysql_query_rules | true |
  26. | admin-checksum_mysql_servers | true |
  27. | admin-checksum_mysql_users | true |
  28. | admin-checksum_mysql_variables | true |
  29. | admin-checksum_admin_variables | true |
  30. | admin-checksum_ldap_variables | true |
  31. | admin-restapi_enabled | false |
  32. | admin-restapi_port | 6070 |
  33. | admin-web_enabled | true |
  34. | admin-web_port | 6080 |
  35. | admin-web_verbosity | 0 |
  36. | admin-prometheus_memory_metrics_interval | 61 |
  37. | admin-admin_credentials | admin:admin;cluster_20X:123456 |
  38. | admin-mysql_ifaces | 0.0.0.0:6032 |
  39. | admin-cluster_username | cluster_20X |
  40. | admin-cluster_password | 123456 |
  41. | admin-cluster_check_interval_ms | 200 |
  42. | admin-cluster_check_status_frequency | 100 |
  43. | admin-cluster_mysql_query_rules_save_to_disk | true |
  44. | admin-cluster_mysql_servers_save_to_disk | true |
  45. | admin-cluster_mysql_users_save_to_disk | true |
  46. | admin-cluster_proxysql_servers_save_to_disk | true |
  47. | admin-cluster_mysql_query_rules_diffs_before_sync | 3 |
  48. | admin-cluster_mysql_servers_diffs_before_sync | 3 |
  49. | admin-cluster_mysql_users_diffs_before_sync | 3 |
  50. | admin-cluster_proxysql_servers_diffs_before_sync | 3 |
  51. | mysql-default_charset | utf8 |
  52. | mysql-default_collation_connection | utf8_general_ci |
  53. | mysql-shun_on_failures | 5 |
  54. | mysql-shun_recovery_time_sec | 10 |
  55. | mysql-unshun_algorithm | 0 |
  56. | mysql-query_retries_on_failure | 1 |
  57. | mysql-client_host_cache_size | 0 |
  58. | mysql-client_host_error_counts | 0 |
  59. | mysql-connect_retries_delay | 1 |
  60. | mysql-connection_delay_multiplex_ms | 0 |
  61. | mysql-connection_max_age_ms | 0 |
  62. | mysql-connect_timeout_client | 10000 |
  63. | mysql-connect_timeout_server_max | 10000 |
  64. | mysql-enable_client_deprecate_eof | true |
  65. | mysql-enable_server_deprecate_eof | true |
  66. | mysql-enable_load_data_local_infile | false |
  67. | mysql-eventslog_filename | |
  68. | mysql-eventslog_filesize | 104857600 |
  69. | mysql-eventslog_default_log | 0 |
  70. | mysql-eventslog_format | 1 |
  71. | mysql-auditlog_filename | |
  72. | mysql-auditlog_filesize | 104857600 |
  73. | mysql-handle_unknown_charset | 1 |
  74. | mysql-free_connections_pct | 10 |
  75. | mysql-connection_warming | false |
  76. | mysql-session_idle_ms | 1 |
  77. | mysql-have_ssl | false |
  78. | mysql-log_mysql_warnings_enabled | false |
  79. | mysql-monitor_enabled | true |
  80. | mysql-monitor_connect_timeout | 600 |
  81. | mysql-monitor_ping_max_failures | 3 |
  82. | mysql-monitor_ping_timeout | 1000 |
  83. | mysql-monitor_read_only_max_timeout_count | 3 |
  84. | mysql-monitor_replication_lag_group_by_host | false |
  85. | mysql-monitor_replication_lag_interval | 10000 |
  86. | mysql-monitor_replication_lag_timeout | 1000 |
  87. | mysql-monitor_replication_lag_count | 1 |
  88. | mysql-monitor_groupreplication_healthcheck_interval | 5000 |
  89. | mysql-monitor_groupreplication_healthcheck_timeout | 800 |
  90. | mysql-monitor_groupreplication_healthcheck_max_timeout_count | 3 |
  91. | mysql-monitor_groupreplication_max_transactions_behind_count | 3 |
  92. | mysql-monitor_groupreplication_max_transactions_behind_for_read_only | 1 |
  93. | mysql-monitor_galera_healthcheck_interval | 5000 |
  94. | mysql-monitor_galera_healthcheck_timeout | 800 |
  95. | mysql-monitor_galera_healthcheck_max_timeout_count | 3 |
  96. | mysql-monitor_replication_lag_use_percona_heartbeat | |
  97. | mysql-monitor_query_interval | 60000 |
  98. | mysql-monitor_query_timeout | 100 |
  99. | mysql-monitor_slave_lag_when_null | 60 |
  100. | mysql-monitor_threads_min | 8 |
  101. | mysql-monitor_threads_max | 128 |
  102. | mysql-monitor_threads_queue_maxsize | 128 |
  103. | mysql-monitor_wait_timeout | true |
  104. | mysql-monitor_writer_is_also_reader | true |
  105. | mysql-max_allowed_packet | 67108864 |
  106. | mysql-tcp_keepalive_time | 0 |
  107. | mysql-use_tcp_keepalive | false |
  108. | mysql-automatic_detect_sqli | false |
  109. | mysql-firewall_whitelist_enabled | false |
  110. | mysql-firewall_whitelist_errormsg | Firewall blocked this query |
  111. | mysql-throttle_connections_per_sec_to_hostgroup | 1000000 |
  112. | mysql-max_transaction_idle_time | 14400000 |
  113. | mysql-max_transaction_time | 14400000 |
  114. | mysql-multiplexing | true |
  115. | mysql-log_unhealthy_connections | true |
  116. | mysql-enforce_autocommit_on_reads | false |
  117. | mysql-autocommit_false_not_reusable | false |
  118. | mysql-autocommit_false_is_transaction | false |
  119. | mysql-verbose_query_error | false |
  120. | mysql-hostgroup_manager_verbose | 1 |
  121. | mysql-binlog_reader_connect_retry_msec | 3000 |
  122. | mysql-threshold_query_length | 524288 |
  123. | mysql-threshold_resultset_size | 4194304 |
  124. | mysql-query_digests_max_digest_length | 2048 |
  125. | mysql-query_digests_max_query_length | 65000 |
  126. | mysql-query_digests_grouping_limit | 3 |
  127. | mysql-query_digests_groups_grouping_limit | 0 |
  128. | mysql-wait_timeout | 28800000 |
  129. | mysql-throttle_max_bytes_per_second_to_client | 0 |
  130. | mysql-throttle_ratio_server_to_client | 0 |
  131. | mysql-max_stmts_per_connection | 20 |
  132. | mysql-max_stmts_cache | 10000 |
  133. | mysql-mirror_max_concurrency | 16 |
  134. | mysql-mirror_max_queue_length | 32000 |
  135. | mysql-default_max_latency_ms | 1000 |
  136. | mysql-query_processor_iterations | 0 |
  137. | mysql-query_processor_regex | 1 |
  138. | mysql-set_query_lock_on_hostgroup | 0 |
  139. | mysql-reset_connection_algorithm | 2 |
  140. | mysql-auto_increment_delay_multiplex | 5 |
  141. | mysql-auto_increment_delay_multiplex_timeout_ms | 10000 |
  142. | mysql-long_query_time | 1000 |
  143. | mysql-query_cache_size_MB | 256 |
  144. | mysql-poll_timeout_on_failure | 100 |
  145. | mysql-keep_multiplexing_variables | tx_isolation,transaction_isolation,version |
  146. | mysql-kill_backend_connection_when_disconnect | true |
  147. | mysql-client_session_track_gtid | true |
  148. | mysql-session_idle_show_processlist | true |
  149. | mysql-show_processlist_extended | 0 |
  150. | mysql-query_digests | true |
  151. | mysql-query_digests_lowercase | false |
  152. | mysql-query_digests_replace_null | false |
  153. | mysql-query_digests_no_digits | false |
  154. | mysql-query_digests_normalize_digest_text | false |
  155. | mysql-query_digests_track_hostname | false |
  156. | mysql-query_digests_keep_comment | false |
  157. | mysql-servers_stats | true |
  158. | mysql-default_reconnect | true |
  159. | mysql-ssl_p2s_ca | |
  160. | mysql-ssl_p2s_capath | |
  161. | mysql-ssl_p2s_cert | |
  162. | mysql-ssl_p2s_key | |
  163. | mysql-ssl_p2s_cipher | |
  164. | mysql-ssl_p2s_crl | |
  165. | mysql-ssl_p2s_crlpath | |
  166. | mysql-init_connect | |
  167. | mysql-ldap_user_variable | |
  168. | mysql-add_ldap_user_comment | |
  169. | mysql-default_tx_isolation | READ-COMMITTED |
  170. | mysql-default_session_track_gtids | OFF |
  171. | mysql-connpoll_reset_queue_length | 50 |
  172. | mysql-min_num_servers_lantency_awareness | 1000 |
  173. | mysql-aurora_max_lag_ms_only_read_from_replicas | 2 |
  174. | mysql-stats_time_backend_query | false |
  175. | mysql-stats_time_query_processor | false |
  176. | mysql-query_cache_stores_empty_result | true |
  177. | mysql-threads | 4 |
  178. | mysql-max_connections | 2048 |
  179. | mysql-default_query_delay | 0 |
  180. | mysql-default_query_timeout | 36000000 |
  181. | mysql-have_compress | true |
  182. | mysql-poll_timeout | 2000 |
  183. | mysql-interfaces | 0.0.0.0:6033 |
  184. | mysql-default_schema | information_schema |
  185. | mysql-stacksize | 1048576 |
  186. | mysql-server_version | 5.7.22 |
  187. | mysql-connect_timeout_server | 3000 |
  188. | mysql-monitor_username | proxysql |
  189. | mysql-monitor_password | iD!^^EjU#Yxr5$p |
  190. | mysql-monitor_history | 600000 |
  191. | mysql-monitor_connect_interval | 60000 |
  192. | mysql-monitor_ping_interval | 10000 |
  193. | mysql-monitor_read_only_interval | 1500 |
  194. | mysql-monitor_read_only_timeout | 500 |
  195. | mysql-ping_interval_server_msec | 120000 |
  196. | mysql-ping_timeout_server | 500 |
  197. | mysql-commands_stats | true |
  198. | mysql-sessions_sort | true |
  199. | mysql-connect_retries_on_failure | 10 |
  200. | mysql-server_capabilities | 569899 |
  201. +----------------------------------------------------------------------+--------------------------------------------+
  202. 196 rows in set (0.00 sec)

注意事项:

若是后端一个从库关机了,会导致如下情况

  • 查看ping日志,会发现连不上从库 select * from mysql_server_ping_log;

  • 查看连接信息,会发现只有一个主库:select * from mysql_server_connect_log;

  • 查看数据库状态,会发现从库仍显示在线状态,不会自动修改状态下线等:select * from mysql_servers;

因此需要手动修改数据库状态,安全的禁用后端服务器

  • 要安全的禁用后端服务器,需要将其状态更改为 OFFLINE_SOFT 即可。其上活动事务和连接仍将可用,但此后不会向该节点发送新流量。
  • 要立即禁用后端服务器,需要将其状态更改为 OFFLINE_HARD 即可。此后,所有当前流量将立即终止,并且不会发送新流量到该节点。
  • 要将离线的后端重新启用,只需将其状态更改回 ONLINE 就足够了。
  • ProxySQL允许将一个后端服务器彻底的删除,只需要将其从mysql_servers表中完全删除即可。

    注意:虽然可以直接执行删除操作,但是为了操作的平滑、安全,数据的完整、可控,还是建议先修改状态让其软下线,等待其上执行的所有SQL都结束后再执行后面的删除动作。

3.read_only监控

检查mysql_replication_hostgroups表中所有节点的read_only值,并记录到mysql_server_read_only_log。如果read_only=1,表示只读,是一个slave,这样的节点将会自动移入reader_hostgroup中,如果read_only=0,表示可写,可能是master,这样的节点将会自动移入writer_hostgroup中。

4.replication lag监控

对mysql_servers表中所有配置了max_replication_lag的后端slave节点都检查复制延迟,通过show slave status返回结果中的Seconds_Behind_Master字段,判断slave和master之间的延迟程度,并记录到mysql_server_replication_lag_log表中。

如果Seconds_Behind_Master > max_replication_lag,表示该slave延迟很严重,ProxySQL会自动避开这种slave节点,直到Seconds_Behind_Master < max_replication_lag。

Monitor监控上述指标时,会使用MySQL节点上的用户连接到后端节点,所以,需要先在后端节点上创建负责监控的用户。监控connect、ping和read_only这3项指标时,该用户只需具有USAGE权限,如果要监控replication lag指标,则需要replication client权限。

ProxySQL监控后端节点的更多相关文章

  1. MySQL中间件之ProxySQL(6):管理后端节点

    返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.配置后端节点前的说明 为了让ProxySQL能够找到后端的MySQ ...

  2. ProxySQL(6):管理后端节点

    文章转载自:https://www.cnblogs.com/f-ck-need-u/p/9286922.html 配置后端节点前的说明 为了让ProxySQL能够找到后端的MySQL节点,需要将后端的 ...

  3. ProxySQL 监控和统计

    ProxySQL 监控和统计 很多有价值的统计数据在stats和monitor库中. admin@127.0.0.1 [(none)]>SHOW TABLES FROM stats; +---- ...

  4. ProxySQL 配置MySQL节点

    转载自:https://www.jianshu.com/p/ca1b78b5d615 可以在mysql_servers表和mysql_replication_hostgroups表(可选)中配置后端的 ...

  5. Nginx负载均衡中后端节点服务器健康检查的操作梳理

    正常情况下,nginx做反向代理,如果后端节点服务器宕掉的话,nginx默认是不能把这台realserver踢出upstream负载集群的,所以还会有请求转发到后端的这台realserver上面,这样 ...

  6. nginx下后端节点realserverweb健康检测模块ngx_http_upstream_check_module

    本文章收录做资料使用,非本人原创,特此说明. 公司前一段对业务线上的nginx做了整理,重点就是对nginx上负载均衡器的后端节点做健康检查.目前,nginx对后端节点健康检查的方式主要有3种,这里列 ...

  7. Nginx负载均衡中后端节点服务器健康检查的一种简单方式

    摘自:https://cloud.tencent.com/developer/article/1027287 一.利用nginx自带模块ngx_http_proxy_module和ngx_http_u ...

  8. nginx后端节点健康检查

    一.nginx健康检查的三种方式 .ngx_http_proxy_module 模块和ngx_http_upstream_module模块(自带) 官网地址:http://nginx.org/en/d ...

  9. Nginx实战系列之功能篇----后端节点健康检查(转)

    公司前一段对业务线上的nginx做了整理,重点就是对nginx上负载均衡器的后端节点做健康检查.目前,nginx对后端节点健康检查的方式主要有3种,这里列出:   1.ngx_http_proxy_m ...

随机推荐

  1. 【Nim 游戏】 学习笔记

    前言 没脑子选手随便一道博弈论都不会 -- 正文 Nim 游戏引入 这里给出最简单的 \(Nim\) 游戏的题目描述: \(Nim\) 游戏 有两个顶尖聪明的人在玩游戏,游戏规则是这样的: 有\(n\ ...

  2. go 编程规范

    如果没有编程规范会有什么问题? 哪些地方可以需要指定规范? 非编码类规范:编码规范 非编码规范 开源规范 http://www.ruanyifeng.com/blog/2011/05/how_to_c ...

  3. browserify的standalone的含义

    白话:就像Jquery的$, 把你打包后的函数挂在window下你指定的名字下 废话:白话看不懂,就看下面的废话,你不得不花更多时间理解--standalone AAA的含义$ browserify ...

  4. 强化学习-学习笔记14 | 策略梯度中的 Baseline

    本篇笔记记录学习在 策略学习 中使用 Baseline,这样可以降低方差,让收敛更快. 14. 策略学习中的 Baseline 14.1 Baseline 推导 在策略学习中,我们使用策略网络 \(\ ...

  5. 跟HR在大群吵架是什么体验?

    原创不易,求分享.求一键三连 昨天跟HR负责人在公司大群吵了一架,先说结论:我输了... 事情原委是,老板在周一司庆上聊嗨了,说了一句:我觉得打卡没用,建议取消打卡. 下来后老板在公司论坛发了一个问题 ...

  6. Linux为所有用户安装Miniconda

    如果以root身份默认安装,后续普通用户再安装的话,是直接用不起来的,需要改些东西,所以在安装时最好全局安装,所有用户都可用 执行安装脚本:sudo bash Miniconda3-latest-Li ...

  7. Mac Sierra开启读写NTFS

    查看卷标diskutil list sudo vim /etc/fstab,开启WinD盘符读写,添加如下: LABEL=WinD none ntfs rw,auto,nobrowse 磁盘工具重新挂 ...

  8. 4-2 Spring MVC框架-01

    Spring MVC框架-01 Ⅰ.接收客户端请求 1. 关于Spring MVC框架 Spring MVC是基于Spring框架基础之上的 作用: 接收请求,响应结果,处理异常 主要解决了后端服务器 ...

  9. Node.js精进(11)——Socket.IO

    Socket.IO 是一个建立在 WebSocket 协议之上的库,可以在客户端和服务器之间实现低延迟.双向和基于事件的通信. 并且提供额外的保证,例如回退到 HTTP 长轮询.自动重连.数据包缓冲. ...

  10. 多校B层冲刺NOIP20211111模拟12

    题面:PDFhttp://xn--gwt928b.accoders.com/pdf/10248/10248.pdfhttp://xn--gwt928b.accoders.com/pdf/10248/1 ...