0
点赞
收藏
分享

微信扫一扫

Mysql进阶之Mysql-proxy的读写分离

编程练习生J 2022-03-16 阅读 65

Mysql-proxy简介:

mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等

MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,
从而实现读写分离和负载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。

在这里插入图片描述

当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多 个proxy的连接参数即可。

从图中可以看到,SQL语句并不直接进入到master数据库或者slave数据库,而是进入到 proxy,然后proxy判断这条语句是有关写的语句(包括insert、update、delete)还 是读语句(select),当是写语句的时候,那么proxy将向master所在的服务器发出请 求,同理,如果是读语句的时候,proxy将向slave所在的服务器发出请求。

应用背景:在开发工作中,有时候会遇见某个sql 语句需要锁表,导致暂时不能使用读的服务,这样就会影响现有业务,使用主从复制,让主库负责写,从库负责读,这样即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。

背景环境:server1,2 基于gtid的主从复制,详细配置见:

实现环境: (前提:必须实现主从复制)

server1192.168.108.100master
server2192.168.108.101slave
server3192.168.108.102mysql-proxy

1.server3部署mysql-proxy服务

tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz -C /usr/local    #解压到指定目录
cd /usr/local
mv mysql-proxy-0.8.5-linux-el6-x86-64bit mysql-proxy    #重命名,方便管理
cd mysql-proxy/
mkdir conf    #创建配置文件目录
mkdir log     #创建日志文件目录
vim conf/mysql-proxy.conf    #编写配置文件, 添加如下

[mysql-proxy]
user=root
admin-username=root
admin-password=root
# 监听代理地址
proxy-address=192.168.108.102:4040
# 写的地址
proxy-backend-addresses=192.168.108.100:3306
# 读的地址
proxy-read-only-backend-addresses=192.168.108.101:3306
# 读写脚本
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
admin-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/admin.lua
# 日志存放位置
log-file=/usr/local/mysql-proxy/log/mysql-proxy.log
# 日志等级 info, debug
log-level=info
# 守护进程
daemon=1
# 心跳检测
keepalive=1

2.通过编写lua脚本实现读写分离
修改lua脚本,默认超过4个连接才会启用读写分离,改为超过2个连接启用读写分离

vim /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
min_idle_connections = 1,
max_idle_connections = 2,

ps:我测试都改为了1

3.启动mysql-proxy
在启动前我们需要为配置文件加上660权限,没有修改权限,则会报错

chmod 660 /usr/local/mysql-proxy/conf/mysql-proxy.conf
cd /usr/local/mysql-proxy/bin/
./mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf

4: 配置成功(测试)
安装了mysql的服务器, 进入

mysql -uroot -proot -h192.168.108.102 -P4040

注意点
1: 停止从服务

	// 进入从服务mysql,  执行
	stop slave;
	start slave;

2: 查看 mysql-proxy 进程

ps -ef | grep mysql-proxy
关闭
kill -9 进程号
重新启动
cd /usr/local/mysql-proxy/bin/
./mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf
举报

相关推荐

0 条评论