灵活强大的MySQL代理中间件ProxySQL应用实战(1)

一、常见的Mysql中间件介绍

很多人都会把中间件认为是读写分离,其实读写分离只是中间件可以提供的一种功能,最主要的功能还是在于他可以分库分表。下面介绍下常见的开源mysql中间件。

  • DBProxy是由美团点评公司技术工程部DBA团队(北京)开发维护的一个基于MySQL协议的数据中间层。它在奇虎360公司开源的Atlas基础上,修改了部分bug,并且添加了很多特性。
  • Atlas是由奇虎360公发的基于MySQL协议的数据库中间件产品,它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了若干Bug,并增加了很多功能特性。目前该产品在360内部得到了广泛应用。
  • Cobar是阿里巴巴B2B开发的关系型分布式系统,管理将近3000个MySQL实例。 在阿里经受住了考验,后面由于作者的走开的原因cobar没有人维护 了,阿里也开发了tddl替代cobar。
  • MyCAT是社区爱好者在阿里cobar基础上进行二次开发,解决了cobar当时存 在的一些问题,并且加入了许多新的功能在其中。目前MyCAT社区活跃度很高,目前已经有一些公司在使用MyCAT。总体来说支持度比较高,也会一直维护下去。
  • MySQL Route是现在MySQL 官方Oracle公司发布出来的一个中间件。

二、proxySQL简介

ProxySQL是一个高性能的、高可用性MySQL中间件,优点如下:

> 几乎所有的配置均可在线更改(其配置数据基于SQLite存储),无需重启proxysql
> 强大的规则路由引擎,支持读写分离、查询重写、sql流量镜像
> 详细的状态统计,相当于有了统一的查看sql性能和sql语句统计的入口
> 自动重连和重新执行机制,若一个请求在链接或执行过程中意外中断,proxysql会根据其内部机制重新执行该操作
> query cache功能:比mysql自带QC更灵活,可多维度控制哪类语句可以缓存
> 支持连接池(connection pool)。
> 支持分库、分表
> 支持负载均衡
> 自动下线后端DB,根据延迟超过阀值、ping 延迟超过阀值、网络不通或宕机都会自动下线节点。

下面重点介绍下ProxySQL的基础和应用案例。

三、proxySQL的下载与安装

1、下载proxySQL

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。下面将以此版本为主进行介绍。

2、安装proxySQL

proxySQL提供了源码包和rpm包两种安装方式,这里选择rpm方式进行安装,过程如下:
[[email protected] mysql]# yum install perl-DBD-mysql
[[email protected] mysql]# rpm -ivh proxysql-1.4.8-1-centos7.x86_64.rpm
这样,proxySQL就安装完成了。

3、proxySQL的目录结构

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,账号和密码可以通过管理接口去进行设置。

四、proxySQL库表功能介绍

1、库、表说明

首先启动proxysql ,执行如下命令:
[[email protected] app1]# /etc/init.d/proxysql start
Starting ProxySQL: DONE!
然后登录proxysql的管理端口6302,执行如下操作:

