max_connections:和该后端允许建立的最大连接数。当达到最大数量时,即使该后端的权重很大,也不会和它新建连接。默认值为1000,表示每个后端最多能同时接受1000个连接。请确保该后端的max_connections值是合理的,以避免MySQL超负荷时ProxySQL继续向其发送请求。
max_replication_lag:如果值大于0,ProxySQL的Monitor模块将会定期检查该slave的复制是否延后于master,如果延迟的值大于该字段的值,ProxySQL将会暂时避开该节点,直到该slave赶上master。
use_ssl:如果设置为1,则和该后端MySQL建立SSL连接。
max_latency_ms:Monitory模块定期向该后端发起ping检查,如果该节点的ping时间大于该字段的值,则将其排除在连接池之外(尽管该节点仍处于ONLINE状态)。
comment:该表的说明信息,可随便定义。
关于该表各字段的用法,请参见官方手册(我已翻译)。
以下是上面插入数据成功后的结果:
admin> select * from mysql_servers\G *************************** 1. row *************************** hostgroup_id: 10 hostname: 192.168.100.22 port: 3306 status: ONLINE weight: 1 compression: 0 max_connections: 1000 max_replication_lag: 0 use_ssl: 0 max_latency_ms: 0 comment: *************************** 2. row *************************** hostgroup_id: 10 hostname: 192.168.100.23 port: 3306 status: ONLINE weight: 1 compression: 0 max_connections: 1000 max_replication_lag: 0 use_ssl: 0 max_latency_ms: 0 comment: *************************** 3. row *************************** hostgroup_id: 10 hostname: 192.168.100.24 port: 3306 status: ONLINE weight: 1 compression: 0 max_connections: 1000 max_replication_lag: 0 use_ssl: 0 max_latency_ms: 0 comment:需要注意的是,同一个节点是可以同时存在于多个组中的。最典型的情形是master既充当写节点,也充当读节点,这时它就同时存在于写组和读组。
3.监控后端节点ProxySQL通过Monitor模块监控后端MySQL Server的read_only值来自动调整节点所属的组。所以,在配置读、写组之前,必须先配置好监控。
本文只简单介绍该模块的监控类型,以及如何配置监控。对于Monitor模块理论的详细介绍,请参见以下两篇文章:
Monitor模块官方手册翻译:关于Monitor模块和相关变量。
Monitor模块使用的线程池、连接池
3.1 Monitor模块可以监控什么东西首先看下Monitor库中的表:
admin> show tables from monitor; +------------------------------------+ | tables | +------------------------------------+ | mysql_server_connect_log | | mysql_server_group_replication_log | | mysql_server_ping_log | | mysql_server_read_only_log | | mysql_server_replication_lag_log | +------------------------------------+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
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监控