ProxySQL技术实践分享

一、ProxySQL基本介绍

1.1  前言

ProxySQL是 MySQL 的高性能、高可用性、协议感知代理。以下为结合主从复制对ProxySQL读写分离、黑白名单、路由规则等做些基本测试。

1.2 基本介绍

先简单介绍下ProxySQL及其功能和配置,主要包括:

  • 最基本的读/写分离,且方式有多种;

  • 可定制基于用户、基于schema、基于语句的规则对SQL语句进行路由,规则很灵活;

  • 动态加载配置,即绝大部分的配置可以在线修改,但有少部分参数还是需要重启来生效;

  • 可缓存查询结果。虽然缓存策略比较简陋,但实现了基本的缓存功能;

  • 过滤危险的SQL,增加防火墙等功能;

  • 提供连接池、日志记录、审计日志等功能;

1.2.1 请求流程

流量从客户端发出 → ProxySQL进行处理转发 → 后端处理 → ProxySQL的前端连接 → 返回客户端的基本流程

bdd733e5ef01b72ddfd234282784e118.png

1.2.2 核心功能

c928302c558e0c71f30b1d94bc685ecd.png

读写分离:可查询走从库,写入走主库

简单Sharding:ProxySQL的sharding是通过正则匹配来实现的,对于需要拆分SQL以及合并SQL执行结果的不能支持,所以写了简单sharding

连接池管理:常规功能,为了提高SQL执行效率。

多路复用:主要优化点在后端mysql连接的复用,对比smart client,中间层不仅对前端建连也会对后端建连,可自行控制后端连接的复用逻辑。

流量管控:kill连接和kill query;whitelist配置。

高可用:底层mysql,如果从库挂了,自动摘除流量;主库挂了暂不处理。proxysql自身高可用,提供cluster的功能,cluster内部会自行同步元数据以及配置变更信息。

查询缓存:对username+schema+query的key进行缓存,设置ttl过期,不适合写完就查的场景,因为在数据在未过期之前可能是脏数据。

动态配置:大部分的配置可动态变更,先load到runtime,在save到disk,通过cluster的功能同步到其他的节点。

流量镜像:同一份流量可以多出写入,但是并不保证mirror的流量一定成功。

SQL改写:在query rules中配置replace规则,可以对指定的SQL进行改写。

1.2.3 多层的配置系统

ProxySQL的配置有三层,且绝大部分参数均可以通过动态配置并热加载到运行层,并通过save命令保存到持久层。

2ed4884f73c88e6f55bb743542965a27.png

RUNTIME层

runtime层是即时生效的;表示当前生效的配置,该层的配置无法直接修改,必须要从下一层即MEMORY层load进来;

MEMORY层

memory层是保存在内存中,但不立即生效的;该层通常通过admin端口进来后,直接修改。

DISK层|CONFIG FILE层

disk层表示持久化层,config file表示从配置文件中加载的;

不同层的加载和保存

# 以修改mysql servers为例,以下为不同层之间的同步关系
## 将修改层的配置加载到运行层
load mysql servers to runtime;
## 将运行层的配置同步到修改层
save mysql servers to memroy;
## 将持久层的配置加载到memory层
load mysql servers to memory; 
## 将修改层的配置保存到持久层
save mysql servers to disk; 
## 从配置文件中将配置信息加载到修改层
load mysql servers from config;
1.2.4 第一次启动

配置文件

第一次启动时,会从proxysql.cnf配置文件中加载相关配置项来初始化memory和runtime层,并最终持久化到sqlite数据库中;如果想重新初始化proxysql,可以在启动时使用--initial选项来强制初始化proxysql,这会将sqlite数据库重置为最原始的状态,并在必须要时重命名sqlite的数据文件

持久层disk的配置

再次启动时,如果配置文件指定的datadir目录下sqlite数据文件存在,则会将sqlite中的配置项读取到内存,最终会加载到runtime层。此时不再读取proxysql.cnf配置文件的相关配置。

1.2.5 ProxySQL相关表配置

