mysql proxy_ProxySQL--灵活强大的MySQL代理层

本文是我在学习和验证ProxySQL的过程中,从初识(对其机制猜想或凭几次命令的结果臆断其原理),到逐渐深入(模拟各种场景测试、抓包分析、与作者交流)过程中的思路和方法和结论的记录。

笔者初识proxysql的时候是1.2.1版本,现在几经演进,已经到了1.4.1版本,本文也几经修改,力求跟得上软件的最新进度。

一、亮点

几乎所有的配置均可在线更改(其配置数据基于SQLite存储),无需重启proxysql

基于正则和client_addr的强大和灵活的路由规则

详细的状态统计,统计结果和pt-query-digest对慢日志的分析结果类似,相当于有了统一的查看sql性能和sql语句统计的入口(Designed by a DBA for DBAs)

自动重连和重新执行机制(auto-reconnect and automatic re-execution of queries using it's Connections Pool

):若一个请求在链接或执行过程中意外中断,proxysql会根据其内部机制重新执行该操作

query cache功能:比mysql自带QC更灵活,可在mysql_query_rules表中依据digest,match_pattern,client_addr等维度控制哪类语句可以缓存

支持连接池(connection pool)并且支持multiplexing,区别于atlas之流的连接池实现。文中有详细对比说明

二、安装

rpm包下载地址

Installing from source

Make sure you have installed the equivalent for each of these packages for your operating system:

automake

bzip2

cmake

make

gcc #>4.4版本

gcc-c++

git

openssl

openssl-devel

patch

Go to the directory where you cloned the repo (or unpacked the tarball) and run:

make

sudo make install

Compilation time should be around a couple of minutes for the first time around. The configuration file will be found at /etc/proxysql.cnf afterwards.

在make这一步遇到了错误:

g++ -fPIC -c -o obj/ProxySQL_GloVars.oo ProxySQL_GloVars.cpp -std=c++11 -I../include -I../deps/jemalloc/jemalloc/include/jemalloc -I../deps/mariadb-client-library/mariadb_client/include -I../deps/libconfig/libconfig-1.4.9/lib -I../deps/re2/re2 -I../deps/sqlite3/sqlite3 -O2 -ggdb -Wall

cc1plus: 错误:无法识别的命令行选项“-std=c++11”

make[1]: *** [obj/ProxySQL_GloVars.oo] 错误 1

make[1]: Leaving directory `/usr/local/src/proxysql-master/lib'

make: *** [build_lib] 错误 2

网查是由于gcc版本低导致,centos 6的yum源(以及epel源)都只能获取到4.4.7版本

包 gcc-4.4.7-17.el6.x86_64 已安装并且是最新版本

包 gcc-c++-4.4.7-17.el6.x86_64 已安装并且是最新版本

而centos7上为4.8版本

换到centos7上,将上述软件安装/更新之后,make步骤完成,但是make install步骤又出了问题:

install -m 0755 src/proxysql /usr/local/bin

install -m 0600 etc/proxysql.cnf /etc

install -m 0755 etc/init.d/proxysql /etc/init.d

if [ ! -d /var/lib/proxysql ]; then mkdir /var/lib/proxysql ; fi

update-rc.d proxysql defaults

make: update-rc.d:命令未找到

make: *** [install] 错误 127

update-rc.d是ubuntu的自启动脚本管理软件,未成功安装不影响使用。

安装完成后,自动在/etc/init.d/proxysql增加服务管理脚本(需要把/usr/local/bin/加入\$PATH或者软链至 \$PATH目录下,脚本中直接用到proxysql命令)

三、配置

配置文件/etc/proxysql.cnf和配置数据库文件/var/lib/proxysql/proxysql.db,如果存在 “proxysql.db”文件,则启动过程不解析proxysql.cnf文件;配置文件只在第一次启动的时候读取

官方推荐用admin interface方式

登陆admin interface:

mysql -uadmin -padmin -P6032 -h127.0.0.1

登陆成功后,可通过对main库(默认登陆后即在此库)的global_variables表中的

admin-admin_credentials

admin-mysql_ifaces

两个变量进行更改来修改登录认证

注意:admin interface对配置的存储是基于SQLite的,SQLite支持标准的SQL语法,与mysql也基本兼容。但是无法用use语句切换数据库,作者对use语句做了兼容(不报错),但是却没有实际效果。

配置后端DB server:

两种方式,区别在于:

1. 一种是在往mysql_servers表中添加server时就为其划分好hostgroup_id(例如0表示写组,1表示读组)

2. 另一种往mysql_servers表中添加server时不区分hostgroup_id(例如全部设为0),然后通过mysql_replication_hostgroups表中的值,根据proxysql检测到的各server的read_only变量值来自动为后端server设置hostgroup_id

这里强烈推荐用第一种方式:

因为第一种是完全由我们控制的;而第二种假如我们误将读server的read_only属性设置为0,则proxysql会将其重新分配到写组,这绝对是不期望的。

四、功能测试

实验环境

MySQL [(none)]> select * from mysql_servers;

+--------------+--------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+

| hostgroup_id | hostname | port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment |

+--------------+--------------+------+--------+--------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值