[[email protected] 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的健康、延迟检查。

下面依次介绍下每个库中常用的一些表的含义和功能。

2、main库

登录到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。

3、stats库

登录到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
路由命中次数统计。

4、monitor库

登录到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海量可视化日志分析系统,连载更新中,猛戳查看:
http://blog.51cto.com/cloumn/detail/14

原文地址:http://blog.51cto.com/ixdba/2156736

时间: 2024-10-20 06:28:44

灵活强大的MySQL代理中间件ProxySQL应用实战(1)的相关文章

灵活强大的MySQL代理中间件ProxySQL应用实战(2)

一.ProxySQL的运行机制 ProxySQL有一个完备的配置系统,配置ProxySQL是基于sql命令的方式完成的.ProxySQL支持配置修改之后的在线保存.应用,不需要重启即可生效.整个配置系统分三层设计.整个配置系统分为三层,如下图所示: 配置系统分为三层的目的有三个:(1).自动更新(2).尽可能的不重启proxysql就可以修改配置(3).方便回滚错误配置 每层的功能与含义如下: ? RUNTIME层 代表的是ProxySQL当前生效的正在使用的配置,包括global_variab

Mysql中间件Proxysql实现mysql主从架构读写分离

实验主机 Master: 192.168.0.17 Slave: 192.168.0.20 Proxysql:192.168.0.30建议关闭防火墙建立Master: 192.168.0.17与Slave: 192.168.0.20的MySQL主从复制架构 Proxysql:192.168.0.30主机上基于yum安装proxysql [[email protected] ~ 20:21:05]#cat <<EOF | tee /etc/yum.repos.d/proxysql.repo &g

MySQL开源中间件cetus

git地址:https://github.com/Lede-Inc/cetus/blob/master/doc/cetus-quick-try.md==介绍Cetus简介Cetus是由C语言开发的关系型数据库MySQL的中间件,主要提供了一个全面的数据库访问代理功能.Cetus连接方式与MySQL基本兼容,应用程序几乎不用修改即可通过Cetus访问数据库,实现了数据库层的水平扩展和高可用.主要功能特性Cetus分为读写分离和分库(分表是分库的一种特殊形式)两个版本.针对读写分离版本: 多进程无锁

MySQL读写分离(ProxySQL)

MySQL读写分离(ProxySQL) 读写分离原理 读写分离就是用户在发送请求时,请求经过中间件,中间件将请求中的读和写操作分辨出来将读请求发送给后端的从服务器,将写请求发送给后端的主服务器,再又主服务器通过主从复制将数据复制给其他从服务器 常见MySQL中间件 名称 公司 站点地址 mysql-proxy Oracle https://downloads.mysql.com/archives/proxy Atlas Qihoo https://github.com/Qihoo360/Atla

Navicat for MySQL Windows下强大的MySQL管理工具

作者:zhanhailiang 日期:2015-01-21 介绍 Navicat for MySQL[是一款强大的 MySQL 数据库管理和开发工具,它为专业开发者提供了一套强大的足够尖端的工具.Navicat for MySQL 基于Windows平台,为 MySQL 量身订作,提供类似于 phpMyAdmin 的用户管理界面工具. 使用说明 下载并安装,Navicat for MySQL: 连接数据库:  连接成功后即可对该DB做所有有权限的操作: 更多阅读 http://www.navic

【MySQL】【ProxySQL】浅析mysql_users表

[MySQL][ProxySQL]浅析mysql_users表 1.表定义与字段说明 表的DDL定义: CREATE TABLE mysql_users ( username VARCHAR NOT NULL, #用户名 password VARCHAR, #密码 active INT CHECK (active IN (0,1)) NOT NULL DEFAULT 1, #是否启用 use_ssl INT CHECK (use_ssl IN (0,1)) NOT NULL DEFAULT 0,

数据库中间件ProxySQL读写自动分离实践

参考文档 https://github.com/sysown/proxysql http://www.fordba.com/mysql_proxysql_rw_split.html https://www.cnblogs.com/zhoujinyi/p/6829983.html 腾讯云cdb可以提供主库VIP+只读从库VIP的形式,这样开发使用时需要维护2个VIP而且不能自动读写分离,基于现状计划使用proxysql结合clb及cdb来实现读写自动分离.架构如下:app--clb四层--prox

MySQL 5.7.17主从复制实战(一主多从)

MySQL 5.7.17主从复制实战(一主多从) 主从复制的原理: 分为同步复制和异步复制,实际复制架构中大部分为异步复制. 复制的基本过程如下: 1).Slave上面的IO进程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容: 2).Master接收到来自Slave的IO进程的请求后,通过负责复制的IO进程根据请求信息读取制定日志指定位置之后的日志信息,返回给Slave 的IO进程.返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master

企业中MySQL主流高可用架构实战三部曲之MHA

老张最近两天有些忙,一些老铁一直问,啥时更新博文,我可能做不到天天更新啊,但保证以后一有空就写一些干货知识分享给大家. 我们如果想要做好技术这项工作,一定要做到理论与实践先结合.我一个曾经被数据库虐得体无完肤的过来人给大家一些建议:就是只看书,背理论真的行不通,到时遇到棘手的问题,你还是一样抓瞎.一定要在理论理清的基础上多做实验. 给自己定个目标,3个月做够100-500个实验.然后整理在做实验过程中的各种报错,认真解读分析报错原理,做好笔记.最后再拿起书,重新阅读之前有些可能理解不了的理论知识