首页 > 代码库 > Mysql读写分离方案-MySQL Proxy环境部署记录

Mysql读写分离方案-MySQL Proxy环境部署记录

 

Mysql的读写分离可以使用MySQL Proxy和Amoeba实现,其实也可以使用MySQL-MMM实现读写分离的自动切换。MySQL Proxy有一项强大功能是实现"读写分离",基本原理是让主数据库处理写方面事务,让从库处理SELECT查询;Amoeba for MySQL是一款优秀的中间件软件,同样可以实现读写分离,负载均衡等功能下面重点说下Mysql Proxy:

MySQL Proxy处于客户端应用程序和MySQL服务器之间,通过截断、改变并转发客户端和后端数据库之间的通信来实现其功能。代理服务器是和TCP/IP协议打交道,
而要理解MySQL Proxy的工作机制,同样要清楚MySQL客户端和服务器之间的通信协议,MySQL Protocol 包括认证和查询两个基本过程:
.................................
认证过程包括:
1)客户端向服务器发起连接请求
2)服务器向客户端发送握手信息
3)客户端向服务器发送认证请求
4)服务器向客户端发送认证结果
................................
如果认证通过,则进入查询过程:
1)客户端向服务器发起查询请求
2)服务器向客户端返回查询结果
当然,这只是一个粗略的描述,每个过程中发送的包都是有固定格式的。MySQL Proxy要做的,就是介入协议的各个过程。首先MySQL Proxy以服务器的身份接受客户端请求,
根据配置对这些请求进行分析处理,然后以客户端的身份转发给相应的后端数据库服务器,再接受服务器的信息,返回给客户端。所以MySQL Proxy需要同时实现客户端和服务
器的协议。由于要对客户端发送过来的SQL语句进行分析,还需要包含一个SQL解析器。可以说MySQL Proxy相当于一个轻量级的MySQL了,实际上,MySQL Proxy的admin server
是可以接受SQL来查询状态信息的。

MySQL Proxy通过lua 脚本来控制连接转发的机制。主要的函数都是配合MySQL Protocol各个过程的,这一点从函数名上就能看出来:
connect_server()
read_handshake()
read_auth()
read_auth_result()
read_query()
read_query_result()

至于为什么采用lua 脚本语言,大概是因为MySQL Proxy中采用了wormhole 存储引擎 的关系吧,这个虫洞存储引擎很有意思,数据的存储格式就是一段lua脚本。

Mysql Proxy的原理图

技术分享

顺便贴下Mysql Proxy的工作拓扑图

技术分享

部署MySQL Proxy实现读写分离并提高并发负载的操作记录

0)机器环境

ip地址              角色         主机名
182.48.115.237     master      master-node
182.48.115.236     slave1      slave-node1
182.48.115.238     slave2      slave-node2
182.48.115.233     proxy       proxy-node

四台机器都关闭防火墙和selinux

绑定hosts设置(四台机器都要操作)
[root@master-node ~]# vim /etc/hosts
......
182.48.115.237   master-node
182.48.115.236   slave-node1
182.48.115.238   slave-node2
182.48.115.233   proxy-node

1)Mysql主从复制部署(本案例是一主两从架构)

mysql安装参考:http://www.cnblogs.com/kevingrace/p/6109679.html
mysql主从部署参考:http://www.cnblogs.com/kevingrace/p/6256603.html

2)在proxy机器上安装mysql-proxy

 

Mysql读写分离方案-MySQL Proxy环境部署记录