Mysql-proxy實現讀寫分離
讀寫分離,基本的原理是讓主資料庫處理事務性增、改、刪操作(INSERT、UPDATE、DELETE),而從資料庫處理SELECT查詢操作。資料庫複製被用來把事務性操作導致的變更同步到叢集中的從資料庫。資料庫的“寫”(寫10000條資料到oracle可能要3分鐘)操作是比較耗時的。但是資料庫的“讀”(從oracle讀10000條資料可能只要5秒鐘)。所以讀寫分離,解決的是,資料庫的寫入,影響了查詢的效率。資料庫不一定要讀寫分離,如果程式使用資料庫較多時,而更新少,查詢多的情況下會考慮使用,利用資料庫 主從同步 。可以減少資料庫壓力,提高效能。
實驗準備3臺主機:
server2:(master)
server3:(slave)
server4:(proxy)
首先配置好server2/3的主從複製。
安裝mysql-proxy:
mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
[[email protected] ~]# tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
[[email protected] ~]# mv mysql-proxy-0.8.5-linux-el6-x86-64bit /usr/local/mysql-proxy
[[email protected]ver4 ~]# cd /usr/local/mysql-proxy/bin/
[[email protected] bin]# vim ~/.bash_profile
[[email protected] bin]# source ~/.bash_profile
[[email protected] mysql-proxy]# cd share/doc/
[[email protected] doc]# cd mysql-proxy/
[[email protected] mysql-proxy]# vim rw-splitting.lua
min_idle_connections = 1,預設超過4個連線數時,才開始讀寫分離,改為1
max_idle_connections = 2,#預設8,改為2
配置mysql-proxy啟動檔案
[[email protected] conf]# /usr/local/mysql-proxy/bin/mysql-proxy --help ##檢視配置項
[[email protected] ~]# cd /usr/local/mysql-proxy/
[[email protected] mysql-proxy]# mkdir conf
[[email protected] mysql-proxy]# mkdir logs
[[email protected] mysql-proxy]# cd conf/
[[email protected] conf]# vim mysql-proxy.conf
user=root執行mysql-proxy使用者 proxy-address=0.0.0.0:3306 proxy-read-only-backend-addresses=172.25.0.118:3306 指定後端從slave讀取資料 proxy-backend-addresses=172.25.0.117:3306指定後端主master寫入資料 proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua讀 寫分離配置指令碼 admin-lua-script=/usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua管理指令碼 log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log日誌位置 log-level=debug定義log日誌級別,由高到低分別有(error|warning|info|message|debug daemon=true以守護程序方式執行 keepalive=true 崩潰時,嘗試重啟
admin-address=172.25.0.119:4041 ##proxy的管理使用者adminiphe埠 admin-lua-script=/usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua #admin的lua指令碼地址 admin-username=admin #新增admin使用者 admin-password=Westos+123 ## admin使用者的密碼 plugins=proxy,admin #新增admin模組
啟動mysql-proxy:
[[email protected] conf]# chmod 660 /usr/local/mysql-proxy/conf/mysql-proxy.conf
[[email protected] conf]# mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf
測試:
主庫授權:#該使用者必須可以遠端登陸root
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Westos+123';
[[email protected] ~]# mysql -h 172.25.0.117 -u root -p
mysql> use westos
mysql> select * from usertable;
安裝lsof
lsof(list open files)是一個列出當前系統開啟檔案的工具。在linux環境下,任何事物都以檔案的形式存在,通過檔案不僅僅可以訪問常規資料,還可以訪問網路連線 和硬體。所以如傳輸控制協議 (TCP) 和使用者資料報協議 (UDP) 套接字等,系統在後臺都為該應用程式分配了一個檔案描述符,無論這個檔案的本質如何,該檔案描述符為應用程式與基礎作業系統之間的互動提供了通用介面。
[[email protected] ~]# yum install lsof -y
[[email protected] ~]# lsof -i :3306
當連線數大於2(lua指令碼中設定);即啟動了讀寫分離機制:可以登陸admin proxy管理使用者檢視
再開啟一個shell連線mysql
在連線mysql的shell裡新增資訊
mysql> insert into usertable values('user3','333');
通過tcpdump抓取資料分析讀寫分離
[[email protected] ~]# yum install tcpdump -y
[[email protected] ~]# tcpdump -i eth0 port 3306