青蛙学Linux—MySQL中间件ProxySQL

ProxySQL是一款高性能和高可用的MySQL中间件,Percona也推荐使用ProxySQL。它有以下优点:

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

ProxySQL的官方网站:https://proxysql.com/

1、安装ProxySQL

ProxySQL可以从官方提供的GitHub地址下载,也可以在Percona官网上下载。官方提供了源码、RPM包和DEB包的下载。

这里我们通过RPM包进行安装,下载最新版本2.0.1。

通过YUM安装依赖包:

[root@localhost apps]# yum install perl-DBD-mysql

安装ProxySQL:

[root@localhost apps]# rpm -ivh proxysql-2.0.1-1-centos7.x86_64.rpm

2、ProxySQL目录结构

通过RPM包安装的ProxySQL,其数据存储在/var/lib/proxysql目录下,静态配置文件为/etc/proxysql.cnf,启动脚本为/etc/init.d/proxysql

数据存储目录/var/lib/proxysql在安装完成后是不存在的,只有在ProxySQL启动后才会建立,在该目录下有以下三个文件重要文件:

  • proxysql.db:SQLite数据文件,ProxySQL的配置如账号、密码、路由等信息存储在该文件中
  • proxysql.log:ProxySQL的日志文件
  • proxysql.pid:ProxySQL的PID文件

ProxySQL的静态配置文件/etc/proxysql.cnf仅用于配置一些启动选项、SQLite数据目录等。ProxySQL只在第一次启动时读取该配置文件进行初始化,以后只读取proxysql.db。

3、ProxySQL的端口

ProxySQL在启动后,会启动一个管理端口和一个客户端端口。默认的管理端口为6032,账号密码均为admin,供管理ProxySQL使用,仅允许本地登录;默认客户端端口为6033,提供对后端DB的访问,账号密码通过管理端设置。

4、ProxySQL服务管理与连接ProxySQL管理端

使用以下命令可以启动|停止|重启动ProxySQL:

/etc/init.d/proxysql start|stop|restart

连接ProxySQL可以使用MySQL提供的连接工具mysql,执行以下命令:

[root@localhost bin]# ./mysql -h 127.0.0.1 -P 6032 -u admin -p

输入密码后即进入ProxySQL的交互式命令行界面:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.30 (ProxySQL Admin Module)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

5、ProxySQL的库表功能介绍

5.1、ProxySQL中的数据库

登录ProxySQL管理端后,执行show databases;可以看到ProxySQL中有以下几个数据库:

+-----+---------------+-------------------------------------+
| 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 |
+-----+---------------+-------------------------------------+
  • main:内存配置数据库,表里存放后端DB实例、用户验证、路由规则等信息。表名以runtime_开头的表示当前运行的配置,不能通过dml语句修改,只能修改对应的不以rumtime_开头的表,然后load使其生效,save使其保存到硬盘
  • disk:持久化到硬盘的配置,对应ProxySQL读取的SQLite数据文件/var/lib/proxysql/proxysql.db
  • stats:ProxySQL在运行时抓取的统计信息,包括后端命令执行的次数、流量、processlist、查询种类汇总/执行时间等
  • monitor:monitor模块收集的信息,主要是后端DB的健康状态、延迟检查
  • stats_history:统计信息的历史记录

5.2、main库中的常用表

  • global_variables:设置变量,包括监听的端口、管理账号等
  • mysql_replication_hostgroups:监视指定主机组中所有MySQL的read-only值,并根据read-only值将主机分配给写入器或读取器主机组;ProxySQL的monitor模块会监控所有组中MySQL的read-only值,如果发现read-only值发生改变,会自动改写mysql_servers表里的hostgroup关系,以达到自动Failover效果
  • mysql_servers:设置后端MySQL主机
  • mysql_user:设置后端MySQL的程序账号和监控账号
  • scheduler:ProxySQL的任务计划

5.3、stats库中的常用表

  • stats_mysql_commands_counters:统计各种SQL类型的执行次数和时间,通过参数mysql-commands_stats控制,默认为true
  • stats_mysql_connection_pool:后端MySQL的连接信息
  • stats_mysql_processlist:类似MySQL的show processlist命令,查看各线程的状态
  • stats_mysql_query_digest:统计各类SQL的执行次数、时间消耗等。通过变量mysql-query_digests控制,默认为true
  • tats_mysql_query_rules:路由命中次数统计

5.4、monitor库中的常用表

  • mysql_server_connect_log:对后端MySQL进行连接测试的日志
  • mysql_server_ping_log:存放使用mysql ping API ping后端MySQL以检测是否可用的日志
  • mysql_server_replication_lag_log:后端MySQL主从复制延迟的检测日志
posted @ 2019-01-30 15:19  青蛙学Linux  阅读(588)  评论(0编辑  收藏  举报