Atlas是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。目前该项目在360公司内部得到了广泛应用,很多MySQL业务已经接入了Atlas平台,每天承载的读写请求数达几十亿条。
主要功能:
* 读写分离
* 从库负载均衡
* IP过滤
* SQL语句黑白名单(经过测试及确认该功能最新版本是没有的)
* 自动分表
操作系统: centos 6.4 32位或者64位
Mysql master地址:192.168.3.68
Mysql slave地址:192.168.2.243
Master和slave都安装有mysql,mysql版本:5.1.69
1、 rpm包安装(推荐)。
下载地址:https://github.com/Qihoo360/Atlas/releases
wget https://github.com/Qihoo360/Atlas/releases/download/1.0.1/Atlas-1.0.1-1.el6.x86_64.rpm
rpm -ivh Atlas-1.0.1-1.el6.x86_64.rpm
2、 源码编译安装。
环境依赖:glib(2.32.x)、libevent(1.4以上)、Lua(5.1.x)、OpenSSL(0.9.8以上)
Yum安装依赖:
yum install -y libevent-devel lua-devel openssl-devel flex mysql-devel
yum install -y xz gettext-devel
glib一般都会版本比较低,而yum安装的版本可能并不能达到要求,所以需要手动编译安装。推荐版本glib2.32.4。
glib源码安装:
xz -d glib-2.32.4.tar.xz
tar xvf glib-2.32.4.tar
cd glib-2.32.4
./configure
make && make install
ldconfig
注意:ldconfig这步骤不能缺少,否则编译安装Atlas的时候可能会用老的glib,然后提示版本不对。如果文件/etc/ld.so.conf没有/usr/local/lib这一行,请手动添加。
编译Atlas:
Wget https://github.com/Qihoo360/Atlas/archive/1.0.1.zip
unzip 1.0.1
cd Atlas-1.0.1
vim bootstrap.sh
修改mysql_config路径,一般是/usr/bin/mysql_config
修改pkgconfig路径,一般是/usr/local/lib/pkgconfig
./bootstrap.sh
make && make install
Atlas默认安装在/usr/local/mysql-proxy
1、 配置。
cd /usr/local/mysql-proxy
touch conf/instance.cnf
vim conf/instance.cnf
输入配置如下:
[mysql-proxy]
plugins = admin,proxy
admin-username=zone
admin-password=123456
admin-lua-script = /usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua
proxy-backend-addresses = 192.168.3.68:3306
proxy-read-only-backend-addresses = 192.168.2.243:3306@1
daemon = true
keepalive = true
event-threads = 4
log-level = message
log-path = /usr/local/mysql-proxy/log
instance = instance
proxy-address = 0.0.0.0:1234
admin-address = 0.0.0.0:4401
min-idle-connections = 4
charset = utf8
tables=test.part_tab.c1.3
关于配置的各个配置项的解释,可以查看文档:https://github.com/Qihoo360/Atlas/wiki/%E9%85%8D%E7%BD%AE%E5%8F%82%E6%95%B0%E8%AF%A6%E8%A7%A3
以及https://github.com/Qihoo360/Atlas
2、 创建数据库表及授权:
因为配置tables=test.part_tab.c1.3使用到了分表,Atlas不会自动建分表,需要自己手动建立三个分表:test.part_tab_0,test.part_tab_1,test.part_tab_2。
在后端服务器192.168.2.243上对代理192.168.3.68授权:
grant all on *.* to root@'192.168.3.68' identified by '';
3、 启动、停止和重启。
启动:/usr/local/mysql-proxy/bin/mysql-proxyd instance start
停止:/usr/local/mysql-proxy/bin/mysql-proxyd instance stop
重启:/usr/local/mysql-proxy/bin/mysql-proxyd instance restart
4、 管理后端。
Mysql –uroot –p –P1234 –h127.0.0.1
输入密码回车后进入管理界面,提示信息里面有Server version: 5.0.99-agent-admin字样表示正确进入管理后台。
Select * from help;#可以查看所有能执行的管理命令。
select * from backends #列出所有DB及其状态,up代表可用,down代表不可用
add master IP:port #增加一台主库
add slave IP:port #增加一台从库
remove backend i #移除第i台DB(i代表序号,可以是主库也可以是从库,下同)
set offline i #将第i台DB临时下线
set online i #将第i台DB重新上线
select * from help #显示以上帮助信息
1、 测试读写分离可以通过设置主从不同步,然后通过代理写入后,读取数据的条数来判断是分发到哪个后端了。
2、 每次连接Atlas会分配到一个后端去,所以可以通过产生多个连接来测试,或者一个脚本执行多次来测试。
3、 在测试读写分离时,可以将min-idle-connections设得较小,这样可以在少数几次连接后就看到读写分离的效果。
4、 可以通过查看log/sql_instance.log来知道sql在那台后端执行的。
5、 测试脚本例子:
$link = mysql_connect('127.0.0.1:1234', 'root', ''); if (!$link) { die('Could not connect: ' . mysql_error()); } mysql_select_db("test"); //$sql="/*master*/select count(*) count from part_tab"; $sql="select count(*) count from part_tab"; $result=mysql_query($sql); while ($row=mysql_fetch_assoc($result)) { echo $row['count']."\n"; } $sql = "/*master*/ select * from part_tab where c1=244;"; $result = mysql_query($sql); while($row=mysql_fetch_assoc($result)){ var_dump($row); echo "\n"; } mysql_close($link);
六、其他相关资料。
安装相关:https://github.com/Qihoo360/Atlas
FAQ:https://github.com/Qihoo360/Atlas/wiki/FAQ
架构:https://github.com/Qihoo360/Atlas/wiki/%E6%9E%B6%E6%9E%84
配置:
https://github.com/Qihoo360/Atlas/wiki/%E9%85%8D%E7%BD%AE%E5%8F%82%E6%95%B0%E8%AF%A6%E8%A7%A3
源码及相关文件下载:https://github.com/Qihoo360/Atlas/releases