利用MySQL读写分离,提升应用数据吞吐性能-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

利用MySQL读写分离,提升应用数据吞吐性能

chenchuan 2018-08-31 19:45:12 862

背景

一般情况下,对数据库的读和写都在同一个数据库服务器中操作时,业务系统性能会降低。为了提升业务系统性能,优化用户体验,可以通过读写分离来减轻主数据库的负载。本篇文章分别从应用层和系统层来介绍读写分离的实现方法。

应用层实现方法:

应用层中直接使用代码实现,在进入Service之前,使用AOP来做出判断,是使用写库还是读库,判断依据可以根据方法名判断,比如说以query、find、get等开头的就走读库,其他的走写库。

优点:

1、多数据源切换方便,由程序自动完成。

2、不需要引入中间件。

3、理论上支持任何数据库。

缺点:

1、由程序员完成,运维参与不到。

2、不能做到动态增加数据源。

系统层实现方法:

方式一:使用DRDS实现

https://help.aliyun.com/document_detail/29681.html

方式二:使用中间件MySQL-proxy实现

本教程使用MySQL-proxy实现读写分离。

MySQL-proxy介绍:

MySQL Proxy是一个处于Client端和MySQL server端之间的简单程序,它可以监测、分析或改变它们的通信。它使用灵活,没有限制,常见的用途包括:负载平衡,故障、查询分析,查询过滤和修改等等。

MySQL-proxy原理:

1

MySQL Proxy是一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多个proxy的连接参数即可。

优点:

1、源程序不需要做任何改动就可以实现读写分离。

2、动态添加数据源不需要重启程序。

缺点:

1、程序依赖于中间件,会导致切换数据库变得困难。

2、由中间件做了中转代理,性能有所下降。

操作步骤

环境说明:

主库IP:121.40.18.26

从库IP:101.37.36.20

MySQL-proxy代理IP:116.62.101.76

前期准备:

1、新建3台ECS,并安装mysql。

2、搭建主从,必须保证主从数据库数据一致。

主环境

1.修改mysql配置文件。

 
  1. vim /etc/my.cnf
  2. [mysqld]
  3. server-id=202 #设置服务器唯一的id,默认是1
  4. log-bin=mysql-bin # 启用二进制日志
从环境
 
  1. [mysqld]
  2. server-id=203

2.重启主从服务器中的MySQL服务。

 
  1. /etc/init.d/mysqld restart

3.在主服务器上建立帐户并授权slave。

 
  1. mysql -uroot -p95c7586783
  2. grant replication slave on *.* to 'syncms'@'填写slave-IP' identified by '123456';
  3. flush privileges;

4.查看主数据库状态。

 
  1. mysql> show master status;

2

5.配置从数据库。

 
  1. change master to master_host='填写master-IP', master_user='syncms', master_password='123456', master_log_file='mysql-bin.000005', master_log_pos=602;


SQL 移动开发 JSON 负载均衡 关系型数据库 MySQL 中间件 数据库 开发工具 数据格式
分享到
取消 提交回答
全部回答(0)
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

推荐文章
相似问题
推荐课程