51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

Linux部署Mysql-Proxy读写分离

Mysql-Proxy简介

Mysql Proxy是一个处于你的client端和Mysql server端之间的简单程序,它可以监测、分析或改变它们的通信。它使用灵活,没有限制,常见的用途包括:负载平衡,故障、查询分析,查询过滤和修改等等。

Mysql Proxy就是这么一个中间层代理,简单的说,Mysql Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,Mysql Proxy是完全透明的,应用则只需要连接到Mysql Proxy的监听端口即可。当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多个proxy的连接参数即可。

Mysql-Proxy更强大的一项功能是实现"读写分离",基本原理是让主数据库处理事务性查询,让从库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从库。

工作拓扑图

Mysql-Proxy安装部署(需要基于mysql主从,这里就不部署了,可以参考我的另外一篇文章:Mysql主从复制配置

1)下载Mysql-Proxy源码包、安装(这里采用0.8.5版本(已停止更新)

{#5011-1508807273624}[root@localhost ~]# wget --c http://mirrors.yangxingzhen.com/mysql-proxy/mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz

{#5011-1508807273624}[root@localhost ~]# tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz

{#5011-1508807273624}[root@localhost ~]# mv mysql-proxy-0.8.5-linux-el6-x86-64bit /usr/local/mysql-proxy

{#4570-1508807422254}2)创建软连接、mysql-proxy用户

{#5011-1508807273624}[root@localhost ~]# ln -s /usr/local/mysql-proxy/bin/* /usr/bin

{#5011-1508807273624}[root@localhost ~]# useradd -s /sbin/nologin mysql-proxy

{#8053-1508825689078}3)修改读写分离配置文件

{#5011-1508807273624}[root@localhost ~]# vim /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua

Mysql-Proxy会检测客户端连接,当连接没有超过min_idle_connections预设值时, 不会进行读写分离, 即查询操作会发生到Master上

{#2359-1508845846148}4)启动Mysql-Proxy中间件

{#1038-1508837942999}MYSQL-Proxy服务器:192.168.8.3

账号:admin

密码:admin

192.168.8.5(主库,负责写)

192.168.8.6(从库,负责读)

[root@localhost ~]# /usr/local/mysql-proxy/bin/mysql-proxy --daemon --log-level=debug --user=mysql-proxy --keepalive --log-file=/var/log/mysql-proxy.log --plugins="proxy" --proxy-backend-addresses="192.168.8.5:3306" --proxy-read-only-backend-addresses="192.168.8.6:3306" --proxy-lua-script="/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua" --plugins="admin" --admin-username="admin" --admin-password="admin" --admin-lua-script="/usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua"

{#7021-1508838745337}5)Mysql-Proxy的相关参数详解如下

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | --help-all //获取全部帮助信息; --proxy-address=host:port //代理服务监听的地址和端口,默认为4040; --admin-address=host:port //管理模块监听的地址和端口,默认为4041; --proxy-backend-addresses=host:port //后端mysql服务器的地址和端口; --proxy-read-only-backend-addresses=host:port //后端只读mysql服务器的地址和端口; --proxy-lua-script=file_name //完成mysql代理功能的Lua脚本; --daemon //以守护进程模式启动mysql-proxy; --keepalive //在mysql-proxy崩溃时尝试重启之; --log-file=/path/to/log_file_name //日志文件名称; --log-level=level //日志级别; --log-use-syslog //基于syslog记录日志; --plugins=plugin //在mysql-proxy启动时加载的插件; --user=user_name //运行mysql-proxy进程的用户; --defaults-file=/path/to/conf_file_name //默认使用的配置文件路径,其配置段使用[mysql-proxy]标识; --proxy-skip-profiling //禁用profile; --pid-file=/path/to/pid_file_name //进程文件名; |

{#1192-1508838777764}其中4040为proxy代理端口用于WEB应用连接,4041为管理端口用于SA或者DBA管理

{#5052-1508815120788}6)查看端口

{#5011-1508807273624}[root@localhost ~]# netstat -lntup | grep mysql-proxy

{#5011-1508807273624}[root@localhost ~]# ps -ef | grep mysql-proxy

{#8145-1508845358746}7)基于4041端口MYSQL-Proxy查看读写分离状态,登录4041管理端口

{#5011-1508807273624}[root@localhost ~]# mysql -h192.168.8.3 -uadmin -padmin -P4041 -e "select * from backends;"

{#3727-1508836968236}查看读写分离状态up则正常

{#9516-1508815016169}8)如果状态不是up,则需要登陆到4040端口(这个端口的账户密码为数据库授权的账户密码discuz,discuz )

{#5011-1508807273624}[root@localhost ~]# mysql -h192.168.8.3 -udiscuz -pdiscuz -P4040 -e "show databases;" #多执行这条命令,直至unknown变成up

{#5011-1508807273624}[root@localhost ~]# mysql -h192.168.8.3 -uadmin -padmin -P4041 -e "select * from backends;"

{#5383-1509282495740}9)测试读写分离是否成功

{#6936-1508840564263}读写分离数据测试,登录到从库,进行数据写入和测试,在从库上discuz库创建test表,并写入内容

{#2419-1509282697880}mysql> use discuz;

{#2223-1508841044190}mysql> create table test (id varchar(20),name varchar(20));

{#2040-1508841051937}mysql> insert into test value (1,'yangxz');

{#8398-1508841059594}mysql> select * from test;

{#7766-1508837896347}用4040端口登陆查看(测试读)

{#5011-1508807273624}[root@localhost ~]# mysql -h192.168.8.3 -udiscuz -pdiscuz -P4040 -e 'select * from discuz.test;'

{#2428-1508841198239}能查到上面test这个表的信息,则说明读是走的是从库,因为主库上面是没有刚刚新建的这个表信息的

{#9211-1508837328761}10)安装完discuz论坛后,需要改一下数据库端口的配置

{#5011-1508807273624}[root@localhost ~]# vim /usr/local/apache/htdocs/config/config_global.php (源码安装apache路径)

{#5011-1508807273624}[root@localhost ~]# vim /var/www/html/config/config_global.php (yum安装httpd路径)

{#5957-1508845242534}把原来主库的IP改成192.168.8.3:4040,保存退出即可~~

继续阅读

历史上的今天

12 月
14

赞(0)
未经允许不得转载:工具盒子 » Linux部署Mysql-Proxy读写分离