Mysql 的 proxy 中间件有比较多的工具,例如,mysql-proxy(官方提供), atlas , cobar, mycat, tddl, tinnydbrouter等等。
而Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。目前该项目在360公司内部得到了广泛应用,很多MySQL业务已经接入了Atlas平台,每天承载的读写请求数达几十亿条。
同时,有超过50家公司在生产环境中部署了Atlas,超过800人已加入了我们的开发者交流群,并且这些数字还在不断增加。而且安装方便。配置的注释写的蛮详细的,都是中文。
Atlas官方链接: https://github.com/Qihoo360/Atlas/blob/master/README_ZH.md
Atlas下载链接: https://github.com/Qihoo360/Atlas/releases
| Atlas主要功能(代理) |
| 1.读写分离 |
| 2.从库负载均衡 |
| 3.IP过滤 |
| 4.自动分表 |
| 5.DBA可平滑上下线DB(不影响用户的体验,把你的数据库下线) |
| 6.自动摘除宕机的DB |
| |
| Atlas相对于官方MySQL-Proxy的优势 |
| 1.将主流程中所有Lua代码用C重写,Lua仅用于管理接口 |
| 2.重写网络模型、线程模型 |
| 3.实现了真正意义上的连接池 |
| 4.优化了锁机制,性能提高数十倍 |
Atlas是一个位于前端应用与后端MySQL数据库之间的中间件,在后端DB看来,Atlas相当于连接它的客户端,在前端应用看来,Atlas相当于一个DB。Atlas作为服务端与应用程序通讯,它实现了MySQL的客户端和服务端协议,同时作为客户端与MySQL通讯。它对应用程序屏蔽了DB的细节,同时为了降低MySQL负担,它还维护了连接池。
Atlas使得应用程序员无需再关心读写分离、分表等与MySQL相关的细节,可以专注于编写业务逻辑,同时使得DBA的运维工作对前端应用透明,上下线DB前端应用无感知。
| Mysql-proxy(oracle) |
| |
| Mysql-router(oracle) |
| |
| Atlas (Qihoo 360) |
| |
| Atlas-sharding (Qihoo 360) |
| |
| Cobar(是阿里巴巴(B2B)部门开发) |
| |
| Mycat(基于阿里开源的Cobar产品而研发) |
| |
| TDDL Smart Client的方式(淘宝) |
| |
| Oceanus(58同城数据库中间件) |
| |
| OneProxy(原支付宝首席架构师楼方鑫开发 ) |
| |
| vitess(谷歌开发的数据库中间件) |
| |
| Heisenberg(百度) |
| |
| TSharding(蘑菇街白辉) |
| |
| Xx-dbproxy(金山的Kingshard、当当网的sharding-jdbc ) |
| |
| amoeba |
| |
| wget https://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el6.x86_64.rpm |
| |
| rpm -ivh Atlas-2.2.1.el6.x86_64.rpm |
| [root@manager ~] |
| [root@manager mysql-proxy] |
| [mysql-proxy] |
| |
| admin-username = bigegon |
| admin-password = 666 |
| proxy-backend-addresses = 192.168.15.100:3306 |
| proxy-read-only-backend-addresses = 192.168.15.101:3306,192.168.15.102:3306 |
| |
| |
| |
| |
| pwds = root:3yb5jEku5h4=, egon:3yb5jEku5h4= |
| daemon = true |
| keepalive = true |
| event-threads = 4 |
| log-level = message |
| log-path = /usr/local/mysql-proxy/log |
| sql-log = On |
| proxy-address = 0.0.0.0:3306 |
| admin-address = 0.0.0.0:2345 |
| charset=utf8 |
| |
| /usr/local/mysql-proxy/bin/mysql-proxyd test start |
| |
| |
| ps -ef|grep [m]ysql-proxy |
| netstat -lntup|grep [m]ysql-proxy |
| |
| |
| tail -f /usr/local/mysql-proxy/log/test.log |
| grant all on *.* to 'root'@'%' identified by '123'; |
| grant all on *.* to 'egon'@'%' identified by '123'; |
进入管理接口
| |
| mysql -ubigegon -p666 -h127.0.0.1 -P2345 |
| |
| |
| mysql> SELECT * FROM help; |
| |
| SELECT * FROM backends; |
在任意一台机器上,登录atlas主机
| |
| stop slave; |
| CHANGE MASTER TO MASTER_DELAY = 60; |
| start slave; |
| |
| |
| |
| |
| |
| mysql -uroot -p123 -h 192.168.15.200 -P 3306 |
| |
| mysql> create database db1; |
| 此时去主库查看,发现有db1库,但是去所有从库查看发现都没有 |
| 过了一分钟后从库上都有db1了,然后我们通过atlas也可以查看到了 |
| mysql> show databases; |