目录
Atlas简介
Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。目前该项目在360公司内部得到了广泛应用,很多MySQL业务已经接入了Atlas平台,每天承载的读写请求数达几十亿条。同时,有超过50家公司在生产环境中部署了Atlas,超过800人已加入了我们的开发者交流群,并且这些数字还在不断增加。
Atlas主要功能
-
1.读写分离
-
2.从库负载均衡
-
3.IP过滤
-
4.自动分表
-
5.DBA可平滑上下线DB
-
6.自动摘除宕机的DB
Atlas相对于官方MySQL-Proxy的优势
-
1.将主流程中所有Lua代码用C重写,Lua仅用于管理接口
-
2.重写网络模型、线程模型
-
3.实现了真正意义上的连接池
-
4.优化了锁机制,性能提高数十倍
架构图
部署mysql主从备份
详情见:CentOS7_MySQL集群
安装并配置Atlas软件
[root@atlas-server ~]# rpm -ivh Atlas-2.2.1.el6.x86_64.rpm
安装好之后会生成4个文件夹以及配置文件
[root@atlas-server ~]# ls /usr/local/mysql-proxy/
bin conf lib log
bin:
放置可执行文件
- “encrypt”是用来生成MySQL密码加密的,在配置的时候会用到
- “mysql-proxy”是MySQL自己的读写分离代理
- “mysql-proxyd”是360的,后面有个“d”,服务的启动、重启、停止。都是用他来执行的
conf:
放置配置文件
lib:
放置一些依赖包
log:
放置日志文件
配置读写分离
配置4台节点服务器开放权限给Atlas
mysql> grant all on *.* to test@'192.168.100.%' identified by 'Xyz@123456';
mysql> flush privileges; //四台节点同样操作
加密用户名密码
[root@atlas-server ~]# /usr/local/mysql-proxy/bin/encrypt Xyz@123456
Wx+H03ZN76ItoVZBPiOC6Q==
编辑配置文件
[root@atlas-server ~]# vi /usr/local/mysql-proxy/conf/test.cnf
需要更改的配置
[mysql-proxy]
#带#号的为非必需的配置项目
#管理接口的用户名
admin-username = user
#管理接口的密码
admin-password = pwd
#Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔
proxy-backend-addresses = 192.168.100.11:3306,192.168.100.12:3306
#Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔
#proxy-read-only-backend-addresses = 127.0.0.1:3305@1
proxy-read-only-backend-addresses = 192.168.100.13:3306@1,192.168.100.14@1
#用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密,下行的user1和user2为示例,将其替换为你的MySQL的用户名和加密密码!
pwds = test:Wx+H03ZN76ItoVZBPiOC6Q==
#Atlas监听的工作接口IP和端口
proxy-address = 0.0.0.0:1234
#Atlas监听的管理接口IP和端口
admin-address = 0.0.0.0:2345
检查配置无误后,启动Atlas软件
/usr/local/mysql-proxy/bin/mysql-proxyd test start
OK: MySQL-Proxy of test is started
测试
在代理机(atlas-server)上使用管理账号登录
[root@atlas-server ~]# mysql -h 127.0.0.1 -P 2345 -uuser -ppwd
查看帮助
mysql> select * from help;
+----------------------------+---------------------------------------------------------+
| command | description |
+----------------------------+---------------------------------------------------------+
| SELECT * FROM help | shows this help |
| SELECT * FROM backends | lists the backends and their state |
| SET OFFLINE $backend_id | offline backend server, $backend_id is backend_ndx's id |
| SET ONLINE $backend_id | online backend server, ... |
| ADD MASTER $backend | example: "add master 127.0.0.1:3306", ... |
| ADD SLAVE $backend | example: "add slave 127.0.0.1:3306", ... |
| REMOVE BACKEND $backend_id | example: "remove backend 1", ... |
| SELECT * FROM clients | lists the clients |
| ADD CLIENT $client | example: "add client 192.168.1.2", ... |
| REMOVE CLIENT $client | example: "remove client 192.168.1.2", ... |
| SELECT * FROM pwds | lists the pwds |
| ADD PWD $pwd | example: "add pwd user:raw_password", ... |
| ADD ENPWD $pwd | example: "add enpwd user:encrypted_password", ... |
| REMOVE PWD $pwd | example: "remove pwd user", ... |
| SAVE CONFIG | save the backends to config file |
| SELECT VERSION | display the version of Atlas |
+----------------------------+---------------------------------------------------------+
16 rows in set (0.00 sec)
查看后端服务器
mysql> select * from backends;
+-------------+---------------------+-------+------+
| backend_ndx | address | state | type |
+-------------+---------------------+-------+------+
| 1 | 192.168.100.11:3306 | up | rw |
| 2 | 192.168.100.12:3306 | up | rw |
| 3 | 192.168.100.13:3306 | up | ro |
| 4 | 192.168.100.14:3306 | up | ro |
+-------------+---------------------+-------+------+
4 rows in set (0.00 sec)
通过代理访问Mysql
[root@atlas-server ~]# mysql -h192.168.100.10 -utest -p'Xyz@123456' -P1234
查询
mysql> select * from class.Y2101;
+----+------+------+
| ID | NAME | AGE |
+----+------+------+
| 1 | zl | 22 |
| 2 | tj | 24 |
| 3 | lhb | 21 |
| 4 | xt | 20 |
| 5 | yjm | 20 |
| 6 | hyh | 20 |
| 7 | hzp | 23 |
| 8 | jh | 26 |
| 9 | wb | 22 |
| 10 | qt | 26 |
| 11 | ftc | 27 |
| 12 | lyh | 21 |
| 13 | jk | 21 |
| 14 | yy | 1 |
| 15 | lhz | 22 |
| 16 | hjy | 27 |
| 17 | lll | 11 |
| 18 | aaa | 123 |
| 19 | bbb | 321 |
+----+------+------+
19 rows in set (0.01 sec)