首页 > 代码库 > 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环境部署记录
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。