视频:《MySQL ProxySQL 管理实战》

配置后端节点过程综述:

  1. 部署MySQL主从集群及proxysql服务;
  2. 配置主机组 -- mysql_replication_hostgroups;
  3. 将后端MySQL节点加入proxySQL中 -- mysql_servers;
  4. 监控后端节点;
  5. 配置App用户 --mysql_users;
  6. 配置路由规则

配置读写组

--查看当前主机组状态
proxysql>select * from mysql_replication_hostgroups;
--配置读写主机组
proxysql>INSERT INTO mysql_replication_hostgroups (writer_hostgroup,reader_hostgroup,comment) VALUES (1,2,'TestCluster');

mysql_replication_hostgroups 表

字段

说明

writer_hostgroup

写组,主键

reader_hostgroup

读组

comment

注释

添加节点:mysql_servers

https://proxysql.com/documentation/backend-server-configuration/

insert into mysql_servers(hostgroup_id,hostname,port) 
values(10,'192.168.100.22',3306);

insert into mysql_servers(hostgroup_id,hostname,port) 
values(10,'192.168.100.23',3306);

insert into mysql_servers(hostgroup_id,hostname,port) 
values(10,'192.168.100.24',3306);

load mysql servers to runtime;
save mysql servers to disk;

mysql_servers 表

字段

说明

hostgroup_id

该后端MySQL实例所在的主机组id

hostname

后端MySQL监听的地址

port

后端MySQL监听的端口

status

后端MySQL节点的状态,通过修改 status 字段,可以对后端服务器进行维护和故障恢复操作,而不会中断整个数据库服务:ONLINE:这是默认的状态,表示服务器在线并正常提供服务。OFFLINE_SOFT(或 OFFLINE SFT):表示服务器处于非强制下线状态。在这种状态下,服务器会继续处理当前的会话,但不再接受新的连接请求。OFFLINE_HARD(或 OFFLINE HDR):表示服务器处于强制下线状态。在这种状态下,服务器会立即关闭所有现有会话,并且不再接受新的连接请求。SHUNNED:表示后端服务器暂时停用,原因是在很短的时间内出现了太多的连接错误,或者复制延迟超过了允许的阈值。

weight

节点在组中的权重值越高,ProxySQL会发送越多请求给它们

compression

如果该字段的值设置为大于0,ProxySQL和该后端新建的连接中,ProxySQL将会先压缩数据再传输

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

该表的说明信息,可随便定义



监控后端节点

monitor模块监控的内容

  1. connect:ProxySQL连接到后端所有节点,成功/失败的连接会记录到表mysql_server_connect_log中
  2. ping:ProxySQL通过ping后端的节点来检测心跳,ping成功/失败的情况将记录到表mysql_server_ping_log中。当ping某节点的连续失败次数达到了mysql-monitor_ping_max_failures时表示失去心跳,将发送一个信号给MySQL_Hostgroups_Manager 来杀掉和该节点的所有连接。
  3. 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。
  4. read only:检查mysql_replication_hostgroups表中所有节点的read_only值,并记录到mysql_server_read_only_log。如果read_only=1,表示只读,是一个slave,这样的节点将移入reader_hostgroup中,如果read_only=0,表示可写,可能是master,这样的节点将会被移入writer_hostgroup中。

monitor模块相关日志表:

  1. mysql_server_connect_log;
  2. mysql_server_ping_log;
  3. mysql_server_replication_lag_log;
  4. mysql_server_read_only_log;

monitor模块相关变量

General variables

变量名

描述

mysql-monitor_username

用于监控后端mysql用户

mysql-monitor_password

用于监控后端mysql用户/密码

mysql-monitor_enabled

是否启用监控,可以临时禁用监控

Connect variables

变量名

描述

mysql-monitor_connect_interval

监控连接频率,单位毫秒

mysql-monitor_connect_timeout

连接超时,单位毫秒



Ping variables

变量名

描述

mysql-monitor_ping_interval

心跳监控频率,单位毫秒

mysql-monitor_ping_timeout

心跳超时,单位毫秒

mysql-monitor_ping_max_failures

如果连续mysql-monitor_ping_max_failures次ping失败,proxysql会关闭该节点的所有连接

值得注意的是,如果无法连接到后端,MySQL_Monitor 会首先尝试进行连接以发送 ping,因此检测到一个节点宕机的时间可能是以下两种情况之一:

  • 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

只读检测频率,单位毫秒

mysql-monitor_read_only_timeout

只读检测超时时间,单位毫秒

mysql-monitor_writer_is_also_reader

当一个节点将其 read_only 值从 1 变更为 0 时,该变量决定了该节点是否应该同时存在于两个主机组中:false :node will be moved into writer_hostgroup and removed from reader_hostgrouptrue : node will be copied into writer_hostgroup and stay also in reader_hostgroup

Replication lag variables

变量名

描述

mysql-monitor_replication_lag_interval

主从复制延时检测频率,单位毫秒

mysql-monitor_replication_lag_timeout

复制延时阈值,单位毫秒。目前这个变量并没有被实际执行



配置App用户

用户类型

说明

管理用户

1.默认端口60322.管理员用户:admin-admin_credentials 3.普通管理用户:admin-stats_credentials

监控用户

1.在后端mysql数据库上创建该用户2.所有后端mysql数据库使用统一用户名[mysql-monitor_username]及密码[mysql-monitor_password]3.用户只需USAGE权限即可监控connect、ping和read_only。监控replication lag需要replication client权限

应用用户

1.通过该用户,应用端可以通过proxysql将语句发送到后端mysql数据库上。2.使用默认端口60333.先在后端mysql数据库上创建用户,然后将该用户添加至proxysql的 mysql_users表中

添加用户

--在后端mysql数据库创建应用用户
root@(none)>grant all on *.* to testProxy@'192.168.2.%' identified by '123456';
root@(none)>flush privileges;

--在proxysql上配置mysql user
proxysql>INSERT INTO mysql_users(username,password,default_hostgroup) VALUES ('testProxy','123456',1);

proxysql>select * from mysql_users;

--使配置生效
proxysql>LOAD MYSQL USERS TO RUNTIME;
proxysql>SAVE MYSQL USERS TO DISK;

mysql_users表

字段

说明

username

用户名

password

密码

active

active=0的用户会保留在库中,但不会加载到runtime层中,只有active=1用户才是有效用户。缺省值1

use_ssl

use_ssl=1,强制用户启用SSL认证

default_hostgroup

用户发送的SQL未匹配到任何路由规则,则将SQL发送到default_hostgroup指定的默认组中

default_schema

建立连接时默认将切换到该schema

schema_locked

当前不支持该功能

transaction_persistent

如果为与ProxySQL连接的MySQL用户设置此选项,那么在一个主机组内开始事务时,其事务中的SQL将保留在该主机组中执行,不会受任何其他路由规则的影响。缺省值1。

fast_forward

如果设置了此选项,它将绕过查询处理层(重写、缓存),并直接将查询原样传递给后端服务器。

backend

如果设置为1,ProxySQL将可以使用该用户(username,password)连接到后端节点。缺省值1

frontend

如果设置为1,前端将可以使用该用户(username,password)连接到ProxySQL。缺省值1

max_connections

应用到ProxySQL的最大连接数。ProxySQL和某个后端节点的最大连接数量是通过mysql_servers中的max_connections控制

attributes

当前不支持该功能

comment

注释