前言,目前已经有很多mysql中间层,baidu的 dbproxy,taobao的 tddl ,126 ,alibaba的 corba,360的altas ,mysql-proxy,楼方鑫的oneproxy,sohu的dbproxy,fabric等。有的支持分库分表,有的不支持。选择一款合适的就好。但是,如果做技术选型,还是要谨慎小心。选择自主研发还是用现有的第三方产品要慎重。(把libevent看懂了,就能做自主研发,但是要开发出一个稳定版本的,需要一段时间,开发出来后放到线上,会踩到很多坑,个人经验值,没有在线上跑2年时间的产品,不要用。曾今我们自己研发的,跑了差不多3年,直到12年,才稳定下来,之前bug不断)
#安装dbproxy altas 基本上按照朱超 写的这个,就能安装完 http://github.com/Qihoo360/Atlas/wiki/Atlas的安装
一.下载
mkdir -p /data/software && cd /data/software
wget https://github.com/Qihoo360/Atlas/archive/2.2.1.tar.gz
mv 2.2.1.tar.gz atlas.2.2.1.tar.gz
tar zxvf atlas.2.2.1.tar.gz
二.安装库文件
#安装库文件,gcc等编译环境,需要提前配好,这里就掠过了。
yum install -y libevent-devel lua-devel openssl-devel flex mysql-devel
yum install -y xz gettext-devel
# libffi,glib(>2.32)
yum -y install libffi*
cd /data/software
wget http://ftp.acc.umu.se/pub/gnome/sources/glib/2.33/glib-2.33.6.tar.xz
xz -d glib-2.33.6.tar.xz
cd glib-2.33.6
./configure
make
make install
ldconfig
# jemalloc
cd /data/software
wget http://www.canonware.com/download/jemalloc/jemalloc-3.1.0.tar.bz2
tar xvf jemalloc-3.1.0.tar.bz2
make
make install
cp /data/software/jemalloc-3.1.0/lib/libjemalloc.so.1 /usr/local/lib/
ldconfig
三.编译安装Atlas
cd /data/software/Atlas-2.2.1
#修改安装目录 --prefix=/home/mysql/dbproxy
vim bootstrap.sh
#!/bin/sh
base=$(cd "$(dirname "$0")"; pwd)
cd $base
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./configure --with-mysql=/usr --prefix=/home/mysql/dbproxy CFLAGS="-DHAVE_LUA_H -O2" LDFLAGS="-lm -ldl -lcrypto -ljemalloc" LUA_CFLAGS="-I/usr/local/include/" LUA_LIBS="-L/usr/local/lib -llua"
#用惯了,之前我们把dbproxy 安装在 /home/mysql/dbproxy,习惯了
./bootstrap.sh
make && make install
#编译过程中,如果有问题,看 config.log 记录的信息,一般是 jemalloc没安装、版本低,libffi*,glib-2.32,等库版本低或者没安装的问题。
四.配置
1.配置停起脚本mysql-proxyd
vim /home/mysql/dbproxy/bin/mysql-proxyd
修改 proxydir=/usr/local/mysql-proxy 为 proxydir=/home/mysql/dbproxy
#或者 sed -i 's%proxydir=/usr/local/mysql-proxy%proxydir=/home/mysql/dbproxy%g' /home/mysql/dbproxy/bin/mysql-proxyd
2.修改配置文件,后缀名必须是.cnf,如果不想用.cnf,也可以自己去改mysql-proxyd这个脚本
vim /home/mysql/dbproxy/conf/dbproxy.cnf
[mysql-proxy]
admin-username = user
admin-password = pwd
admin-address = 0.0.0.0:2345
proxy-backend-addresses = 192.168.0.220:9858
proxy-read-only-backend-addresses = 192.168.1.221:9858,192.168.0.14:9858
pwds = dbproxy_longxibendi_w: /iZxz+0GRoA=,dbproxy_longxibendi_r:/iZxz+0GRoA=
daemon = true
keepalive = true
event-threads = 4
log-level = message
log-path = /home/mysql/dbproxy/log
sql-log = ON
sql-log-slow = 10
wait-timeout = 10
proxy-address = 0.0.0.0:12340
charset = utf8
client-ips = 127.0.0.1, 192.168.1,192.168.0.220,192.168.1.221
3.mysql,slave上添加账号
master: 192.168.0.220
slave: 192,168.1.221,192.168.0.14
master上:mysql -uroot -p -h127.0.0.1 -P5858
mysql-> grant select,update,delete,insert on longxibendi.* to dbproxy_longxibendi_w@192.168.0.220 identified by '123456';
slave 上,相同授权,注意ip地址是dbproxy的地址
五.启动
1.启动dbproxy
cd /home/mysql/dbproxy/bin
./mysql-proxyd dbproxy start
2.访问测试
mysql -udbproxy_longxibendi_w -h192.168.0.220 -p123456 -P10240
mysql-> show databases;
#可以测试下事务,读写分离,主库宕机、从库宕机故障转移等。
#最后感谢 360 web平台 相关团队