架構圖
WX20171113-131232@2x.png
介紹
- 處于client端和MySQL server端之間的應用
- 可以監(jiān)測歉铝、分析或改變它們的通信
- 使用靈活盈简,沒有限制,常見的用途包括:負載平衡太示,故障柠贤、查詢分析,查詢過濾和修改等等
MySQL-Proxy就是這么一個中間層代理先匪,簡單的說种吸,MySQL-Proxy就是一個連接池弃衍,負責將前臺應用的連接請求轉發(fā)給后臺的數據庫呀非,
并且通過使用lua腳本,可以實現(xiàn)復雜的連接控制和過濾镜盯,從而實現(xiàn)讀寫分離和負載平衡岸裙。對于應用來說,MySQL-Proxy是完全透明的速缆,應用則只需要連接到MySQL-Proxy的監(jiān)聽端口即可降允。當然,這樣proxy機器可能成為單點失效艺糜,但完全可以使用多個proxy機器做為冗
余剧董,在應用服務器的連接池配置中配置到多個proxy的連接參數即可。
缺點
-
通過lua腳本實現(xiàn)的讀寫分離破停,不太穩(wěn)定翅楼,官網不建議用
MySQL Proxy is not GA, and is not recommended for Production use.
還處于 alpha 版本
配置方法
基于 Docker
環(huán)境描述:
- 操作系統(tǒng):Ubuntu 14.04
- master 寫服務器:172.17.0.4
- slave 讀服務器:172.17.0.5
- 調度服務器MySQL-Proxy:172.17.0.6
1. MySQL 主從復制
2. MySQL-Proxy 配置
-
安裝 mysql-proxy
下載:mysqp-proxy
-
解壓到指定目錄
tar -zxvf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz mv mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit /usr/local/mysql-proxy
-
配置 mysql-proxy
-
執(zhí)行命令
cd /usr/local/mysql-proxy mkdir lua #創(chuàng)建腳本存放目錄 mkdir logs #創(chuàng)建日志目錄 cp share/doc/mysql-proxy/rw-splitting.lua ./lua #復制讀寫分離配置文件 cp share/doc/mysql-proxy/admin-sql.lua ./lua #復制管理腳本
-
配置文件
創(chuàng)建配置文件 /etc/mysql-proxy.cnf
[mysql-proxy] user = root #運行mysql-proxy用戶 admin-username = proxy #主從mysql共有的用戶 admin-password = 123456 #用戶的密碼 proxy-address = 172.17.0.6:4000 #mysql-proxy運行ip和端口,不加端口真慢,默認4040 proxy-read-only-backend-addresses = 172.17.0.5 #指定后端從slave讀取數據 proxy-backend-addresses = 172.17.0.4 #指定后端主master寫入數據 proxy-lua-script = /usr/local/mysql-proxy/lua/rw-splitting.lua #指定讀寫分離配置文件位置 admin-lua-script = /usr/local/mysql-proxy/lua/admin-sql.lua #指定管理腳本 log-file = /usr/local/mysql-proxy/logs/mysql-proxy.log #日志位置 log-level = info #定義log日志級別毅臊,由高到低分別有(error|warning|info|message|debug) daemon = true #以守護進程方式運行 keepalive = true #mysql-proxy崩潰時,嘗試重啟
然后設置 mysql-proxy.cnf 權限:
chmod 660 /etc/mysql-porxy.cnf
-
-
配置讀寫分離腳本
vi /usr/local/mysql-proxy/lua/rw-splitting.lua
if not proxy.global.config.rwsplit then proxy.global.config.rwsplit = { min_idle_connections = 1, #默認超過4個連接數時黑界,才開始讀寫分離管嬉,改為1 max_idle_connections = 1, #默認8,改為1 is_debug = false } end
方便測試
-
啟動 mysql-proxy
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/etc/mysql-proxy.cnf
驗證是否啟動:
netstat -tupln | grep 4000
關閉命令:
killall -9 mysql-proxy
-
創(chuàng)建用戶
- 在主服務器創(chuàng)建proxy用戶用于mysql-proxy使用朗鸠,從服務器也會同步這個操作
mysql> CREATE USER proxy; mysql> GRANT ALL ON *.* TO proxy IDENTIFIED BY '123456';
-
測試讀寫分離
- 先暫時停掉主從復制
- 在 master 節(jié)點插入數據蚯撩,然后通過 mysql-proxy 查詢
- 在 slave 節(jié)點插入數據,然后通過 mysql-proxy 查詢