• ADADADADAD

    MySQL 中间件Atlas 实现读写分离[ mysql数据库 ]

    mysql数据库 时间:2024-12-03 12:13:15

    作者:文/会员上传

    简介:

    〇 Atlas架构介绍

    Atlas是Qihoo360开发的一个中间件,位于Client和MySQL Server中间层,可以作为读写分离,分库分表中间件。
    对于MySQL Server而言,Atlas像是个Client,而对于Clien

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    〇 Atlas架构介绍

    Atlas是Qihoo360开发的一个中间件,位于Client和MySQL Server中间层,可以作为读写分离,分库分表中间件。
    对于MySQL Server而言,Atlas像是个Client,而对于Client而言,Atlas则是一个DB server。







    〇 实验结构

    OS: CentOS 6.5 64bit
    MySQL version: 5.6.30

    Master:192.168.1.185
    Slave:192.168.1.186
    proxy(Atlas):192.168.1.187
    客户端:192.168.1.192




    〇MySQL部分:
    (主从建立步骤略)
    主/从上建立具有增删改查账号:
    GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO 'dev'@'192.168.1.187' IDENTIFIED BY 'dev'; FLUSH PRIVILEGES;
    从库上可以设置:
      SET GLOBAL log_output='TABLE';
      SET GLOBAL general_log=on;

    master上创建一张测试表:
      master> CREATE TABLE test.a(id int);
      Query OK, 0 rows affected (0.03 sec)

    然后再到客户端(192.168.1.192)尝试对Atlas(192.168.1.187)发起增删改查请求:

    此处写了一个php脚本来模拟请求:
      <?php
      $con = mysql_connect("192.168.1.187","dev","dev");
      if (!$con){
      die('connect error: ' . mysql_error());
      }

      mysql_select_db("my_db", $con);

      mysql_query("INSERT INTO test.a SELECT 1;");
      mysql_query("UPDATE test.a SET id=222 WHERE id=1;");
      mysql_query("DELETE FROM test.a WHERE id=222;");
      mysql_query("INSERT INTO test.a SELECT 123456;");
      mysql_query("SELECT count(1) FROM test.a;");

      mysql_close($con);
      ?>

    此处可以通过 yum install -y php php-mysql来安装一下php相关依赖。

    执行这个php脚本后,可以分别检查一下master(192.168.1.185)和从库(192.168.1.186)的general log:
      master> SELECT user_host, argument
      -> FROM mysql.general_log
      -> WHERE user_host='dev[dev] @[192.168.1.187]' ;
      +-----------------------------+-------------------------------------+
      | user_host| argument|
      +-----------------------------+-------------------------------------+
      | dev[dev] @ [192.168.1.187] | INSERT INTO test.a SELECT 1 |
      | dev[dev] @ [192.168.1.187] | UPDATE test.a SET id=222 WHERE id=1 |
      | dev[dev] @ [192.168.1.187]| DELETE FROM test.a WHERE id=222 |
      | dev[dev] @ [192.168.1.187]| INSERT INTO test.a SELECT 123456 |
      +-----------------------------+-------------------------------------+
      4 rows in set (0.00 sec)

      slave> SELECT user_host, argument
      -> FROM mysql.general_log
      -> WHERE user_host='dev[dev] @[192.168.1.187]' ;
      +-----------------------------+-----------------------------+
      | user_host | argument |
      +-----------------------------+-----------------------------+
      | dev[dev] @ [192.168.1.187] | SELECT count(1) FROM test.a |
      +-----------------------------+-----------------------------+
      1 rows in set (0.00 sec)

    最后再检查一下跑完这个php脚本后的test.a表的数据,是否和预期的一致:
      slave> SELECT * FROM test.a; +--------+ | id | +--------+ | 123456 | +--------+ 1 row in set (0.00 sec)


    当然,显然是与预期一致。
    显然Atlas作为proxy,已经将写请求提交给master(192.168.1.185),将读请求提交给slave(192.168.1.186)。
    对于客户端和开发人员,只需要获取一个Atlas的服务器地址、端口、用户名及密码便可使用读写分离。

    Atlas也可以实现分表功能,此处可自行翻阅Atlas Home。



    〇 参考文档:
    https://github.com/Qihoo360/Atlas/releases
    https://github.com/Qihoo360/Atlas/wiki

    作者微信公众号(持续更新)





    MySQL 中间件Atlas 实现读写分离.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: Atlasmysql中间件