• 20--mysql读写分离,分库分表


    MySQL中间件Atlas

    一 atlas简介

    ​ Mysql 的 proxy 中间件有比较多的工具,例如,mysql-proxy(官方提供), atlas , cobar, mycat, tddl, tinnydbrouter等等。

    ​ 而Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。目前该项目在360公司内部得到了广泛应用,很多MySQL业务已经接入了Atlas平台,每天承载的读写请求数达几十亿条。

      同时,有超过50家公司在生产环境中部署了Atlas,超过800人已加入了我们的开发者交流群,并且这些数字还在不断增加。而且安装方便。配置的注释写的蛮详细的,都是中文。

      Atlas官方链接: https://github.com/Qihoo360/Atlas/blob/master/README_ZH.md

      Atlas下载链接: https://github.com/Qihoo360/Atlas/releases

    二 主要功能

    Atlas主要功能(代理)
    	1.读写分离
    	2.从库负载均衡
    	3.IP过滤
    	4.自动分表
    	5.DBA可平滑上下线DB(不影响用户的体验,把你的数据库下线)
    	6.自动摘除宕机的DB
    	
    Atlas相对于官方MySQL-Proxy的优势
    	1.将主流程中所有Lua代码用C重写,Lua仅用于管理接口
    	2.重写网络模型、线程模型
    	3.实现了真正意义上的连接池
    	4.优化了锁机制,性能提高数十倍
    

    三 使用场景

      Atlas是一个位于前端应用与后端MySQL数据库之间的中间件,在后端DB看来,Atlas相当于连接它的客户端,在前端应用看来,Atlas相当于一个DB。Atlas作为服务端与应用程序通讯,它实现了MySQL的客户端和服务端协议,同时作为客户端与MySQL通讯。它对应用程序屏蔽了DB的细节,同时为了降低MySQL负担,它还维护了连接池。

     Atlas使得应用程序员无需再关心读写分离、分表等与MySQL相关的细节,可以专注于编写业务逻辑,同时使得DBA的运维工作对前端应用透明,上下线DB前端应用无感知。

    四 企业读写分离及分库分表其他方案了解

    Mysql-proxy(oracle)
    
    Mysql-router(oracle)
    
    Atlas (Qihoo 360)
    
    Atlas-sharding (Qihoo 360)
    
    Cobar(是阿里巴巴(B2B)部门开发)
    
    Mycat(基于阿里开源的Cobar产品而研发)
    
    TDDL Smart Client的方式(淘宝)
    
    Oceanus(58同城数据库中间件)
    
    OneProxy(原支付宝首席架构师楼方鑫开发 )
    
    vitess(谷歌开发的数据库中间件)
    
    Heisenberg(百度)
    
    TSharding(蘑菇街白辉)
    
    Xx-dbproxy(金山的Kingshard、当当网的sharding-jdbc )
    
    amoeba
    

    五 安装Atlas

    #机器准备:192.168.15.51为主库
    1,主库先执行
    stop slave; reset slave;
    
    2.两个从库执行
    stop slave;
    CHANGE MASTER TO MASTER_HOST='192.168.15.51', MASTER_PORT=3306, MASTER_AUTO_POSITION=1, MASTER_USER='cdan', MASTER_PASSWORD='1';
    start slave;
    show slave statusG   #Slave_IO_Running: Yes   Slave_SQL_Running: Yes
    
    #管理节点:192.168.15.50    给开发的是中间件的地址:192.168.15.50:3306
    #主库:192.168.15.51
    #从库:192.168.15.52和53两台机器    
    #中间件管理写ip:192.168.15.250(ifconfig eth0:1 192.168.15.250/24)  
    #中间件管理读ip:一主两从的ip
    
    # 虽然包时el6的,但是centos7也能用,在管理节点安装
    wget https://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el6.x86_64.rpm
    
    rpm -ivh Atlas-2.2.1.el6.x86_64.rpm
    

    六 配置

    [root@manager ~]# cd /usr/local/mysql-proxy/conf
    [root@manager mysql-proxy]# vim test.cnf
    [mysql-proxy]
    # 用来登录atlas管理接口的账号和密码,部署登录msyql数据
    admin-username = xiaodan 
    admin-password = 111    
    proxy-backend-addresses = 192.168.15.250:3306 # 写节点(主库)
    proxy-read-only-backend-addresses = 192.168.15.51:3306,192.168.15.52:3306,192.168.15.53:3306 # 只读节点(主从库)
    
    # 用来登录msyql的账号和加密密码,都是存在与mysql库的账号免密,我们需要指定我们自己的,可以指定多个
    # 注意一定要是加密密码,需要执行
    # /usr/local/mysql-proxy/bin/encrypt 123,得到123的加密密码
    pwds = root:3yb5jEku5h4=, user1:3yb5jEku5h4=     
    daemon = true       # 后台运行
    keepalive = true    # 监测节点心跳
    event-threads = 4   # 并发数量,设置cpu核数一半
    log-level = message   # 日志级别
    log-path = /usr/local/mysql-proxy/log  # 日志目录
    sql-log = On   # sql记录(可做审计)
    proxy-address = 0.0.0.0:3306    # 业务连接端口
    admin-address = 0.0.0.0:2345    # 管理连接端口
    charset=utf8   # 字符集
    

    七 启动服务

    #1、启动,配置文件名为test.conf对应此处的test
    /usr/local/mysql-proxy/bin/mysql-proxyd test start
    
    #2、验证启动(没起来他也显示OK)
    ps -ef|grep [m]ysql-proxy
    netstat -lntup|grep [m]ysql-proxy
    
    #3、查看日志定位问题
    tail -f /usr/local/mysql-proxy/log/test.log
    

    八 mysql库创建账号

    grant all on *.* to 'root'@'%' identified by '123';
    grant all on *.* to 'user1'@'%' identified by '123';
    

    Atlas使用

    进入管理接口

    # 进入管理接口,使用配置文件中指定的管理账号与密码
    mysql -uxiaodan -p111 -h127.0.0.1 -P2345
    mysql -Uroot -p123 -h 192.168.15.50 -p 3306
    
    #查看帮助,依据帮助查找可执行的管理操作
    mysql> SELECT * FROM help;
    #查看后端的数据库
    SELECT * FROM backends;
    

    在任意一台机器上,登录atlas主机

    #1、为了很好地观察读写分离的效果,可以先把从库的sql延迟设置大
    stop slave;
    CHANGE MASTER TO MASTER_DELAY = 60;
    start slave;
    	
    #2、登录atlas来进行测试
    # -u、-p为atlas配置文件中pwds指定的账号和密码
    # -h后的地址为atlas主机的地址
    # -P自定atlas监听的ip
    mysql -uroot -p123 -h 192.168.15.200 -P 3306
    
    mysql> create database db1;
    此时去主库查看,发现有db1库,但是去所有从库查看发现都没有
    过了一分钟后从库上都有db1了,然后我们通过atlas也可以查看到了
    mysql> show databases;
    

    九 管理功能简介

    9.1 连接管理服务,使用配置文件中管理接口账户

    mysql -uxiaodan -p111 -h192.168.15.200 -P2345
    

    9.2 持久化配置文件

    mysql> save config;Empty set (0.00 sec)
    

    9.3 节点管理

    9.3.1 查看所有节点

    mysql> SELECT * FROM backends;
    +-------------+---------------------+-------+------+
    | backend_ndx | address             | state | type |
    +-------------+---------------------+-------+------+
    |           1 | 192.168.15.51:3306 | up    | rw   |
    |           2 | 192.168.15.52:3306 | up    | ro   |
    |           3 | 192.168.15.53:3306 | up    | ro   |
    +-------------+---------------------+-------+------+
    3 rows in set (0.00 sec)
    

    9.3.2 节点的上线和下线

    下线

    mysql> set offline 1;
    +-------------+---------------------+---------+------+
    | backend_ndx | address             | state   | type |
    +-------------+---------------------+---------+------+
    |           1 | 192.168.15.51:3306 | offline | rw   |
    +-------------+---------------------+---------+------+
    1 row in set (0.00 sec)
    
    mysql> SELECT * FROM backends;
    +-------------+---------------------+---------+------+
    | backend_ndx | address             | state   | type |
    +-------------+---------------------+---------+------+
    |           1 | 192.168.15.51:3306 | offline | rw   |
    |           2 | 192.168.15.52:3306 | up      | ro   |
    |           3 | 192.168.15.53:3306 | up      | ro   |
    +-------------+---------------------+---------+------+
    3 rows in set (0.00 sec)
    

    上线

    mysql> set online 1;
    +-------------+---------------------+---------+------+
    | backend_ndx | address             | state   | type |
    +-------------+---------------------+---------+------+
    |           1 | 192.168.15.151:3306 | unknown | rw   |
    +-------------+---------------------+---------+------+
    1 row in set (0.00 sec)
    

    9.3.3 添加删除节点

    删除

    mysql> remove backend 3;
    mysql> SELECT * FROM backends;
    

    添加

    mysql> add slave 192.168.15.102:3306;
    mysql> SELECT * FROM backends;
    

    9.4 用户管理

    9.4.1 在主库增加数据库用户

    mysql> grant all on *.* to user1@'192.168.10.%' identified by '123';
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    

    9.4.2 查看当前用

    mysql> select * from pwds;
    +----------+--------------+
    | username | password     |
    +----------+--------------+
    | test     | 3yb5jEku5h4= |
    | repl     | 3yb5jEku5h4= |
    +----------+--------------+
    2 rows in set (0.00 sec)
    
    mysql> add pwd user1:123;
    Empty set (0.00 sec)
    
    mysql> select * from pwds;
    +----------+--------------+
    | username | password     |
    +----------+--------------+
    | root     | 3yb5jEku5h4= |
    | egon     | 3yb5jEku5h4= |
    | user1    | 3yb5jEku5h4= |
    +----------+--------------+
    3 rows in set (0.00 sec)
    
  • 相关阅读:
    Vue路由机制
    谷歌浏览器打不开应用商店的解决方法
    Vue报错——Component template should contain exactly one root element. If you are using vif on multiple elements, use velseif to chain them instead.
    Vue.js学习之——安装
    Vue使用axios无法读取data的解决办法
    关于localstorage存储JSON对象的问题
    2013年整体计划
    个人喜欢的警语收集
    Linux防火墙的关闭和开启
    Flex修改title 转载
  • 原文地址:https://www.cnblogs.com/caodan01/p/15059182.html
Copyright © 2020-2023  润新知