zoukankan      html  css  js  c++  java
  • MySQLAtlas读写分离架构

    一、Atlas简介

    Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。目前该项目在360公司内部得到了广泛应用,很多MySQL业务已经接入了Atlas平台,每天承载的读写请求数达几十亿条。同时,有超过50家公司在生产环境中部署了Atlas,超过800人已加入了我们的开发者交流群,并且这些数字还在不断增加。

    mysql-proxy是一个轻量级的二进制应用程序,位于一个或多个MySQL客户端与服务器之间。客户端使用通常的凭据连接到代理,而不是连接到服务器。代理充当客户端和服务器之间的中间人。
    在其基本形式中,代理只是重定向器。它从客户端获取一个空存储桶(一个查询),将其带到服务器,用数据填充存储桶,然后将其传递回客户端。

    主要功能:

    • 读写分离
    • 从库负载均衡
    • IP过滤
    • 自动分表
    • DBA可平滑上下线DB
    • 自动摘除宕机的DB

    image
    image

    二、安装配置

    2.1 atlas下载

    • 下载地址:https://github.com/Qihoo360/Atlas/releases
    • 本次使用版本:Atlas-2.2.1.el6.x86_64.rpm
      注意:
    • 1、Atlas只能安装运行在64位的系统上
    • 2、Centos 5.X安装 Atlas-XX.el5.x86_64.rpm,Centos6.X安装Atlas-XX.el6.x86_64.rpm。
    • 3、后端mysql版本应大于5.1,建议使用Mysql 5.6以上
    • 4、8.0以上版本建议使用MySQL官方MySQL-Router

    2.2 atlas安装及配置

    yum localinstall -y Atlas-2.2.1.el6.x86_64.rpm 
    cd /usr/local/mysql-proxy/conf/
    mv test.cnf test.cnf.default
    
    vi test.cnf
    [mysql-proxy]
    admin-username = user
    admin-password = pwd
    proxy-backend-addresses = 192.168.80.54:3307
    proxy-read-only-backend-addresses = 192.168.80.54:3308,192.168.80.54:3309
    pwds = root:/iZxz+0GRoA=
    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
    

    2.3 atlas启动

    /usr/local/mysql-proxy/bin/mysql-proxyd test start
    ps -ef | grep mysql-proxy
    

    2.4 atlas读写功能测试

    登陆:
    mysql -uroot -p123456 -h192.168.80.54 -P33060
    
    测试读操作:
    select @@server_id;
    
    测试写操作:
    begin;select @@server_id;commit;
    

    2.5 添加一个用户操作

    创建一个dev用户(select  update  insert delete)密码123456,要通过80网段登录
    1. 在主库中,先要创建用户
    mysql -uroot -p -h192.168.80.54 -P3307
    grant select, update, insert, delete on *.* to dev@'192.168.80.%' identified by '123456';
    
    2. 在atlas中添加生产用户
    /usr/local/mysql-proxy/bin/encrypt  123456      ---->制作加密密码
    
    vi test.cnf
    pwds = root:/iZxz+0GRoA=,dev:/iZxz+0GRoA=       ---->添加用户密码
    
    /usr/local/mysql-proxy/bin/mysql-proxyd test restart    ---->重启atlas
    
    mysql -udev -p123456  -h192.168.80.54 -P33060       ---->连接
    

    三、Atlas基本管理

    3.1 连接管理接口

    [root@db03 ~]# mysql -uuser -ppwd -h127.0.0.1 -P2345
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 1
    Server version: 5.0.99-agent-admin
    
    Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    

    3.2 打印帮助

    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)
    

    3.3 查询后端mysql节点状态

    mysql> select * from backends;
    +-------------+--------------------+-------+------+
    | backend_ndx | address            | state | type |
    +-------------+--------------------+-------+------+
    |           1 | 192.168.80.54:3307 | up    | rw   |
    |           2 | 192.168.80.54:3308 | up    | ro   |
    |           3 | 192.168.80.54:3309 | up    | ro   |
    +-------------+--------------------+-------+------+
    4 rows in set (0.00 sec)
    
    

    3.4 动态删除节点

    mysql> remove backend 3;
    Empty set (0.00 sec)
    

    3.5 动态添加节点

    mysql> add slave 192.168.80.54:3309;
    Empty set (0.00 sec)
    

    3.6 保存修改到配置文件

    mysql> save config;
    Empty set (0.01 sec)
    

    四、其它读写分离建议

    MySQL-Router    ---> MySQL官方
    ProxySQL         --->Percona公司开发
    Maxscale         ---> MariaDB开发
    
  • 相关阅读:
    dubbo监控报错Error creating bean with name 'uriBrokerService'
    Mysql批量导入约束报错
    Spring+Mybatis+Dubbo报错java.lang.reflect.MalformedParameterizedTypeException
    group by查询每组时间最新的一条记录
    Ztree
    朴素贝叶斯算法原理小结
    SimRank协同过滤推荐算法
    用Spark学习矩阵分解推荐算法
    XGBoost算法原理小结
    集成学习之Adaboost算法原理小结
  • 原文地址:https://www.cnblogs.com/easydb/p/13721323.html
Copyright © 2011-2022 走看看