ProxySQL后端采用sqlite对配置进行存储,有以下几个库:

下列库中:main表示runtime运行层,disk表示持久化库,stats表示统计数据库,monitor存储监控相关表,stats_history表示统计历史库。

3306-Admin > show databases;
+-----+---------------+--------------------------------------------------+
| seq | name          | file                                             |
+-----+---------------+--------------------------------------------------+
| 0   | main          |                                                  |
| 2   | disk          | /var/lib/data/3306/proxysql.db                   |
| 3   | stats         |                                                  |
| 4   | monitor       |                                                  |
| 5   | stats_history | /var/lib/data/3306/proxysql_stats.db             |
+-----+---------------+--------------------------------------------------+
5 rows in set (0.00 sec)

global_variables表

全局配置表,用于存储admin接口、mysql接口、监控等相关参数的配置,其相关配置可以通过以下两种方式进行修改:

## 直接通过SQL修改表
3306-Admin > update global_variables set variable_value='xxx' where variable_name='xxx';
## 通过set方式
3306-Admin > set variable_name='xxx';

mysql_servers表

定义后端backends,如MySQL Server或者使用MySQL协议的其他实例,同一个hostgroup组中的backends具有相同的逻辑功能;

主要字段

hostgroup_id:指定后端MySQL所在的hostgroup_id组,同一个后端MySQL可以分属不同的组;

hostname,port: 指定后端MySQL的主机和端口;

status: 后端MySQL的状态,online表示在线提供服务,即正常状态;offline_soft表示非强制下线,即不再接受新的请求,但可以处理当前已建立的会话请求;offline_hard表示强制下线,即强制关闭当前的所有会话且不再接受新请求;shunned表示后端MySQL临时不可用,如因为连接数过多或者主从延迟超过设置的阈值等;

weight:backend的权重,权重越大,则同hostgroup中被选择的概率越大;

max_connections:设置ProxySQL能连接后端MySQL的最大连接;

max_replication_lag:设置后端MySQL允许的最大延迟时间;

mysql_users表

用于存储访问ProxySQL的相关用户,并最终连接到后端的MySQL上;

主要字段

username, password:连接ProxySQL来访问后端MySQL的用户名和密码。

需注意:

用户需要在后端MySQL实例中创建且能确保ProxySQL所在的机器IP已加白;

在mysql_users表中配置的用户不能再被用到mysql-monitor_username监控配置用户上;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ProxySQL MGR(ProxySQL Management Group Replication)是一种基于ProxySQL的高可用性、高性能、分布式数据库管理工具。它是ProxySQLMySQL Group Replication相结合的解决方案。 ProxySQL是一款开源的MySQL流量路由工具,它能够通过代理服务器的方式将客户端的请求路由到底层的MySQL服务器。它具备负载均衡、故障转移、查询缓存、重放日志等功能,能够大大提高MySQL的性能和可用性。 而MySQL Group Replication则是MySQL官方提供的一种主从复制解决方案,它通过一组MySQL服务器来提供高可靠的数据复制和故障切换能力。 结合ProxySQLMySQL Group Replication,就形成了ProxySQL MGR。它利用ProxySQL数据库流量进行管理和路由,同时借助MySQL Group Replication的高可用性和故障转移能力,实现了分布式数据库管理。 ProxySQL MGR的工作原理如下:当客户端发起请求时,请求会被发送到ProxySQLProxySQL会根据事先设定的规则将请求路由到适当的MySQL服务器。ProxySQL会监控MySQL Group Replication的状态,一旦主节点出现故障,ProxySQL会自动将请求路由到新的主节点上,实现了高可用性。 此外,ProxySQL还具备自动扩缩容、读写分离、连接池管理等功能,能够进一步提升数据库的性能和可扩展性。 总之,ProxySQL MGR是一个强大的分布式数据库管理工具,能够提供高可用性、高性能的数据库解决方案。它能够提高数据库的负载能力、可用性和可扩展性,是开发者和运维人员在构建大规模分布式数据库系统时的有力工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值