MySQL的读写分离架构-Atlas
目录
原理
- 工作环境
大型网站为了软件大量的并发访问,除了在网站实现分布式负载均衡,远远不够。到了数据业务层、数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢失的话,后果更是 不堪设想。这时候,我们会考虑如何减少数据库的联接,一方面采用优秀的代码框架,进行代码的优化,采用优秀的数据缓存技术, 如:memcached,如果资 金丰厚的话,必然会想到假设服务器群,来分担主数据库的压力。那么通过MySQL主从配置,实现读写分离,减轻数据库压力。
- 基本原理
让master来响应事务性操作,让slave来响应select非事务性操作,然后再采用主从复制来把master上的事务性操作同步到slave数据库中。
Atlas介绍

image.png

image.png
Atlas是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。
它是在mysql-proxy 0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性。
360内部使用Atlas运行的mysql业务,每天承载的读写请求数达几十亿条。
下载地址
https://github.com/Qihoo360/Atlas/releases
注意:
1、Atlas只能安装运行在64位的系统上
2、Centos 5.X安装 Atlas-XX.el5.x86_64.rpm,Centos 6.X安装Atlas-XX.el6.x86_64.rpm。
3、后端mysql版本应大于5.1,建议使用Mysql 5.6以上
1.1 安装Atlas
[root@db03 /server/tools]# rpm -ivh Atlas-2.2.1.el6.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:Atlas-2.2.1-1 ################################# [100%]
[root@db03 /server/tools]# cd /usr/local/mysql-proxy/conf
[root@db03 /usr/local/mysql-proxy/conf]# mv test.cnf test.cnf.bak
1.2 配置
[root@db03 /usr/local/mysql-proxy/conf]# cat > test.cnf <<EOF
[mysql-proxy]
admin-username = user
admin-password = pwd
proxy-backend-addresses = 10.0.0.55:3306
proxy-read-only-backend-addresses = 10.0.0.52:3306,10.0.0.53:3306
pwds = repl:3yb5jEku5h4=,mha:O2jBXONX098=
daemon = true
keepalive = true
event-threads = 8
log-level = message
log-path = /usr/local/mysql-proxy/log
sql-log=ON
proxy-address = 0.0.0.0:33060
admin-address = 0.0.0.0:2345
charset=utf8
EOF
[root@db03 /usr/local/mysql-proxy/conf]# masterha_check_status --conf=/etc/mha/app1.cnf
app1 (pid:8231) is running(0:PING_OK), master:10.0.0.51
1.3 启动atlas
[root@db03 /usr/local/mysql-proxy/conf]# /usr/local/mysql-proxy/bin/mysql-proxyd test start
error: MySQL-Proxy of test is running now
[root@db03 /usr/local/mysql-proxy/conf]# netstat -lntup|grep proxy
tcp 0 0 0.0.0.0:2345 0.0.0.0:* LISTEN 8164/mysql-proxy
tcp 0 0 0.0.0.0:33060 0.0.0.0:* LISTEN 8164/mysql-proxy
1.4 远程登录mha用户
[root@db03 /usr/local/mysql-proxy/conf]# mysql -umha -pmha -h 10.0.0.53 -P33060
db03 [(none)]>
1.5 检查只读id,读的操作会在2个从节点上飘逸,自带负载均衡
db03 [(none)]>select @@server_id;
+-------------+
| @@server_id |
+-------------+
| 52 |
+-------------+
1 row in set (0.01 sec)
db03 [(none)]>select @@server_id;
+-------------+
| @@server_id |
+-------------+
| 53 |
+-------------+
1 row in set (0.00 sec)
1.6 生产授权用户
例子:root@'10.0.0.%'
(1) 业务主库中
db01 [(none)]>grant all on *.* to root@'10.0.0.%' identified by '123';
(2) 将密码加密处理
cd /usr/local/mysql-proxy/bin/
[root@db03 /usr/local/mysql-proxy/bin]# ./encrypt 123
3yb5jEku5h4=
(3) 修改配置文件
vim /usr/local/mysql-proxy/conf/test.cnf
...
pwds = repl:3yb5jEku5h4=,mha:O2jBXONX098=,root:3yb5jEku5h4=
...
(4) 重启atlas
[root@db03 /usr/local/mysql-proxy/conf]# /usr/local/mysql-proxy/bin/mysql-proxyd test restart
OK: MySQL-Proxy of test is stopped
OK: MySQL-Proxy of test is started
(5)登录测试
mysql -uroot -p123 -h 10.0.0.53 -P 33060
1.7 Atlas基础管理
# 连接管理接口
[root@db03 ~]# mysql -uuser -ppwd -h10.0.0.53 -P2345
# atlas常用的
(1) 查帮助
SELECT * FROM help ;
(2) 查看节点信息
SELECT * FROM backends ;
(3) 上线和下线节点
SET OFFLINE $backend_id ;
SET ONLINE $backend_id
(4) 删除和添加节点
REMOVE BACKEND 3;
ADD SLAVE 10.0.0.53:3306;
(5) 添加用户和删除用户
SELECT * FROM pwds ; 查看
REMOVE PWD $pwd ; 删除
ADD PWD root:123; 添加 明文
ADD ENPWD $pwd 添加 密文
(6) 持久化配置
SAVE CONFIG
| 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
相信可能就有无限可能,拒绝拖延!

浙公网安备 33010602011771号