〇 Atlas架構(gòu)介紹Atlas是Qihoo360開發(fā)的一個中間件,位于Client和MySQL Server中間層,可以作為讀寫分離,分庫分表中間件。
對于MySQL Server而言,Atlas像是個Client,而對于Client而言,Atlas則是一個DB server。
〇 實驗結(jié)構(gòu)
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; 從庫上可以設(shè)置:
- SET GLOBAL log_output='TABLE';
- SET GLOBAL general_log=on;
master上創(chuàng)建一張測試表:
- master> CREATE TABLE test.a(idint);
- Query OK, 0 rows affected(0.03 sec)
然后再到客戶端(192.168.1.192)嘗試對Atlas(192.168.1.187)發(fā)起增刪改查請求:
此處寫了一個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相關(guān)依賴。
執(zhí)行這個php腳本后,可以分別檢查一下master(192.168.1.185)和從庫(192.168.1.186)的general log:
- master> SELECTuser_host, argument
- -> FROM mysql.general_log
- -> WHERE user_host='dev[dev] @ [192.168.1.187]' ;
- +-----------------------------+-------------------------------------+
- | user_host | argument |
- +-----------------------------+-------------------------------------+
- | dev[dev] @[192.168.1.187] | INSERTINTO test.a SELECT 1 |
- | dev[dev] @[192.168.1.187] | UPDATEtest.a SET id=222 WHERE id=1|
- | dev[dev] @[192.168.1.187] | DELETE FROMtest.a WHERE id=222 |
- | dev[dev] @[192.168.1.187] | INSERTINTO test.a SELECT 123456 |
- +-----------------------------+-------------------------------------+
- 4 rowsin 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) FROMtest.a|
- +-----------------------------+-----------------------------+
- 1 rowsin set(0.00 sec)
最后再檢查一下跑完這個php腳本后的test.a表的數(shù)據(jù),是否和預(yù)期的一致:
- slave> SELECT * FROM test.a;
- +--------+
- | id |
- +--------+
- | 123456 |
- +--------+
- 1 row in set (0.00 sec)
當(dāng)然,顯然是與預(yù)期一致。
顯然Atlas作為proxy,已經(jīng)將寫請求提交給master(192.168.1.185),將讀請求提交給slave(192.168.1.186)。
對于客戶端和開發(fā)人員,只需要獲取一個Atlas的服務(wù)器地址、端口、用戶名及密碼便可使用讀寫分離。
Atlas也可以實現(xiàn)分表功能,此處可自行翻閱Atlas Home。
〇 參考文檔:
https://github.com/Qihoo360/Atlas/releases
https://github.com/Qihoo360/Atlas/wiki
文章名稱:MySQL中間件Atlas實現(xiàn)讀寫分離
本文鏈接:
http://weahome.cn/article/iedcoc.html