17站长网

17站长网 首页 数据库 Mysql 查看内容

MySQL 中间件Atlas 实现读写分离

2023-3-16 14:29| 查看: 1256 |来源: 互联网

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

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。

本文最后更新于 2023-3-16 14:29,某些文章具有时效性,若有错误或已失效,请在网站留言或联系站长:17tui@17tui.com
·END·
站长网微信号:w17tui,关注站长、创业、关注互联网人 - 互联网创业者营销服务中心

免责声明:本站部分文章和图片均来自用户投稿和网络收集,旨在传播知识,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系我们及时修正或删除。谢谢!

17站长网微信二维码

始终以前瞻性的眼光聚焦站长、创业、互联网等领域,为您提供最新最全的互联网资讯,帮助站长转型升级,为互联网创业者提供更加优质的创业信息和品牌营销服务,与站长一起进步!让互联网创业者不再孤独!

扫一扫,关注站长网微信

大家都在看

    热门排行

      最近更新

        返回顶部