• 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;
    
    *************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************
  • 相关阅读:
    Tensorflow2.0笔记07——神经网络复杂度
    Tensorflow2.0笔记06——扩展方法(本地读取数据集、简易神经网络、优化)
    Tensorflow2.0笔记05——程序实现鸢尾花数据集分类
    Tensorflow2.0笔记04——Tensorflow常用函数
    Tensorflow2.0笔记03——基本概念
    Tensorflow2.0笔记02——神经网络的设计过程
    菜鸟弹性调度系统的架构设计——阅读心得
    微博深度学习平台架构和实践——阅读心得
    豆瓣基础架构——阅读心得
    美团云的网络架构演进之路——阅读心得
  • 原文地址:https://www.cnblogs.com/lvzhenjiang/p/14197190.html
Copyright © 2020-2023  润新知