视频:《MySQL ProxySQL 管理实战》
配置后端节点过程综述:
- 部署MySQL主从集群及proxysql服务;
- 配置主机组 -- mysql_replication_hostgroups;
- 将后端MySQL节点加入proxySQL中 -- mysql_servers;
- 监控后端节点;
- 配置App用户 --mysql_users;
- 配置路由规则
配置读写组
--查看当前主机组状态
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节点的状态,通过修改 |
weight | 节点在组中的权重值越高,ProxySQL会发送越多请求给它们 |
compression | 如果该字段的值设置为大于0,ProxySQL和该后端新建的连接中,ProxySQL将会先压缩数据再传输 |
max_connections | 同该后端允许建立的最大连接数。默认值为1000,表示每个后端最多能同时接受1000个连接。请确保该后端的 |
max_replication_lag | 如果值大于0,ProxySQL的Monitor模块将会定期检查该slave的复制是否延后于master,如果延迟的值大于该字段的值,ProxySQL将会暂时避开该节点,直到该slave赶上master。 |
use_ssl | 如果设置为1,则和该后端MySQL建立SSL连接 |
max_latency_ms | Monitory模块定期向该后端发起ping检查,如果该节点的ping时间大于该字段的值,则将其排除在连接池之外(尽管该节点仍处于ONLINE状态) |
comment | 该表的说明信息,可随便定义 |
[参考] https://github.com/sysown/proxysql/issues/1817
监控后端节点
monitor模块监控的内容
- connect:ProxySQL连接到后端所有节点,成功/失败的连接会记录到表mysql_server_connect_log中
- ping:ProxySQL通过ping后端的节点来检测心跳,ping成功/失败的情况将记录到表
mysql_server_ping_log
中。当ping某节点的连续失败次数达到了mysql-monitor_ping_max_failures
时表示失去心跳,将发送一个信号给MySQL_Hostgroups_Manager 来杀掉和该节点的所有连接。 - 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。
- 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模块相关日志表:
- mysql_server_connect_log;
- mysql_server_ping_log;
- mysql_server_replication_lag_log;
- 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 | 当一个节点将其 |
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.用户只需 |
应用用户 | 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 |
|
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和某个后端节点的最大连接数量是通过 |
attributes | 当前不支持该功能 |
comment | 注释 |