Centos7下安装ProxySQL实现Mysql5.7读写分离集群环境虚拟机下载

本博主配置好的Centos7下安装ProxySQL实现Mysql读写分离集群环境虚拟机下载,链接:https://pan.baidu.com/s/1ThGBrosAB0I7Bp4pIJhx2g
提取码:j26m 下载后,用Vmware workstaion打开,即可以使用

ProxySQL是一个高性能的MySQL中间件,拥有强大的规则引擎。ProxySQL是用C++语言开发的,也是percona推的一款中间件,虽然也是一个轻量级产品,但性能很好(据测试,能处理千亿级的数据),功能也足够,能满足中间件所需的绝大多数功能。

ProxySQL具备了很多优质特性,具体总结如下:
-> 连接池,而且是multiplexing
-> 主机和用户的最大连接数限制
-> 自动下线后端DB
 -> 延迟超过阀值
->  ping 延迟超过阀值
->  网络不通或宕机
-> 强大的规则路由引擎
-> 实现读写分离
-> 查询重写
-> sql流量镜像
-> 支持prepared statement
-> 支持Query Cache
-> 支持负载均衡,与gelera结合自动failover
-> 可定制基于用户、基于schema、基于语句的规则对SQL语句进行路由。换句话说,规则很灵活。基于schema和与语句级的规则,可以实现简单的sharding。
-> 可缓存查询结果。虽然ProxySQL的缓存策略比较简陋,但实现了基本的缓存功能,绝大多数时候也够用了。此外,作者已经打算实现更丰富的缓存策略。
-> 监控后端节点。ProxySQL可以监控后端节点的多个指标,包括:ProxySQL和后端的心跳信息,后端节点的read-only/read-write,slave和master的数据同步延迟性(replication lag)。

ProxySQL是一个能实实在在用在生产环境的MySQL中间件,可以实现读写分离,支持 Query 路由功能,支持动态指定某个 SQL 进行 cache,支持动态加载配置、故障切换和一些 SQL的过滤功能。还有一些同类产品比如 DBproxy、MyCAT、OneProxy 等。但经过反复对比和测试之后,还是觉得ProxySQL是一款性能不谙,靠谱稳定的MySQL 中间件产品 !

ProxySQL是灵活强大的MySQL代理层, 是一个能实实在在用在生产环境的MySQL中间件,可以实现读写分离,支持 Query 路由功能,支持动态指定某个 SQL 进行 cache,支持动态加载配置、故障切换和一些 SQL的过滤功能。还有一些同类产品比如 DBproxy、MyCAT、OneProxy 等。但经过反复对比和测试之后,还是觉得ProxySQL是一款性能不谙,靠谱稳定的MySQL 中间件产品 !

ProxySQL的亮点所在

–  几乎所有的配置均可在线更改(其配置数据基于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之流的连接池实现。

本博主配置好的Centos7下安装ProxySQL实现Mysql读写分离集群环境虚拟机下载,链接:https://pan.baidu.com/s/1ThGBrosAB0I7Bp4pIJhx2g
提取码:j26m 下载后,用Vmware workstaion打开,即可以使用

ProxySQL的特点

ProxySQL是一个高性能的MySQL中间件,拥有强大的规则引擎。具有以下特性:
–  连接池,而且是 multiplexing;
–  主机和用户的最大连接数限制;
–  自动下线后端DB;
–  延迟超过阀值
–  ping 延迟超过阀值
–  网络不通或宕机
–  强大的规则路由引擎;
–  实现读写分离
–  查询重写
–  sql流量镜像
–  支持prepared statement;
–  支持Query Cache;
–  支持负载均衡,与gelera结合自动failover;
–  将所有配置保存写入到SQLit表中。
–  支持动态加载配置,即一般可以在线修改配置,但有少部分参数还是需要重启来生效。
–  支持query cache。
–  支持对query的路由,可以针对某个语句进行分配去哪个实例执行。
–  不支持分表,可以分库,但是利用规则配置实现分表。

如上可知,ProxySQL集合了很多优秀特性于一身,那么它的缺点呢就是项目不够成熟,好在官方网站一直在及时更新,并且受到 Percona 官方的支持。

ProxySQL多层管理配置设计 (有三层配置)

–  runtime:运行中使用的配置文件
–  memory:提供用户动态修改配置文件
–  disk:将修改的配置保存到磁盘SQLit表中(即:proxysql.db)
–  config:一般不使用它(即:proxysql.cnf)

ProxySQL运行机制草图如下:
ProxySQL有一个完备的配置系统,配置ProxySQL是基于sql命令的方式完成的。ProxySQL支持配置修改之后的在线保存、应用,不需要重启即可生效。整个配置系统分三层设计。
整个配置系统分为三层,如下图所示:

ProxySQL配置系统分为三层的目的:
1) 自动更新;
2) 尽可能的不重启proxysql就可以修改配置;
3) 方便回滚错误配置;

简单说就是配置proxysql分为三个级别,RUNTIME是即时生效的,MEMORY是保存在内存中但并不立即生效的,DISK|CONFIG FILE是持久化或写在配置文件中的。

这三个级别的配置文件互不干扰,在某个层级修改了配置文件,想要加载或保存到另一个层级,需要额外的LOAD或SAVE操作:”LOAD xx_config FROM xx_level | LOAD xx_config TO xx_level | SAVE xx_config TO xx_level | SAVE xx_config FROM xx_level”,达到加载配置或者持久化配置的目的。这三层中每层的功能与含义如下:

