Docker-Mysql-proxy Mysql Proxy實現讀寫分離

 

Docker-Mysql-proxy Mysql實現讀寫分離與負載

原理

  • MySQL Proxy處於客戶端應用程序和MySQL服務器之間,經過截斷、改變並轉發客戶端和後端數據庫之間的通訊來實現其功能。
  • MySQL Proxy就是這麼一箇中間層代理,簡單的說,MySQL Proxy就是一個鏈接池,負責將前臺應用的鏈接請求轉發給後臺的數據庫,而且經過使用lua腳本,能夠實現複雜的鏈接控制和過濾,從而實現讀寫分離負載平衡。對於應用來講,MySQL Proxy是徹底透明的,應用則只須要鏈接到MySQL Proxy的監聽端口便可。固然,這樣proxy機器可能成爲單點失效,但徹底可使用多個proxy機器作爲冗餘,在應用服務器的鏈接池配置中配置到多個proxy的鏈接參數便可。

負載解析

  • mysql-proxy負載均衡是體如今「鏈接」的均衡上。mysql_proxy會把鏈接mysql服務器的TCP/IP鏈接緩存進鏈接池以提升性能在緩存池裏,緩存的鏈接大體是平均分配在每臺mysql服務器上,但具體的每個鏈接,始終鏈接某臺服務器。因此在出現了mysql的sql查詢時,卻總往某一臺mysql server來發送是這麼回事的。

資源

準備

  1. 2個正在運行的mysql。
  2. 一個centos,部署mysql-proxy。
  3. ngvicat,用於測試。

配置

  1. 經過docker啓動2個運行的mysql環境
docker run -tid -p 3307:3306 --name mysql_master -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6
docker run -tid -p 3308:3306 --name mysql_slave -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6

   2. 配置mysql-proxymysql

wget https://downloads.mysql.com/archives/get/file/mysql-proxy-0.8.5-linux-debian6.0-x86-64bit.tar.gz
tar zxvf mysql-proxy-0.8.5-linux-debian6.0-x86-64bit.tar.gz
mv mysql-proxy-0.8.5-linux-debian6.0-x86-64bit mysql-proxy cd /usr/local/mysql-proxy mkdir lua #建立腳本存放目錄 mkdir logs #建立日誌目錄 touch logs/mysql-proxy.log chmod 777 logs/mysql-proxy.log cp share/doc/mysql-proxy/rw-splitting.lua ./lua #複製讀寫分離配置文件 cp share/doc/mysql-proxy/admin-sql.lua ./lua #複製管理腳本
vi /etc/mysql-proxy.cnf   #建立配置文件

  3. 配置文件linux

[mysql-proxy]
user=root #運行mysql-proxy用戶 log-level=info #定義log日誌級別,由高到低分別有(error|warning|info|message|debug) log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log #日誌位置 proxy-address=172.17.0.5:4040 #mysql-proxy運行ip和端口,不加端口,默認4040 proxy-backend-addresses=172.17.0.2:3306 #指定後端主master寫入數據 proxy-read-only-backend-addresses=172.17.0.3:3306 #指定後端從slave讀取數據 proxy-lua-script=/usr/local/mysql-proxy/lua/rw-splitting.lua #指定讀寫分離配置文件位置 admin-lua-script=/usr/local/mysql-proxy/lua/admin-sql.lua #指定管理腳本 daemon=true #以守護進程方式運行 keepalive=true #mysql-proxy崩潰時,嘗試重啓
   4. 配置完成,保存退出!
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
 

注意

  • 配置文件中的注視不能保留,不然啓動的的時候可能報錯。
  • 使用下列第一種啓用方式則不須要配置,但一般狀況下,咱們則會使用配置文件啓動。 

啓動方式2種

  1. 經過命令行啓動
/usr/local/mysql-proxy/bin/mysql-proxy --proxy-backend-addresses=172.17.0.5:3306 --proxy-backend-addresses=172.17.0.3:3306 --proxy-backend-addresses=172.17.0.2:3306
  1. 經過配置文件啓動
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/etc/mysql-proxy.cnf &

加&是置於後臺運行。

測試

 
 
 

出現錯誤分析

  1. mysql-proxy代理的服務器中(邏輯數據庫)不能鏈接到其餘兩臺服務器(物理數據庫)。可能緣由:3者未處於同一網橋中。解決方法:要麼不創建網絡network,要麼建立於同一個network中。
 
  1. 經過配置文件啓動報以下錯誤。解決方法:賦予配置文件600權限便可。chmod 600 /etc/mysql-proxy.cnf。 
  1. 服務未正常啓動,查看對應的日誌文件。可能錯誤,配置中存在註釋,致使出現多個日誌文件,存在錯誤。
 
  1. 檢查配置文件中的lua文件是否存在對應的目錄中,若是沒有則複製進去。
 
相關文章
相關標籤/搜索