mysql proxy详解_使用mysql-proxy实现读写分类详解

1,检查必须安装包

Mysql Proxy安装之前有先决条件,如下:

•    libevent 1.x 或更高

•    glib2 2.6.0 或更高

•    lua 5.1.x 或更高

•    pkg-config

•    libtool 1.5 或更高

•    MySQL 5.0.x 或更高的开发库

先yum安装必须的库,同时解决pkg-config、libtool和Mysql开发库,由于mysql-proxy实际并不需要在本机上运行mysql实例,所以用yum安装。

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

lua安装5.1.4版本,安装之前需要先安装readline 6.1,不然会报错缺少头文件:

readline 6.1下载:

ftp://ftp.cwru.edu/pub/bash/readline-6.1.tar.gz

lua 5.1.4下载:

http://www.lua.org/ftp/lua-5.1.4.tar.gz

运行脚本:

# tar xvf readline-6.1.tar.gz

# cd readline-6.1

# ./configure

# make && make install

#应用ldconfig –v

# ldconfig –v

注:如果安装出错 给提示不存在的文件读写权限即可。

# lua

# tar xvf lua-5.1.4.tar.gz

# cd lua-5.1.4

# 64位系统,需在CFLAGS里加上-fPIC

# vim src/Makefile

CFLAGS= -O2 -Wall -fPIC $(MYCFLAGS)

# make linux

# make install

# pkg-config 环境变量

# cp etc/lua.pc /usr/local/lib/pkgconfig/

# export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig

以上操作完成了先决条件的安装,接下来是Mysql Proxy安装(官网下载最新),下载完后运行:

# tar xvf mysql-proxy-0.8.4.tar.gz

# cd mysql-proxy-0.8.4

# ./configure

# make && make install

(编译安装mysql的指定--with-mysql="PATH" 安装路径指定--prefix="")

# cp lib/rw-splitting.lua /usr/local/lib/

# cp lib/admin.lua /usr/local/lib/

到这里MySQL-proxy已基本安装完成,接下来,测试:

Master服务器: 192.168.0.230

Slave服务器: 192.168.0.231

Proxy服务器: 192.168.0.230

注:--暂不进行同步。仅测试读写分离。mysql-proxy启动

1) 修改读写分离lua脚本

默认最小4个最大8个以上的客户端连接才会实现读写分离, 现改为最小1个最大2个:

# vi +40 /usr/local/lib/rw-splitting.lua

------------------------------------------------------

-- connection pool

if not proxy.global.config.rwsplit then

proxy.global.config.rwsplit = {

min_idle_connections = 1,

max_idle_connections = 2,

is_debug = true

}

end

------------------------------------------------------

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

2) 启动mysql-proxy

建议使用配置文件的形式启动, 注意配置文件必须是660权限, 否则无法启动. 如果有多个Slave的话, proxy-read-only-backend-addresses参数可以配置多个以逗号分隔的IP:Port从库列表.

# killall mysql-proxy

# vi /etc/mysql-proxy.cnf[mysql-proxy]

admin-username=***

admin-password=***

admin-lua-script=/usr/local/lib/admin.lua

proxy-backend-addresses=192.168.0.230:3306

proxy-read-only-backend-addresses=192.168.0.231:3306

proxy-lua-script=/usr/local/lib/rw-splitting.lua

log-file=/var/log/mysql-proxy.log

log-level=debug

daemon=true

keepalive=true

# chmod 660 /etc/mysql-proxy.cnf

# mysql-proxy --defaults-file=/etc/mysql-proxy.cnf

# ps -ef | grep mysql-proxy | grep -v grep

root      1869     1  0 18:16 ?        00:00:00 /usr/local/mysql-proxy/libexec/mysql-proxy --defaults-file=/etc/mysql-proxy.cnf

root      1870  1869  0 18:16 ?        00:00:00 /usr/local/mysql-proxy/libexec/mysql-proxy --defaults-file=/etc/mysql-proxy.cnf

连接Proxy端口, 插入数据

# mysql -uu_test –pu_test -h192.168.0.230 -P4040 -Ddb_test

mysql> insert into db_test.t_test values ('testB');

mysql> select * from db_test.t_test;

+-------+

| col   |

+-------+

| testA |

| testB |

+-------+

3) 多开几个客户端, 连接Proxy端口, 查询数据

# mysql -uu_test –pu_test -h192.168.0.230 -P4040 -Ddb_test

mysql> select * from db_test.t_test;

+-------+

| col   |

+-------+

| testA |

如果查询不到上步新插入的数据, 说明连接到了Slave, 读写分离成功.

发现insert操作成功, 但是select不出刚插入的数据, 说明同一线程也读写分离成功. 从日志中可以验证:

# tail /var/log/mysql-proxy.log

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值