赞
踩
业界比较知名的MySQL代理,由ProxySQL LLC公司开发并提供专业的服务支持,基于GPLv3开源协议进行发布,大部分配置项可动态变更。后端的MySQL实例可根据用途配置到不同的hostgroup中,由ProxySQL基于7层网络协议,将来源于APP的流量路由到对应的hostgroup内,从而实现负载均衡或者读写分离。目前ProxySQL 有官方版和 percona 版两种。percona版是在官方版的基础上修改的,添加了几个比较实用的工具。生产环境建议用官方版。
ProxySQL相关的网站
https://www.proxysql.com/ https://github.com/sysown/proxysql/wiki |
上图中展示了流量从客户端发出 → ProxySQL进行处理转发 → 后端处理 → ProxySQL的前端连接 → 返回客户端的基本流程。简单梳理下ProxySQL的核心功能如下图:
ProxySQL的配置有三层,且绝大部分参数均可以通过动态配置并热加载到运行层,并通过save命令保存到持久层。
RUNTIME层
runtime层是即时生效的;代表的是ProxySQL当前生效的配置,包括 global_variables, mysql_servers, mysql_users, mysql_query_rules。无法直接修改这里的配置,必须要从下一层load进来。
MEMORY层
memory层是保存在内存中,但不立即生效的,表示的是内存数据库,其实就是 main 库。通过管理接口修改的所有配置,都保存 在内存数据库(main)中。当 ProxySQL 重启或者崩溃时,这个内存数据库中的数据会丢失,所以需要 save 到 disk 库中(持久化)。 该层通常通过admin端口进来后,直接修改。
DISK层|CONFIG FILE层
disk层表示持久化层,持久存储的那份配置,一般在$(DATADIR)/proxysql.db,在重启的时候会从硬盘里加载。config file表示从配置文件中加载的。这里的 config file 就是传统的配置文件,默认为
/etc/proxysql.cnf 。 ProxySQL 启动时,主要是从 disk 库中读取配置加载到内存并最终加载到 runtime
生效,只有极少的几个特定配置内容是从 config file 中加载的,除非是第一次初始化 ProxySQL 运行环境
(或者disk库为空)。
在上面的多层配置系统图中,标注了[1]、[2]、[3]、[4]、[5]的序号。每个序号都有两个操作方向from/to,
其实只是所站角度不同而已。以下是各序号对应的操作:
Bash |
多层配置可参考https://proxysql.com/Documentation/configuring-proxySQL/
支持多种安装方式:
官网安装教程:https://www.proxysql.com/documentation/installing-proxysql/
以centos为例,配置ProxySQL源:
Bash |
安装ProxySQL:
Plain Text |
如果没有权限更改 tee: /etc/yum.repos.d/proxysql.repo: Permission denied ,可以考虑源码编译安装,也
可以考虑去git官网下载最新的二进制文件安装。
官网下载:Releases · sysown/proxysql · GitHub
Bash |
当 ProxySQL 启动后,将监听两个端口:
ProxySQL 的 admin 管理接口是一个使用 MySQL 协议的接口,所以,可以直接使用 mysql 客户端、 navicat 等工具去连接这个管理接口,其默认的用户名和密码均为 admin
安装操作系统安装依赖:
Bash |
下载源码编译
Bash |
ProxySQL Admin DB可通过标准MySQL客户端进行配置,是ProxySQL配置系统的核心,允许动态运行时重新配置ProxySQL管理和操作功能。
ProxySQL自身共有5个 库,分别为3个保存在内存中的库,和三个保存在磁盘的SQLite库。通过6032管理端口登入后,默认就是main库,所有的配置更改都必须在这个库中进行,disk存档库不会直接受到影响。接下使用 mysql 客户端去连接 ProxySQL 的管理接口:
Bash |
注意:
由于 ProxySQL 的配置全部保存在几个自带的库中,所以通过管理接口,可以非常方便地通过发送一 些SQL命令去修改 ProxySQL 的配置。 ProxySQL 会解析通过该接口发送的某些对ProxySQL 有效的 特定命令,并将其合理转换后发送给内嵌的 SQLite3 数据库引擎去运行 ProxySQL 的配置几乎都是通过管理接口来操作的,通过 Admin 管理接口,可以在线修改几乎所有的 配置并使其生效。只有两个变量的配置是必须重启 ProxySQL 才能生效的,它们是: mysql-threads 和 mysql-stacksize |
admin-admin_credentials
admin-admin_credentials 变量控制的是admin管理接口的管理员账户。默认的管理员账户和密码为admin:admin,但是这个默认的用户只能在本地使用。
如果想要远程连接到ProxySQL,例如用windows上的navicat连接Linux上的ProxySQL管理接口,必须自定义一个管理员账户。
Bash |
admin-stats_credentials
admin-stats_credentials 变量控制admin管理接口的普通用户,这个变量中的用户没有超级管理员权限,
只能查看monitor库和main库中关于统计的数据,其它库都是不可见的,且没有任何写权限。
默认的普通用户名和密码均为 stats ,与admin一样,它默认也只能用于本地登录,若想让人远程查看则要
添加查看的专有用户。
Bash |
admin-mysql_ifaces
admin-mysql_ifaces 变量指定admin接口的监听地址,格式为冒号分隔的hostname:port列表。默认监听
在 0.0.0.0:6032
注意,允许使用UNIX的domain socket进行监听,这样本主机内的应用程序就可以直接被处理。
例如:
SQL |
点击图片可查看完整电子表格
mysql_servers表
定义后端backends,如MySQL Server或者使用MySQL协议的其他实例,同一个hostgroup组中的backends具有相同的逻辑功能;
Bash |
mysql_users表
用于存储访问ProxySQL的相关用户,并最终连接到后端的MySQL上;
Bash |
需注意:
用户需要在后端MySQL实例中创建且能确保ProxySQL所在的机器IP已加白;
在mysql_users表中配置的用户不能再被用到mysql-monitor_username监控配置用户上;
mysql_replication_hostgroups表
定义使用异步同步 /半同步的传统主从复制中各个hostgroup的对应关系。
Bash |
mysql_query_rules表
定义路由策略和属性;
Bash |
其他配置表具体说明参考https://proxysql.com/documentation/main-runtime/#mysql_servers
作者简介
丁鹏,中国移动云能力中心数据库产品部分布式数据库高级开发工程师,负责云原生数据库海山(He3DB)分布式版架构设计,拥有丰富的数据库内核开发经验和实践知识。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。