Atlas是Qihoo360開(kāi)發(fā)的一個(gè)中間件,位于Client和MySQL Server中間層,可以作為讀寫(xiě)分離,分庫(kù)分表中間件。 對(duì)于MySQL Server而言,Atlas像是個(gè)Client,而對(duì)于Client而言,Atlas則是一個(gè)DB server。
實(shí)驗(yàn)結(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 客戶(hù)端:192.168.1.192
MySQL部分: (主從建立步驟略) 主/從上建立具有增刪改查賬號(hào): GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO 'dev'@'192.168.1.187' IDENTIFIED BY 'dev'; FLUSH PRIVILEGES;
從庫(kù)上可以設(shè)置: SET GLOBAL log_output='TABLE'; SET GLOBAL general_log=on;
master上創(chuàng)建一張測(cè)試表: master> CREATE TABLE test.a(id int); Query OK, 0 rows affected (0.03 sec)
然后再到客戶(hù)端(192.168.1.192)嘗試對(duì)Atlas(192.168.1.187)發(fā)起增刪改查請(qǐng)求:
此處寫(xiě)了一個(gè)php腳本來(lái)模擬請(qǐng)求: <?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); ?>
此處可以通過(guò) yum install -y php php-mysql 來(lái)安裝一下php相關(guān)依賴(lài)。
執(zhí)行這個(gè)php腳本后,可以分別檢查一下master(192.168.1.185)和從庫(kù)(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)
最后再檢查一下跑完這個(gè)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)將寫(xiě)請(qǐng)求提交給master(192.168.1.185),將讀請(qǐng)求提交給slave(192.168.1.186)。 對(duì)于客戶(hù)端和開(kāi)發(fā)人員,只需要獲取一個(gè)Atlas的服務(wù)器地址、端口、用戶(hù)名及密碼便可使用讀寫(xiě)分離。
Atlas也可以實(shí)現(xiàn)分表功能,此處可自行翻閱Atlas Home。 |
免責(zé)聲明:本站部分文章和圖片均來(lái)自用戶(hù)投稿和網(wǎng)絡(luò)收集,旨在傳播知識(shí),文章和圖片版權(quán)歸原作者及原出處所有,僅供學(xué)習(xí)與參考,請(qǐng)勿用于商業(yè)用途,如果損害了您的權(quán)利,請(qǐng)聯(lián)系我們及時(shí)修正或刪除。謝謝!
始終以前瞻性的眼光聚焦站長(zhǎng)、創(chuàng)業(yè)、互聯(lián)網(wǎng)等領(lǐng)域,為您提供最新最全的互聯(lián)網(wǎng)資訊,幫助站長(zhǎng)轉(zhuǎn)型升級(jí),為互聯(lián)網(wǎng)創(chuàng)業(yè)者提供更加優(yōu)質(zhì)的創(chuàng)業(yè)信息和品牌營(yíng)銷(xiāo)服務(wù),與站長(zhǎng)一起進(jìn)步!讓互聯(lián)網(wǎng)創(chuàng)業(yè)者不再孤獨(dú)!
掃一掃,關(guān)注站長(zhǎng)網(wǎng)微信