來自 360 團隊的基于MySQL數據庫中間層項目:Atlas
Atlas是由奇虎360公司Web平臺部基礎架構組開發維護的一個基于MySQL協議的數據中間層項目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基礎上,修改了大量bug,添加了很多功能特性。目前該項目在360公司內部得到了廣泛應用,3/4以上的MySQL業務已經接入了Atlas平臺,每天承載的讀寫請求數達20億條以上。
主要功能特性:
1. 自動讀寫分離,對應用透明
2. 自動分表
3. IP過濾,包括指定具體IP和網段IP
4. SQL語句黑白名單
5. 字符集和默認數據庫的自動修正
6. 可強制讀主庫,避免從庫的同步延遲
7. 主庫宕機的情況下讀操作不受影響
8. 在掛接LVS的情況下可平滑重啟,應用不感知
9. 自動檢測DB狀態,故障或連接不上的DB自動摘除,不再導入請求,在故障或網絡恢復后自動重新導入請求
- 可在線手動將某臺DB設置為上線或下線狀態
- 可在線手動增加或減少一臺DB
- 從庫間加權的負載均衡
附名字來源:
Atlas['?tl?s],希臘神話中雙肩撐天的巨人,普羅米修斯的兄弟,最高大強壯的神之一,因反抗宙斯失敗而被罰頂天。我們期望這個系統能夠腳踏后端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 = 220.181.127.222:3306 #Atlas后端連接的MySQL從庫的IP和端口,可設置多項,用逗號分隔
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、libevent、Lua、OpenSSL
./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
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!