mysql-proxy實現mysql的讀寫分離

1. mysql proxy 簡介

  • mysql-proxy是mysql官方提供的mysql中間件服務,上游可接入若干個mysql-client,後端可連接若干個mysql-server。
    它使用mysql協議,任何使用mysql-client的上游無需修改任何代碼,即可遷移至mysql-proxy上。
    mysql-proxy最基本的用法,就是作爲一個請求攔截,請求中轉的中間層:
    進一步的,mysql-proxy可以分析與修改請求。攔截查詢和修改結果,需要通過編寫Lua腳本來完成。
    mysql-proxy允許用戶指定Lua腳本對請求進行攔截,對請求進行分析與修改,它還允許用戶指定Lua腳本對服務器的返回結果進行修改,加入一些結果集或者去除一些結果集均可。
    所以說,根本上,mysql-proxy是一個官方提供的框架,具備良好的擴展性,可以用來完成:
    sql攔截與修改
    性能分析與監控
    讀寫分離
    請求路由等

讀寫分離實例

1)我們在進行web開發的時候,往往一臺MySQL服務器是不夠用的,可能需要多臺,web到底連接哪個數據庫?
這要程序員自己寫的代碼來決定的,現在是二臺mysql服務器,如果有多臺或者是N臺呢,靠用php代碼來管理連接數據庫,就太過繁瑣
這裏寫圖片描述
2)mysql proxy就很好解決了這個問題,對於程序端而言,web端的請求,只要到mysql proxy的連接池就OK了,剩下的工作就交給mysql proxy了。對於程序代碼管理來說就簡單多了。
這裏寫圖片描述

基於主從複製進行 mysql 的讀寫分離
主重複制的相關信息可參看的我博客mysql主從複製(基於GTID的主從複製、並行複製、半同步複製)

注:以下實驗是基於mysql 基於GTID 的半同步複製模式進行的在此條件下進行的

實驗拓撲

 master:server11:IP 172.25.21.11
 slave:server12:IP 172.25.21.12
 mysql proxy :server13:IP 172.25.21.13
 mysql 版本:5.7.17-1.el6.x86_64
 musql-proxy 版本:mysql-proxy-0.8.5-linux-el6-x86-64

2. 進行mysql proxy的安裝配置

將mysql-proxy安裝包進行解壓,並移動到指定目錄下

 [root@serve13 mnt]# tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz 
 [root@serve13 mnt]# mv mysql-proxy-0.8.5-linux-el6-x86-64bit /usr/local/mysql-proxy

進行mysql-proxy配置文件的編寫

編輯配置文件

 [root@serve13 ~]# vim /etc/mysql-proxy.conf
 [mysql-proxy]
 user=root   
 proxy-address=0.0.0.0:3306   # 本機監聽的地址及端口
 proxy-backend-addresses=172.25.21.11:3306
                              # 配置讀寫服務器,IP及端口
 proxy-read-only-backend-addresses=172.25.21.12:3306
                              # 配置只讀服務器,IP及端口
 proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
                              # 用這個lua腳本來實現讀寫分離
 admin-lua-script=/usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua                    
                              # admin模塊的lua腳本
 log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log
                              # 服務日誌
 log-level=debug              # 日誌模式設置爲debug模式,方便調試
 keepalive=true               # 持續連接
 daemon=true                  # 打入後臺

這裏寫圖片描述

在/usr/local/mysql-proxy/路徑中建立對應的logs目錄,否則在開啓服務時會出現報錯
還要將mysql-proxy的配置文件的權限修改爲660,否則在開啓服務器時會有權限問題。

 [root@serve13 ~]# mkdir /usr/local/mysql-proxy/logs/
 [root@serve13 ~]# chmod 660 /etc/mysql-proxy.conf 

編輯讀寫分離的lua腳本,方便實驗觀測(生產環境中不需要此操作)

 [root@serve13 mysql-proxy]# vim share/doc/mysql-proxy/rw-splitting.lua38-- connection pool
 if not proxy.global.config.rwsplit then
        proxy.global.config.rwsplit = {
                min_idle_connections = 1, --4
                # 最小連接數,默認值爲4
                max_idle_connections = 1, --8
                # 最大連接數後實現讀寫分離,默認值爲
                is_debug = false
        }
 end

這裏寫圖片描述

3. 啓動服務,並進行測試

直接執行安裝包中的命令進行啓動服務

 [root@serve13 bin]# /usr/local/mysql-proxy/bin/mysql-proxy --help
                # 查看啓動時調用的參數
 [root@serve13 bin]# /usr/local/mysql-proxy/bin/mysql-proxy  \
 > --plugins=admin \       # 模塊選擇
 > --plugins=proxy \
 > --defaults-file=/etc/mysql-proxy.conf \  # 指定配置文件
 > --admin-username=root \   # admin 模塊指定的啓動用戶
 > --admin-password=redhat   # admin 模塊啓用的密碼

這裏寫圖片描述

查看進程及啓動日誌

 [root@serve13 bin]# ps ax  # 查看進程是否啓用
 [root@serve13 bin]# cat /usr/local/mysql-proxy/logs/mysql-proxy.log 
                   # 通過日誌查看運行狀態

ps ax
這裏寫圖片描述
日誌內容
這裏寫圖片描述

可通過admin 模塊來查看proxy 的後端情況

通過 tcpdump,lsof 命令來查看數據包走向

在客戶端進行測試

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章