如何在客戶端應用的時候,路由語句.
一般用兩種方法
1: 直接在PHP的mysql類做判斷,最簡單,不用額外加軟件
比如discuz論壇.
2:用集羣中間件
比如官方的mysql_proxy
,還有國產的中間件 amoeba
原理:不管用了多少mysql,程序都是和proxy通信
實戰: mysql 讀寫分離 ,mysql_proxy實現
下載安裝mysql_proxy:
解壓後, 該目錄包含已經編譯好的二進制文件,將解壓後的目錄移動到/user/local/
查看幫助文檔:
先要proxy連接各mysql,先做個負載均衡:
在另一臺機器上連接proxy(注意,端口是4040):
然後就可以操作數據庫了,打開多個客戶端,連接proxy 4040,分別insert數據:
(注意:proxy的均衡不是語句方面的均衡,而是連接上的均衡。比如:連接若干個連接池,當前連的是哪個mysql就操作哪個。語句層面的均衡,容易帶來數據不一致)
讀寫分離:
(-b 192.168.0.199:指定199服務器mysql爲寫。-r 192.168.0.200:3306:指定200服務器mysql爲讀。-s /user/locl/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua:指定讀寫分析腳本)
注意,腳本中有個設置,它有個最小,最大連接,:
實戰: mysql 讀寫分離 ,mysql_proxy實現
下載安裝mysql_proxy:
解壓後, 該目錄包含已經編譯好的二進制文件 .
1: 利用mysql_proxy實現負載均衡
執行mysql_proxy
./mysql-proxy-path/bin/mysql-proxy \
--proxy-backend-addresses=192.168.1.199:3306 \
--proxy-backend-addresses=192.168.1.200:3306
2: 連接mysql_proxy,用mysql客戶就可以,因爲proxy是mysql的前端代理
注意proxy的端口是4040
mysql -h “proxy的IP” -P 4040 -u username -p password
在連接上之後,做sql查詢,卻總是往某1臺mysql server來發送------負載均衡沒體現出來?
答: 不是沒體現出來.
均衡不是體現在sql語句,一會請求mysqlA服,一會請求mysqlB服.
均衡是體現”連接”的均衡上.,
mysql_proxy會把連接mysql服務器的tcp/IP連接緩存進連接池,以提高性能.
在緩存池裏, 緩存的連接大致是平均分配在每臺mysql服務器上.
但具體的每一個連接,始終連某臺服務器.
./bin/mysql-proxy \
--proxy-backend-addresses=192.168.1.199:3306 \
--proxy-read-only-backend-addresses=192.168.1.200:3306 \
--proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
簡寫:
./bin/mysql-proxy -b=192.168.0.199:3306 -r=192.168.0.200:3306 -s=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua