评论

收藏

[MySQL] ProxySQL!像C罗一样的强大!

数据库 数据库 发布于:2021-07-03 21:34 | 阅读数:607 | 评论:0

  各位兄弟们,时隔多日老张又与大家见面啦。每次与大家见面,都会有好消息告诉大家,这次也不例外。前段时间出版了《MySQL王者晋级之路》一书,反响还不错。争取今年再出版一本MongoDB运维实战的书籍,供给那些想要学习NoSQL的同学们作为工作中的参考。
  现在正赶上世界杯,老张最喜欢的球队是葡萄牙——最爱C罗,喜欢他那种在比赛中好强不服输的精神。我们做技术也是一样,不要因为一点困难,就放弃了当初的梦想。只有不断努力,提升自己,才能在更好的平台上实现自我价值。
  今儿,老张给大家介绍一款MySQL的一款中间件的产品——ProxySQL,它是灵活强大的MySQL代理层。像C罗一样的强大,可以实现读写分离,支持Query路由功能,支持动态指定某个SQL进行cache,支持动态加载配置、故障切换和一些SQL的过滤功能。还有一些同类产品比如DBproxy、MyCAT、OneProxy等。但经过反复对比和测试之后,决定给大家介绍一款性能不谙的MySQL中间件产品ProxySQL。
  有关ProxySQL更多的详细信息可访问:
  https://github.com/sysown/proxysql/wiki。
  接下来通过实战来全面了解一下ProxySQL的特性和使用场景,先介绍一下环境,我们的系统是CentOS6.7,MySQL版本是5.7.14,准备一主两从架构来配合ProxySQL。
环境配置:
192.168.56.100  Master(node1)  server-id:3306100
192.168.56.101  Slave1(node2)  server-id:3306101
192.168.56.102  Slave2(node3)  server-id:3306102
192.168.56.103  Proxysql中间件  server-id:3306103
  注:两个从库都要开启read_only=on。
  实验架构:

DSC0000.png
DSC0001.png
  管理员登录命令:
/usr/local/mysql/bin/mysql -uadmin -padmin -h 127.0.0.1 -P 6032
DSC0002.png
  库下的主要表:
  mysql_servers—后端可以连接MySQL服务器的列表。
  mysql_users—配置后端数据库的账号和监控的账号。
  mysql_query_rules—指定Query路由到后端不同服务器的规则列表。
注:表名以runtime_开头的表示ProxySQL当前运行的配置内容,不能通过DML语句修改。只能修改对应的不以 runtime开头的表,然后“LOAD”使其生效,“SAVE”使其存到硬盘以供下次重启加载。  disk库—持久化磁盘的配置。
  stats库—统计信息的汇总。
  monitor库—一些监控的收集信息,包括数据库的健康状态等。
配置ProxySQL监控  首先在master(192.168.56.100)上创建ProxySQL的监控账户和对外访问账户并赋予权限。
  命令如下:
create user 'monitor'@'192.168.56.%' identified by 'monitor';
grant all privileges on *.* to 'monitor'@'192.168.56.%' with grant option;
create user 'zs'@'192.168.56.%' identified by 'zs';
grant all privileges on *.* to 'zs'@'192.168.56.%' with grant option;
flush privileges;
  ProxySQL的多层配置系统
  ProxySQL有一套很完整的配置系统,方便DBA对线上的操作。整套配置系统分为三层,最顶层为RUNTIME,中间层为MEMORY和最底层,也就是持久层的DISK和CONFIG FILE。
  配置结构:

  
DSC0003.png
  加载完成之后,三台机器都是ONLINE状态。
接下来继续为ProxySQL配置监控账号,命令如下:
set mysql-monitor_username='monitor';
set mysql-monitor_password='monitor';
load mysql variables to runtime;
save mysql variables to disk;
  之后验证监控信息:

DSC0004.png
  监控信息都已正常,没有任何报错。
配置ProxySQL主从分组信息  这里会用到一张表mysql_replication_hostgroups:

  
DSC0005.png
  ProxySQL会根据server的read_only的取值将服务器进行分组。read_only=0的server,master被分到编号为10的写组,read_only=1的server,slave则被分到编号为20的读组。

DSC0006.png
DSC0007.png
  然后再登录管理端口,通过查询stats_mysql_query_digest这张表来监控查询状态,命令如下:
  select  from stats_mysql_query_digest;

DSC0008.png

  
DSC0009.png

  
DSC00010.png
`  作为苦逼DBA的我们,无论是初学者还是已经从业多年的“老司机”,都不要急于去把每个MySQL集群架构搭建出来。在学习的过程中,一些同学总是存在一个误区,就是觉得我会搭建所有的数据库架构就非常厉害了。其实并不是这样的,架构搭建并不是我们的最终目的,作为DBA要先了解清楚自己公司的现有业务,看看公司的业务场景适合什么样的架构,要做好相应的数据库架构设计。了解好该架构的优缺点,以及在今后应用中可能出现的问题,提前做好能解决问题的预案。知己知彼,注重细节,才能避免没日没夜地加班熬夜处理那些不该发生的问题。
  下面总结了五条MySQL架构设计中的经验。
  (1)根据公司现有业务设计合理架构。
  (2)选择成熟的架构方案。
  (3)因地制宜,根据实际设备情况做出选择。
  (4)考虑方案的可行性。
  (5)越简单越好,越适合公司越好。
  老张我就希望写任何东西,都可以给大家一些启示。在工作中,可以帮助到各位就够了!技术需要分享,我们一起努力工作,让家人过得更好!
  最后说句题外话,老张近期应邀在51CTO博客上线专栏《练一套正宗的MySQL降龙十八掌》,大家感兴趣可以戳链接了解一下。
关注下面的标签,发现更多相似文章