不少人都会把中间件认为是读写分离,其实读写分离只是中间件能够提供的一种功能,最主要的功能仍是在于他能够分库分表。下面介绍下常见的开源mysql中间件。mysql
ProxySQL是一个高性能的、高可用性MySQL中间件,优势以下:linux
> 几乎全部的配置都可在线更改(其配置数据基于SQLite存储),无需重启proxysql > 强大的规则路由引擎,支持读写分离、查询重写、sql流量镜像 > 详细的状态统计,至关于有了统一的查看sql性能和sql语句统计的入口 > 自动重连和从新执行机制,若一个请求在连接或执行过程当中意外中断,proxysql会根据其内部机制从新执行该操做 > query cache功能:比mysql自带QC更灵活,可多维度控制哪类语句能够缓存 > 支持链接池(connection pool)。 > 支持分库、分表 > 支持负载均衡 > 自动下线后端DB,根据延迟超过阀值、ping 延迟超过阀值、网络不通或宕机都会自动下线节点。
下面重点介绍下ProxySQL的基础和应用案例。git
proxySQL的官网是http://www.proxysql.com/ ,能够从官网提供的github下载proxySQL软件,地址为:https://github.com/sysown/proxysql/releases, 也能够在percona站点进行下载,下载地址为:https://www.percona.com/downloads/proxysql/。
目前最新的proxySQL版本是proxysql-1.4.8。下面将以此版本为主进行介绍。github
proxySQL提供了源码包和rpm包两种安装方式,这里选择rpm方式进行安装,过程以下:
[root@proxysql mysql]# yum install perl-DBD-mysql
[root@proxysql mysql]# rpm -ivh proxysql-1.4.8-1-centos7.x86_64.rpm
这样,proxySQL就安装完成了。sql
ProxySQL安装好的数据目录在/var/lib/proxysql/,配置文件目录是/etc/proxysql.cnf。启动脚本是/etc/init.d/proxysql。启动proxysql以后,在/var/lib/proxysql/下面能够看到以下文件:数据库
proxysql.db:此文件是SQLITE的数据文件,proxysql配置,如后端数据库的帐号、密码、路由等存储在这个数据库里面。 proxysql.log:此文件是日志文件。 proxysql.pid:此文件是是进程pid文件。
须要注意的是:proxysql.cnf是ProxySQL的一些静态配置项,用来配置一些启动选项,sqlite的数据目录等等。此配置文件只在第一次启动的时候读取进行初始化,后面只读取proxysql.db文件。后端
ProxySQL在启动后,会启动管理端口和客户端端口,能够在配置文件/etc/proxysql.cnf中看到管理和客户端的端口信息,默认管理的端口是6032,帐号和密码都是admin,后面能够动态修改,而且管理端口只能经过本地链接;客户端默认端口是6033,帐号和密码能够经过管理接口去进行设置。centos
首先启动proxysql ,执行以下命令:
[root@proxysql app1]# /etc/init.d/proxysql start
Starting ProxySQL: DONE!
而后登陆proxysql的管理端口6302,执行以下操做:缓存
[root@proxysql app1]# mysql -uadmin -padmin -h127.0.0.1 -P6032 MySQL [(none)]> show databases; +-----+---------------+-------------------------------------+ | seq | name | file | +-----+---------------+-------------------------------------+ | 0 | main | | | 2 | disk | /var/lib/proxysql/proxysql.db | | 3 | stats | | | 4 | monitor | | | 5 | stats_history | /var/lib/proxysql/proxysql_stats.db | +-----+---------------+-------------------------------------+ 5 rows in set (0.00 sec)
proxySQL默认有五个数据库,对每一个库的功能介绍以下:服务器
* main库:内存配置数据库,表里存放后端db实例、用户验证、路由规则等信息。表名以 runtime_开头的表示proxysql当前运行的配置内容,不能经过dml语句修改,只能修改对应的不以 runtime_ 开头的(在内存)里的表,而后LOAD使其生效, SAVE使其存到硬盘以供下次重启加载。 * disk库:是持久化到硬盘的配置库,对应/var/lib/proxysql/proxysql.db文件,也就是sqlite的数据文件。 * stats库:是proxysql运行抓取的统计信息库,包括到后端各命令的执行次数、流量、processlist、查询种类汇总/执行时间等等。 * monitor库:存储monitor模块收集的信息,主要是对后端db的健康、延迟检查。
下面依次介绍下每一个库中经常使用的一些表的含义和功能。
登陆到proxySQL的管理端口,而后经过以下命令可查看main库里面的表,操做以下:
MySQL [(none)]> show tables from main;
经常使用的几个表介绍以下:
global_variables 设置变量,包括监听的端口、管理帐号等。 mysql_replication_hostgroups: 监视指定主机组中全部服务器的read_only值,而且根据read_only的值将服务器分配给写入器或读取器主机组。ProxySQL monitor模块会监控hostgroups后端全部servers 的read_only 变量,若是发现从库的read_only变为0、主库变为1,则认为角色互换了,自动改写mysql_servers表里面 hostgroup关系,达到自动 Failover 效果。 mysql_servers 设置后端MySQL的表 mysql_users 配置后端数据库的程序帐号和监控帐号。 scheduler 调度器是一个相似于cron的实现,集成在ProxySQL中,具备毫秒的粒度。经过脚本检测来设置ProxySQL。
登陆到proxySQL的管理端口,而后经过以下命令可查看stats库里面的表,操做以下:
MySQL [(none)]> show tables from stats;
经常使用的几个表介绍以下:
stats_mysql_commands_counters 统计各类SQL类型的执行次数和时间,经过参数mysql-commands_stats控制开关,默认是ture。 stats_mysql_connection_pool 链接后端MySQL的链接信息。 stats_mysql_processlist 相似MySQL的show processlist的命令,查看各线程的状态。 stats_mysql_query_digest 表示SQL的执行次数、时间消耗等。经过变量mysql-query_digests控制开关,默认是开。 stats_mysql_query_rules 路由命中次数统计。
登陆到proxySQL的管理端口,而后经过以下命令可查看monitor库里面的表,操做以下:
MySQL [(none)]> show tables from monitor;
经常使用的几个表介绍以下:
mysql_server_connect_log 链接到全部MySQL服务器以检查它们是否可用,该表用来存放检测链接的日志。 mysql_server_ping_log 使用mysql_ping API ping后端MySQL服务器,检查它们是否可用,该表用来存放ping的日志。 mysql_server_replication_lag_log 后端MySQL服务主从延迟的检测。
以为不过瘾,后续还有一些列文章在等着呢:
原新浪网、阿里云(原万网)系统架构师,Linux畅销书《按部就班linux》做者、51CTO博客博客专家博主、51CTO特级讲师,个人最新专栏: 轻松玩转ELK海量可视化日志分析系统,连载更新中,猛戳查看:
《轻松玩转ELK海量可视化日志分析系统》