from:http://www.oschina.net/p/atlas/

Atlas是由 Qihoo 360,  Web平臺部基礎架構團隊開發維護的一個基于MySQL協議的數據中間層項目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基礎上,修改了大量bug,添加了很多功能特性。目前該項目在360公司內部得到了廣泛應用,很多MySQL業務已經接入了Atlas平臺,每天承載的讀寫請求數達幾十億條。

主要功能:
* 讀寫分離
* 從庫負載均衡
* IP過濾
* SQL語句黑白名單
* 自動分表

Q & A
-------------------
Q: 是否支持多字符集?
A: 這是我們對原版MySQL-Proxy的第一項改進,符合國情是必須的

Q: 自動讀寫分離挺好,但有時候我寫完馬上就想讀,萬一主從同步延遲怎么辦?
A: SQL語句前增加 /*master*/ 就可以將讀請求強制發往主庫

Q: 主庫宕機,讀操作受影響么?
A: 在atlas中是不會的! 能問這樣的問題, 說明你用過官方的mysql-proxy, 很遺憾官方版本并未解決這個問題

Q: 檢測后端DB狀態會阻塞正常請求么?
A: 不會, atlas中檢測線程是異步進行檢測的,即使有db宕機,也不會阻塞主流程。在atlas中沒有什么異常會讓主流程阻塞! 同上,官方版本也會讓你失望

Q: 想下線一臺DB, 又不想停掉mysql server, 怎么辦?
A: 可以通過管理接口手動上下線后端db, atlas會優先考慮管理員的意愿

Q: 想給集群中增加一臺DB, 不想影響線上正常訪問可以嗎?
A: 通過管理接口可以輕松實現

Q: 相比官方mysql-proxy, atlas還有哪些改進?
A: 這實在是個難以回答的問題,性能,穩定性,可靠性,易維護性,我們做過幾十項的改進,下面會盡量列一些較大的改動

VS 官方MySQL-Proxy
-------------------
1. 將主流程中所有Lua代碼改為純C實現,Lua僅用在管理接口
2. 重寫網絡模型、線程模型
3. 實現了真正意義的連接池
4. 優化了鎖機制,性能提高數十倍
......

附名字來源:
    Atlas,希臘神話中雙肩撐天的巨人,普羅米修斯的兄弟,最高大強壯的神之一,因反抗宙斯失敗而被罰頂天。我們期望這個系統能夠腳踏后端DB,為前端應用撐起一片天。

二、配置文件示例
-------------------
[mysql-proxy]    #不需要改
plugins = admin, proxy    #Atlas加載的模塊名稱,不需要改

admin-username = user    #管理接口的用戶名
admin-password = pwd    #管理接口的密碼
admin-lua-script = /usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua    #實現管理接口的Lua腳本所在路徑

proxy-backend-addresses = 127.0.0.1:3306    #Atlas后端連接的MySQL主庫的IP和端口,可設置多項,用逗號分隔
proxy-read-only-backend-addresses = 127.0.0.1:3305@2    #Atlas后端連接的MySQL從庫的IP和端口,2代表權重,用來作負載均衡,若省略則默認為1,可設置多項,用逗號分隔

daemon = false    #設置Atlas的運行方式,設為true時為守護進程方式,設為false時為前臺方式,一般開發調試時設為false,線上運行時設為true
keepalive = false    #設置Atlas的運行方式,設為true時Atlas會啟動兩個進程,一個為monitor,一個為worker,monitor在worker意外退出后會自動將其重啟,設為false時只有worker,沒有monitor,一般開發調試時設為false,線上運行時設為true

event-threads = 4    #工作線程數,推薦設置與系統的CPU核數相等
log-level = message    #日志級別,分為message、warning、critical、error、debug五個級別
log-path = /usr/local/mysql-proxy/log    #日志存放的路徑
instance = test    #實例名稱,用于同一臺機器上多個Atlas實例間的區分

proxy-address = 0.0.0.0:1234    #Atlas監聽的工作接口IP和端口
admin-address = 0.0.0.0:2345    #Atlas監聽的管理接口IP和端口

min-idle-connections = 128    #連接池的最小空閑連接數,可根據業務請求量大小適當調大或調小
tables = person.mt.id.3    #分表設置,此例中person為庫名,mt為表名,id為分表字段,3為子表數量,可設置多項,以逗號分隔
pwds = user1:+jKsgB3YAG8=, user2:GS+tr4TPgqc=    #用戶名與其對應的加密過的密碼,密碼使用加密程序encrypt加密,此設置項用于多個用戶名同時訪問同一個Atlas實例的情況,若只有一個用戶名則不需要設置該項
charset = utf8    #默認字符集,若不設置該項,則默認字符集為latin1

三、編譯安裝
-------------------
依賴:glib(2.32.0以上)、libevent(1.4以上)、Lua(5.1以上)、OpenSSL(0.9.8以上)

./bootstrap.sh    #可能需要修改其中的路徑
make
sudo make install

四、啟動與停止
-------------------
進入PREFIX/conf目錄,編輯instance.conf,此處instance的實際名稱應與其中instance設置項相同,其他設置項含義見第二節。

啟動:
PREFIX/bin/mysql-proxyd instance start

停止:
PREFIX/bin/mysql-proxyd instance stop

重啟:
PREFIX/bin/mysql-proxyd instance restart

查看運行狀態:
PREFIX/bin/mysql-proxyd instance status