企业级mysql数据库集群----实现数据库的读写分离(mysql-proxy)

一、 背景

实现数据库的读写分离,有三种方式,mysql-proxy、Mycat、Amoeba
但是根据官网提供的是mysql-proxy,所以,今天了解mysql-proxy,至于其他两个,我们后续也要有所了解

二、读写分离的介绍和思路

读写分离适合于读特别多的场景,一台只写,一台只读,提高读的效率。
读写分离建立在两台机器上,并且这两台机器是做了主从复制的,主库只写,从库只读,从而实现的。
在这里插入图片描述

三、配置读写分离环境

我们所需要的在主机
|server1|主库 | 172.2510.1
|–|--|
| server2 |备库 |172.25.10.2
|server3|代理端 |172.25.10.3
|物理机|客户端(多个)|172.25.20.250

先配置server3代理端

在server3上面:搭建proxy代理服务器(实现客户端写在server1上面、客户端读server2上的数据)
步骤一:在server3代理端
mysql官网上下载mysql-proxy安装包,并解压
步骤二:为了方便起见,我们做软连接
在这里插入图片描述
步骤三:我们查看proxy的相关参数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
步骤四:每个服务都有自己相应的配置文件,所以需要新建配置文件目录,创建配置文件,并编辑相关内容

[mysql-proxy]
proxy-address=0.0.0.0:3306 ##mysql-proxy运行的端口
proxy-read-only-backend-addresses=172.25.10.2:3306 ##slave节点:只读
proxy-backend-addresses=172.25.10.1:3306 ##master节点:可读可写
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua ##lua脚本的路径
pid-file=/usr/local/mysql-proxy/log/mysql-proxy.pid 进程pid的位置
log-file=/usr/local/mysql-proxy/log/mysql-proxy.log ##日志位置
plugins=proxy
log-level=debug ##定义日志级别
keepalive=true ##mysql-proxy崩溃时尝试重启
daemon=true ##打入后台

在这里插入图片描述
步骤五:同样的,需要建立日志,当服务出错时,我们可以在自己的日志里面查看错误
步骤六:修改数据库发生读写分离时的最大和最小连接数
在这里插入图片描述
在这里插入图片描述
步骤七:启动mysql-proxy
在启动时会遇到错误,这是因为权限过大的缘故,我们更改权限即可

/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf
chmod 660 /usr/local/mysql-proxy/conf/mysql-proxy.conf修改配置文件的权限
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf
其实就编辑了一个配置文件和lua文件

在这里插入图片描述
步骤八:查看日志,查看我们的代理是否做好
在这里插入图片描述
server3配置成功

在server1和server2端进行配置

实验环境是基于gtid的主从复制模式
基于gtid的主从复制的配置

四、测试读写分离

步骤一:
主库上建立新用户并授权,创建数据库chen以及表,验证一下server1和server2的主从复制是否正常
在这里插入图片描述
在往主库所建的表里面添加值时,没有截图,但是不影响实验效果

insert into usertb values (‘user1’,‘123’);
insert into usertb values (‘user2’,‘456’);
insert into usertb values (‘user1’,‘789’);

步骤二:在备库上查看
在这里插入图片描述
步骤三:server3安装lsof
在这里插入图片描述
步骤四:在自己的物理端查看是否有mysql,如若没有,则需要下载。
在真机上第一次连接数据库代理server3
mysql -h 172.25.10.3 -ucc -pWestos+123
在这里插入图片描述
在server3上,lsof -i:3306
真机第二次连接数据库代理server3(也就是重新打开一个bash)
在这里插入图片描述
在server3上,lsof -i:3306
在这里插入图片描述
在真机上第三次连接数据库代理server3(也就是重新打开一个bash)
在这里插入图片描述
在server3上,lsof -i:3306
发现开始读写分离(用户多的时候),我们三次连接,就是三个用户,我们之前在配置文件里面设置了最少连接数)

在这里插入图片描述

步骤五:在真机1上面开始对数据库写,在主库和备库上查看
在这里插入图片描述
在这里插入图片描述
总结:server1(master)上能看到数据说明写操作是在master上
而slave可以查看到数据是因为server1(master)和server2(slave)是主从复制的关系
不能说明server2上可以进行写操作,为了更清楚的验证读写分离,我们做下面的实验

现在关闭slave节点之后,继续在客户端写,但是我们在备库里面不能查看到,只能在主库里面查看到。
在这里插入图片描述
在这里插入图片描述

真机读的是server2,server2只能读,不能写,因此看不到刚才写进去的东西,server1可以看到
实现了真机对server1的写,对server2的读

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值