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
作者微信公众号(持续更新)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。