当前位置:   article > 正文

mysql使用mysql-proxy实现读写分离_搭建mysql proxy读写分离

搭建mysql proxy读写分离

一、主从分离的原理

1.简介

对于很多大型网站(pv值百万、千万)来说,在所处理的业务中,其中有70%的业务是查询(select)相关的业务操作(新闻网站,插入一条新闻。查询操作),剩下的则是写(insert、update、delete,只要能对MySQL的数据造成更改的操作都叫写操作)操作。在使用负载均衡集群之后,可以很大程度的提升网站的整体性能,但是最终的数据处理的压力还是会落到MySQL数据库上,所有很有必要使用一些技术来提升MySQL的负载能力。(读写分离)

写专门交给写服务器处理(一般网站来说写是比较少的 读写比 4:1) 那么需要把读的任务分配多台服务器来完成的架构,就叫做读写分离。

2. 实现方式

第一种:php程序上自己做逻辑判断,写php代码的时候,自己在程序上做逻辑判读写匹配。select、insert、update、delete做正则匹配,根据结果选择写服务器(主服务器)。如果是select操作则选择读服务器(从服务器器) mysql_connect('读写的区分')

第二种:MySQL- Proxy是实现"读写分离(Read/Write Splitting)"的一个软件(MySQL官方提供 ,也叫中间件),基本的原理是让主数据库处理写操作(insert、update、delete),而从数据库处理查询操作(select)。而数据库的一致性则通过主从复制来实现。所以说主从复制是读写分离的基础。

注意:MySQL-proxy它能实现读写语句的区分主要依靠的是内部一个lua脚本(能实现读写语句的判断)。

注意:如果只在主服务器(写服务器)上完成数据的写操作话;这个时候从服务器上没有执行写操作,是没有数据的。这个时候需要使用另外一个技术来实现主从服务器的数据一致性,这个技术叫做 主从复制技术。所以说主从复制是读写分离的基础。

二、部署读写分离

在进行下面操作之前一定要配置好主从复制(gtid模式的主从复制),如何配置主从复制,详情查看下面的文章

https://blog.csdn.net/weixin_40543283/article/details/87911286

环境:

  • server1:master主机(172.25.1.1)
  • server2:slave主机(172.25.1.2)
  • server3:mysql-proxy调度机(172.25.1.3)
  • 真机:安装mariadb,用作测试
  • 软件:mysql-proxy ===>   点击下载

1.server3:

1)这里我使用lftp的方式将mysql-proxy的包下载到了server3,首先进行解压

  1. tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
  2. mv mysql-proxy-0.8.5-linux-el6-x86-64bit /usr/local/mysql-proxy
  3. cd /usr/local/mysql-proxy/
  4. mkdir conf logs ##新建存放设置和日志的文件夹

2)配置环境变量

  1. vim ~/.bash_profile ##修改第10行为
  2. PATH=$PATH:$HOME/bin:/usr/local/mysql-proxy/bin
  3. source ~/.bash_profile ##立即生效

3)然后修改mysql-proxy设置

  1. vim /usr/local/mysql-proxyconf/mysql-proxy.conf ##内容如下
  2. [mysql-proxy]
  3. user=root //运行mysql-proxy进程的用户
  4. proxy-address=0.0.0.0:3306 //监听本机所有地址的3306端口
  5. proxy-backend-addresses=172.25.1.1:3306 //backend主 注意addresses
  6. proxy-read-only-backend-addresses=172.25.1.2:3306 //backend从
  7. proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua//lua脚本地址
  8. log-file=/usr/local/mysql-proxy/logs/mysql-proxy //proxy日志路径
  9. log-level=debug //日志级别
  10. daemon=true //打入后台
  11. keepalive=true //在mysql-proxy崩溃时尝试重启

提升权限

chmod 660 conf/mysql-proxy.conf

4)修改lua脚本设置

  1. 38 if not proxy.global.config.rwsplit then
  2. 39 proxy.global.config.rwsplit = {
  3. 40 min_idle_connections = 1,
  4. 41 max_idle_connections = 2, ##最大链接两个, 超过则会读写分离
  5. 42 is_debug = false
  6. 43 }

修改了两个参数,最小连接数和最大连接数,修改后,mysql-proxy的调度机制就变成了,如果连接的客户端,超过两台,就会执行读写分离策略

5)然后启动mysql-server

  1. cd /usr/local/mysql-proxy
  2. mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf

显示上图红框的内容,即为开启成功

2.server1:

进行数据库授权

mysql> grant all on *.* to 'root'@'%' identified by 'Mysql1994.';

然后进行新建数据库操作,方便测试

三、测试

在server3上安装lsof,其可显示系统打开的文件

yum install lsof -y

在真机上打开第一个客户端

使用losf命令查看连接

如上图,看上去连接的是mysql-proxy调度机(server3),但其实数据指向时server1

当在真机打开第二个客户端时,使用lsof查看连接

如上图,看上去连接的是mysql-proxy调度机(server3),但其实数据依旧指向时server1

当在真机打开第三个客户端时,使用lsof查看连接

如上图,此次看上去连接的是mysql-proxy调度机(server3),但其实数据流向实际指向server2,但是server2是slave,不具备读写功能,而此时,我们试着往里面写入数据,如果可以成功写入,则证明是读写分离

1)读取

2)写入

在server1查看

如上图,我们成功的进行了数据的写入操作,说明了我们读取数据是在server2(slave),而写入数据是通过server1(master),所以可以证明实现了读写分离

ok~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/230629
推荐阅读
相关标签
  

闽ICP备14008679号