晓夏

新手菜鸟Linux学习之路

不怕从零开始,只怕从未启程

Mysql-Proxy读写分离

浏览量:706

首先,读写分离是建立在Mysql-主从复制的基础上的,所以,在配置Mysql-Proxy读写分离之前,请先确保主从复制是正常的。


一、下载Mysql-Proxy

Mysql-Proxy64位
# wget http://cdn.mysql.com/archives/mysql-proxy/mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz 

Mysql-Proxy32位
# wget http://cdn.mysql.com/archives/mysql-proxy/mysql-proxy-0.8.5-linux-el6-x86-32bit.tar.gz


二、安装Mysql-Proxy前须知

由于我下载的是0.8.5版本的Mysql-Proxy,所以请确保以下环境符合标准,不然会报错。
1、libevent 1.x 或更高
2、glib2 2.6.0 或更高
3、lua 5.1.x 或更高
4、pkgconfig
5、libtool 1.5 或更高
6、MySQL 5.0.x 或更高的开发库
注意:若是你安装的软件包是已编译的,则无需安装lua包!


三、安装所需软件包

# yum -y install gcc gcc-c++ autoconf mysql-devel libtool pkgconfig ncurses ncurses-devel


请在安装源码包前使用rpm -qa | grep *** 确保源码包已被卸载

下载安装libevent-2.0.13版本
# wget http://monkey.org/~provos/libevent-2.0.13-stable.tar.gz    #下载源码包
# tar zxf libevent-2.0.13-stable.tar.gz    #解压缩源码包
# cd libevent-2.0.13-stable    #进入源码包
# ./configure
# make && make install
# cd ..    #返回上级目录

下载安装glib-2.18.4版本
# wget http://ftp.gnome.org/pub/gnome/sources/glib/2.18/glib-2.18.4.tar.gz
# tar zxf glib-2.18.4.tar.gz
# cd glib-2.18.4
# ./configure
# make && make install
# cd ..

其他的包我的系统都已经rpm安装过了,所以在此不再演示源码包安装过程,如果觉得比较繁琐,也可以通过网络YUM源将上述所需的软件包进行更新,命令也是yum install -y ****,YUM源会自动检测是否有更新并进行update.


四、安装Mysql-Proxy

# tar zxf mysql-proxy-0.8.5-linux-el6-x86-32bit.tar.gz
# mv mysql-proxy-0.8.5-linux-el6-x86-32bit /usr/local/mysql-proxy
# cd /usr/local/mysql-proxy/
# ls      #像这种解压缩后就是这样的包括bin、include、lib这些都有的就是已经编译好了的,解压缩后直接复制即可
bin  include  lib  libexec  licenses  share

改变权限及属主属组
# chmod -R 775 /usr/local/mysql-proxy/    #修改权限为775
# chown -R mysql.mysql /usr/local/mysql-proxy/    #修改属主属组

设置环境变量
# vim /etc/profile    #编辑环境变量配置文件
在配置文件最后添加
LUA_PATH="/usr/local/mysql-proxy/share/doc/mysql-proxy/?.lua"    #lua环境变量的设置
export LUA_PATH
export PATH=$PATH:/usr/local/mysql-proxy/bin    #mysql proxy 环境变量的设置

:wq!    #保存退出
# source /etc/profile    #是环境变量生效

修改Mysql-Proxy读写分离Lua脚本
# vim /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua    #编辑读写分离脚本
默认最小4个以上的客户端连接才会实现读写分离,最大到8个客户端 现改为最小1个最大2个,便于读写分离的测试
if not proxy.global.config.rwsplit then
        proxy.global.config.rwsplit = {
                min_idle_connections = 1,
                max_idle_connections = 2,

                is_debug = false
        }
end

:wq!    #保存退出
注意:因为mysql-proxy会检测客户端连接, 当连接没有超过min_idle_connections预设值时,不会进行读写分离, 即查询操作会发生到Master上.

设置防火墙
# vim /etc/sysconfig/iptables    #编辑防火墙配置文件
-A INPUT -m state --state NEW -m tcp -p tcp --dport 4040 -j ACCEPT

:wq!    #保存退出
注意:4040是mysql-proxy的默认端口,另外添加防火墙时不要将其添加到最后,添加到-A INPUT -i lo -j ACCEPT下面一行,否则防火墙会失效,拒绝其他人访问4040端口。
# service iptables restart    #重启防火墙

mysql主库和从库分别为mysql-proxy代理服务器创建登陆用户并授权
Mysql主服务器操作:
# mysql -u root -p    #登陆数据库
mysql> grant all privileges on *.* to 'proxy'@'%' identified by '123456';    #赋予最大权限允许所有ip登陆,这里由于测试所以使用所有%,真实环境最好只允许mysql-proxy服务器ip登陆
mysql> flush privileges;    #刷新权限
mysql> exit    #退出mysql

Mysql从服务器操作:
# mysql -u root -p    #登陆数据库
mysql> grant all privileges on *.* to 'proxy'@'%' identified by '123456';  #赋予最大权限允许所有ip登陆,这里由于测试所以使用所有%,真实环境最好只允许mysql-proxy服务器ip登陆 
mysql> flush privileges;    #刷新权限
mysql> exit    #退出mysql服务器


启动mysql-proxy服务

# vim /usr/local/mysql-proxy/mysql-proxy.sh    #创建一个脚本
#!/bin/bash
/usr/local/mysql-proxy/bin/mysql-proxy --daemon --log-level=info --log-file=/var/log/mysql-proxy.log --plugins=proxy -b 192.168.1.199:3306 -r 192.168.1.197:3306 --proxy-lua-script="/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua" --plugins=admin --admin-username="proxy" --admin-password="123456" --admin-lua-script="/usr/local/mysql-proxy/share/doc/mysql-proxy/admin.lu

:wq!    #保存退出            
注意:其中proxy -b 后面是写服务器 -r后面是读服务器

# chmod 775 /usr/local/mysql-proxy/mysql-proxy.sh    #赋予脚本权限
# /usr/local/mysql-proxy/mysql-proxy.sh    #启动mysql-proxy服务
# netstat -tupln | grep mysql-proxy    #查看服务是否已启动
tcp        0      0 0.0.0.0:4040                0.0.0.0:*                   LISTEN      4194/mysql-proxy


分享:

支付宝

微信