Atlas 是 360 開源的基於 MySQL 協議的中間件,支援讀寫分離、負載均衡、SQL 審計、分表分庫。本文記錄雙主一從環境下部署 Atlas 2.2 實現讀寫分離的完整步驟。
| 角色 | IP | 說明 |
|---|---|---|
| MySQL Master | 192.168.29.128 | 寫入主庫 |
| MySQL Slave | 192.168.29.129 | 讀取從庫 |
| Atlas Proxy | 192.168.29.130 | 中間件部署節點 |
前置條件:Master/Slave 已配置好主從同步 (參考 ID 175197)。
# 官方 Release: https://github.com/Qihoo360/Atlas/releases # 選擇對應 OS 版本 (此處 CentOS 6 x64) wget https://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el6.x86_64.rpm rpm -ivh Atlas-2.2.1.el6.x86_64.rpm # 安裝目錄: /usr/local/mysql-proxy
/usr/local/mysql-proxy/conf/test.cnf[mysql-proxy] # 管理介面用戶/密碼 (預設 admin/admin) admin-username = admin admin-password = admin # 實例名稱 (需與啟動參數一致) instance = test # 監聽地址 (客戶端連接埠) proxy-address = 0.0.0.0:1234 # 管理介面埠 admin-address = 0.0.0.0:2345 # 後端主庫 (寫入) - 可多個逗號分隔 proxy-backend-addresses = 192.168.29.128:3306 # 後端從庫 (唯讀) - @權重 用於負載均衡 proxy-read-only-backend-addresses = 192.168.29.129:3306@1 # 用戶名:加密密碼 (主從需同帳號同密碼) # 密碼加密: /usr/local/mysql-proxy/bin/encrypt '123456' -> /iZxz+0GRoA= pwds = root:/iZxz+0GRoA= # 運行模式: true=守護進程, false=前台調試 daemon = true # 字元集 charset = utf8 # SQL 日誌: OFF/ON/REALTIME (調試用 REALTIME) sql-log = REALTIME # 日誌路徑: /usr/local/mysql-proxy/log/
cd /usr/local/mysql-proxy/bin ./mysql-proxyd test start # 啟動 (test 為 instance 名) ./mysql-proxyd test restart # 重啟 ./mysql-proxyd test stop # 停止 # 檢查進程 ps -ef | grep mysql-proxy
# 連接 Atlas 代理埠 (非 MySQL 原生 3306) mysql -h 192.168.29.130 -P 1234 -u root -p123456 # 執行寫入 -> 應路由至 Master CREATE DATABASE test_atlas; USE test_atlas; CREATE TABLE t (id INT); INSERT INTO t VALUES (1); # 執行讀取 -> 應路由至 Slave SELECT * FROM t; SHOW PROCESSLIST; -- 觀察連接來源 IP
查看 Atlas 日誌 /usr/local/mysql-proxy/log/ 可見寫操作導向 Master、讀操作導向 Slave。
mysql -h 192.168.29.130 -P 2345 -u admin -padmin SELECT * FROM help; -- 查看所有管理命令 -- 例: SELECT * FROM backends; -- 查看後端節點狀態
SELECT (含 SELECT ... FOR UPDATE 視為寫)、是否在事務中 (事務內全部走主庫)、sql-log=REALTIME 觀察路由日誌。/*master*/ SELECT ... 註解提示),或使用半同步複制降低延遲。