本博主配置好的Centos7下安装ProxySQL实现Mysql读写分离集群环境虚拟机下载,链接:https://pan.baidu.com/s/1ThGBrosAB0I7Bp4pIJhx2g
提取码:j26m 下载后,用Vmware workstaion打开,即可以使用
–  RUNTIME层
代表的是ProxySQL当前生效的配置,包括 global_variables, mysql_servers, mysql_users, mysql_query_rules。无法直接修改这里的配置,必须要从下一层load进来。该层级的配置时在proxysql管理库(sqlite)的main库中以runtime_开头的表,这些表的数据库无法直接修改,只能从其他层级加载;该层代表的是ProxySQL当前生效的正在使用的配置,包括global_variables, mysql_servers, mysql_users, mysql_query_rules表。无法直接修改这里的配置,必须要从下一层load进来。也就是说RUNTIME这个顶级层,是proxysql运行过程中实际使用的那一份配置,这一份配置会直接影响到生产环境的,所以要将配置加载进RUNTIME层时需要三思而行。

–  MEMORY层
是平时在mysql命令行修改的 main 里头配置,可以认为是SQLite数据库在内存的镜像。该层级的配置在main库中以mysql_开头的表以及global_variables表,这些表的数据可以直接修改;用户可以通过MySQL客户端连接到此接口(admin接口),然后可以在mysql命令行查询不同的表和数据库,并修改各种配置,可以认为是SQLite数据库在内存的镜像。也就是说MEMORY这个中间层,上面接着生产环境层RUNTIME,下面接着持久化层DISK和CONFIG FILE。MEMORY层是我们修改proxysql的唯一正常入口。一般来说在修改一个配置时,首先修改Memory层,确认无误后再接入RUNTIME层,最后持久化到DISK和CONFIG FILE层。也就是说memeory层里面的配置随便改,不影响生产,也不影响磁盘中保存的数据。通过admin接口可以修改mysql_servers、mysql_users、mysql_query_rules、global_variables等表的数据。

–  DISK|CONFIG FILR层
持久存储的那份配置,一般在$(DATADIR)/proxysql.db,在重启的时候会从硬盘里加载。 /etc/proxysql.cnf文件只在第一次初始化的时候用到,完了后,如果要修改监听端口,还是需要在管理命令行里修改,再 save 到硬盘。该层级的配置在磁盘上的sqlite库或配置文件里。DISK/CONFIG FILE层表示持久存储的那份配置,持久层对应的磁盘文件是$(DATADIR)/proxysql.db,在重启ProxySQL的时候,会从proxysql.db文件中加载信息。而 /etc/proxysql.cnf文件只在第一次初始化的时候使用,之后如果要修改配置,就需要在管理端口的SQL命令行里进行修改,然后再save到硬盘。 也就是说DISK和CONFIG FILE这一层是持久化层,我们做的任何配置更改,如果不持久化下来,重启后,配置都将丢失。

                                      需要注意                                       
1) ProxySQL每一个配置项在三层中都存在,但是这三层是互相独立的,也就是说proxysql可以同时拥有三份配置,每层都是独立的,可能三份配置都不一样,也可能三份都一样。
2) RUNTIME层代表 ProxySQL 当前生效的正在使用的配置,无法直接修改这里的配置,必须要从下一层 “load” 进来。
3) MEMORY这一层上面连接 RUNTIME 层,下面连接持久化层。在这层可以正常操作 ProxySQL 配置,随便修改,不会影响生产环境。修改一个配置一般都是先在 MEMORY 层完成,然后确认正常之后再加载到 RUNTIME 和持久化到磁盘上。
4) DISK 和 CONFIG FILE层持久化配置信息,重启后内存中的配置信息会丢失,所以需要将配置信息保留在磁盘中。重启时,可以从磁盘快速加载回来。

ProxySQL配置文件的修改流程一般是:
– 启动时:先修改必要的CONFIG FILE配置,比如管理端口,然后启动;
– 其他配置:修改MEMORY中的表,然后加载到RUNTIME并持久化。

ProxySQL具有一个复杂但易于使用的配置系统,可以满足以下需求:
–  允许轻松动态更新配置(这是为了让ProxySQL用户可以在需要零宕机时间配置的大型基础架构中使用它)。与MySQL兼容的管理界面可用于此目的。
–  允许尽可能多的配置项目动态修改,而不需要重新启动ProxySQL进程
–  可以毫不费力地回滚无效配置
–  这是通过多级配置系统实现的,其中设置从运行时移到内存,并根据需要持久保存到磁盘。

一般,修改的配置都是在memory层。可以load到runtime,使配置在不用重启proxysql的情况下也可以生效,也可以save到disk,将对配置的修改持久化!

本博主配置好的Centos7下安装ProxySQL实现Mysql读写分离集群环境虚拟机下载,链接:https://pan.baidu.com/s/1ThGBrosAB0I7Bp4pIJhx2g
提取码:j26m 下载后,用Vmware workstaion打开,即可以使用

 

以下文章点击率最高

Loading…

     

如果这文章对你有帮助,请扫左上角微信支付-支付宝,给于打赏,以助博客运营

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注