MySQL读写分离架构——Atlas

一、Atlas介绍

Atlas是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它是在mysql-proxy 0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性。360内部使用Atlas运行的mysql业务,每天承载的读写请求数达几十亿条。

Atlas软件下载地址: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以上;

工作流程图:
20200419175021

二、安装配置Atlas

2.1 环境描述

OS hostname IP service type
centos 7.5 master 192.168.1.1 mysql 5.7 backup
centos 7.5 backup 192.168.1.2 mysql 5.7 master
centos 7.5 slave 192.168.1.3 mysql 5.7 slave、manager、atlas

需基于上次的搭建MHA的环境进行实施,由于模拟了MHA故障,所以导致master、backup角色进行了调换!

由于Atlas软件安装在了slave节点上,所以以下操作都是在slave节点上完成的!

2.2 安装配置

[root@slave ~]# wget https://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el6.x86_64.rpm
[root@slave ~]# rpm -ivh Atlas-2.2.1.el6.x86_64.rpm
[root@slave ~]# cd /usr/local/mysql-proxy/conf/
[root@slave conf]# cat test.cnf
[mysql-proxy]

#带#号的为非必需的配置项目

#管理接口的用户名
admin-username = user

#管理接口的密码
admin-password = pwd

#Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔
proxy-backend-addresses = 127.0.0.1:3306

#Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔
#proxy-read-only-backend-addresses = 127.0.0.1:3305@1

#用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密,下行的user1和user2为示例,将其替换为你的MySQL的用户名和加密密码!
pwds = user1:+jKsgB3YAG8=, user2:GS+tr4TPgqc=

#设置Atlas的运行方式,设为true时为守护进程方式,设为false时为前台方式,一般开发调试时设为false,线上运行时设为true,true后面不能有空格。
daemon = true

#设置Atlas的运行方式,设为true时Atlas会启动两个进程,一个为monitor,一个为worker,monitor在worker意外退出后会自动将其重启,设为false时只有worker,没有monitor,一般开发调试时设为false,线上运行时设为true,true后面不能有空格。
keepalive = true

#工作线程数,对Atlas的性能有很大影响,可根据情况适当设置
event-threads = 8

#日志级别,分为message、warning、critical、error、debug五个级别
log-level = message

#日志存放的路径
log-path = /usr/local/mysql-proxy/log

#SQL日志的开关,可设置为OFF、ON、REALTIME,OFF代表不记录SQL日志,ON代表记录SQL日志,REALTIME代表记录SQL日志且实时写入磁盘,默认为OFF
#sql-log = OFF

#慢日志输出设置。当设置了该参数时,则日志只输出执行时间超过sql-log-slow(单位:ms)的日志记录。不设置该参数则输出全部日志。
#sql-log-slow = 10

#实例名称,用于同一台机器上多个Atlas实例间的区分
#instance = test

#Atlas监听的工作接口IP和端口
proxy-address = 0.0.0.0:1234

#Atlas监听的管理接口IP和端口
admin-address = 0.0.0.0:2345

#分表设置,此例中person为库名,mt为表名,id为分表字段,3为子表数量,可设置多项,以逗号分隔,若不分表则不需要设置该项
#tables = person.mt.id.3

#默认字符集,设置该项后客户端不再需要执行SET NAMES语句
#charset = utf8

#允许连接Atlas的客户端的IP,可以是精确IP,也可以是IP段,以逗号分隔,若不设置该项则允许所有IP连接,否则只允许列表中的IP连接
#client-ips = 127.0.0.1, 192.168.1

#Atlas前面挂接的LVS的物理网卡的IP(注意不是虚IP),若有LVS且设置了client-ips则此项必须设置,否则可以不设置
#lvs-ips = 192.168.1.1

[root@slave conf]# mv test.cnf test.cnf.bak
[root@slave conf]# vim test.cnf
[mysql-proxy]
admin-username = user
admin-password = pwd
proxy-backend-addresses = 192.168.1.100:3306   #指定MHA中的虚拟IP地址
proxy-read-only-backend-addresses = 192.168.1.1:3306,192.168.1.3: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=utf8mb4
#由于Atlas软件是国人开发的,所以配置文件都是中文的,所以就不多做解释了
[root@slave ~]# /usr/local/mysql-proxy/bin/mysql-proxyd test start
#启动Atlas,指定的是配置文件前缀,也可监控多个MHA集群

2.3 Atlas功能测试

[root@slave ~]# mysql -umha -pmha  -h 192.168.1.3 -P 33060
#指定运行Atlas服务的用户、密码、主机、端口
#在Atlas配置文件可以看到

#测试读操作:
slave[(none)]>select @@server_id;
+-------------+
| @@server_id |
+-------------+
|           3 |
+-------------+
slave[(none)]>select @@server_id;
+-------------+
| @@server_id |
+-------------+
|           1 |
+-------------+
#可以看出效果而且是轮询的效果

#测试写操作
slave[(none)]>begin;select @@server_id;commit;
+-------------+
| @@server_id |
+-------------+
|           2 |
+-------------+
#可以看出指定的master节点

2.4 生产用户要求

开发人员申请一个应用用户 app,密码123,要通过192.168.1.0网段登录!

backup[(none)]>grant select,update,insert on *.* to app@'192.168.1.%' identified by '123';
#主库创建用户(虽然是backup名称,但是身份是master)

[root@slave ~]# /usr/local/mysql-proxy/bin/encrypt 123
3yb5jEku5h4=
#制作加密密码
[root@slave ~]# vim /usr/local/mysql-proxy/conf/test.cnf
pwds = repl:3yb5jEku5h4=,mha:O2jBXONX098=,app:3yb5jEku5h4=
#在原有的基础上增加app用户及对应的密文密码
[root@slave ~]# /usr/local/mysql-proxy/bin/mysql-proxyd test restart
#重新启动Atlas服务
[root@slave ~]# mysql -uapp -p123  -h 192.168.1.3 -P 33060 
#即可登录成功

2.5 Atlas基本管理

① 连接管理端口
[root@slave ~]# mysql -uuser -ppwd  -h 192.168.1.3 -P 2345
#使用管理用户并指定管理端口
② 打印帮助
slave[(none)]>select * from help;
③ 打印后端节点信息
slave[(none)]>select * from backends;
+-------------+--------------------+-------+------+
| backend_ndx | address            | state | type |
+-------------+--------------------+-------+------+
|           1 | 192.168.1.100:3306 | up    | rw   |
|           2 | 192.168.1.1:3306   | up    | ro   |
|           3 | 192.168.1.3:3306   | up    | ro   |
+-------------+--------------------+-------+------+
④ 动态添加、删除节点
slave[(none)]>remove backend 3;
#删除节点
slave[(none)]>add slave 192.168.1.3:3306;
#添加节点
⑤ 保存配置到配置文件
slave[(none)]>save config;
posted @ 2020-12-27 14:25  吕振江  阅读(154)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end