说明:客户端只需访问proxy,proxy 自动进行读写分离访问。
系统信息:
proxy代理 192.168.1.151 CentOS 5.11 mysql 5.0.95(mysql不需要安装)
mysql主库 192.168.1.152 CentOS 5.6 mysql 5.6.22
mysql从库 192.168.1.153 CentOS 5.6 mysql 5.6.22
下载地址:
readline :ftp://ftp.cwru.edu/pub/bash/readline-6.3.tar.gz (可不需要)
lua : http://www.lua.org/ftp/ (读写分离脚本)
MySQL-Proxy :http://downloads.mysql.com/archives/proxy/
读写分离部署参考:MySQL 高可用:主从复制 MySQL 高可用:主主复制(双主复制)
#相关安装
yum -y install gcc gcc-c++ autoconf libtool pkgconfig ncurses ncurses-devel libreadline-dev
#以下文件所在路径:/usr/local/src
#安装readline:
tar zxvf readline-6.3.tar.gz
cd readline-6.3
./configure
make && make install
ldconfig -v
#安装lua:
tar zxvf lua-5.1.4.tar.gz
cd lua-5.1.4
make linux
make install
#测试是否安装成功(命令行运行):lua
#安装配置对应版本的MySQL-Proxy:
tar zxvf mysql-proxy-0.8.5-linux-glibc2.3-x86-32bit.tar.gz
mv mysql-proxy-0.8.5-linux-glibc2.3-x86-32bit mysql-proxy
cd mysql-proxy
export PATH=$PATH:/usr/local/src/mysql-proxy/bin/
cp /usr/local/src/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua /usr/local/lib/
cp /usr/local/src/mysql-proxy/lib/mysql-proxy/lua/admin.lua /usr/local/lib/
#读写分离脚本:
vi /usr/local/lib/rw-splitting.lua
if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 1, #改为1,最小连接为1时进行读写分离,小于则读写在主库
max_idle_connections = 1, #无法理解,也没找到合理说明资料。改为1吧,比min大于等于就行
is_debug = false
}
end
#mysql 主备都先创建账户 mysqlproxy
mysql> grant all on *.* to 'mysqlproxy'@'192.168.1.%' identified by 'mysqlproxy';
mysql> flush privileges;
#新建配置文件(并设置基本参数):
vi /etc/mysql-proxy.cnf
[mysql-proxy]
admin-username=mysqlproxy
admin-password=mysqlproxy
admin-lua-script=/usr/local/lib/admin-sql.lua
proxy-lua-script=/usr/local/lib/rw-splitting.lua
proxy-backend-addresses=192.168.1.152:3306
proxy-read-only-backend-addresses=192.168.1.153:3306
log-file=/var/tmp/mysql-proxy.log
log-level=debug
daemon=true
keepalive=true
max-open-files=1024
admin-username :连接主从数据库的用户名
admin-password :连接主从数据库的密码
admin-lua-script :admin脚本
proxy-lua-script :读写分离脚本
proxy-backend-addresses :主库连接地址
proxy-read-only-backend-addresses :只读备库连接地址
log-file :日志文件
log-level :定义日志级别(error|warning|info|message|debug)
daemon :以守护进程方式运
keepalive :保持2个进程,1号进程监视2号进程,2号进程死掉则重启proxy服务
#设置权限:
chmod 660 /etc/mysql-proxy.cnf
#启动服务:
mysql-proxy --defaults-file=/etc/mysql-proxy.cnf
#检查是否启用成功(如下日志则表示成功!)
netstat -tlp | grep mysql-proxy
tail -10 /var/tmp/mysql-proxy.log
2016-04-10 11:46:09: (debug) chassis-unix-daemon.c:121: we are the child: 24787
2016-04-10 11:46:09: (critical) plugin proxy 0.8.5 started
2016-04-10 11:46:09: (debug) max open file-descriptors = 1024
2016-04-10 11:46:09: (message) proxy listening on port :4040
2016-04-10 11:46:09: (message) added read/write backend: 192.168.1.152:3306
2016-04-10 11:46:09: (message) added read-only backend: 192.168.1.153:3306
2016-04-10 11:46:09: (message) chassis-unix-daemon.c:136: [angel] we try to keep PID=24787 alive
2016-04-10 11:46:09: (debug) chassis-unix-daemon.c:157: waiting for 24787
#连接到proxy
mysql -umysqlproxy -pmysqlproxy -h192.168.1.151 --port=4040
配置完成!!以下测试!
#测试步骤:(proxy 服务器192.168.1.151 也安装了mysql,所以就在proxy服务器上测试)
#1. 打开3个终端,连接到proxy:
mysql -umysqlproxy -pmysqlproxy -h192.168.1.151 --port=4040
#2. 查看测试表数据
mysql> select * from test.tab;
#3. 到从库(192.168.1.153)中停止同步线程
mysql> STOP SLAVE;
#4. 在proxy 的3个终端任意操纵数据
mysql> insert into test.tab(name)values('kk');
#5. 分别到主库(152)和从库(153)查看,确认主库数据没有同步到从库
mysql> select * from test.tab;
#6. 在proxy 的3个终端任意查看数据,结果查不到刚才插入的数据。证明读取的是分库!
mysql> select * from test.tab;
#7. 到从库(192.168.1.153)中启用同步线程
mysql> START SLAVE;
#6. 在proxy 的3个终端任意查看数据,结果查到了刚才插入的数据。
mysql> select * from test.tab;
#注:刚开始本人打开1个或者2个终端测试时,读写似乎还是在主库。打开第3个终端连接proxy后,读写才分离。
#实验完成!!!
相关参考:
MySQL-Proxy 官方主页 : http://dev.mysql.com/doc/mysql-proxy/en/
MySQL-Proxy 官方下载:http://downloads.mysql.com/archives/proxy/
Centos5.6下MySQL Proxy0.8.2的安装及测试