結構圖如下:
思路:
1 讓mysql-proxy服務監聽3306端口
2 在後端的數據庫服務器1.1與1.2上做用戶授權
3 爲保證用戶能夠看到寫入的數據,把負責讀寫操作的數據庫服務器做成主從同步的結構
1、數據庫服務器讀寫分離配置
1)開啓數據庫服務
service mysqld start
2)所有數據庫創建庫、表結構一致,設置表記錄初始值不一樣(驗證代理是否實現讀寫分離)
進入IP 1.1與1.2數據庫服務器創建庫、表結構一致,表記錄不一樣。
[root@data ~]mysql -uroot -p
mysql> create database test300; //在IP 1.1與1.2上創建相同庫
mysql> create table test300.a (id int); //同上創建相同表結構
mysql>insert into test300.a values(1); //IP 1.1插入記錄是1
mysql>insert into test300.a values(2); //IP 1.2插入記錄是2
3)在兩臺數據庫服務器上分別授權允許代理服務器連接自己
在IP 1.1與1.2上做相同的授權給同一個用戶,@地址是匹配所有
mysql>grant all on *.* to proxyuser@’%’identifiedby‘123’;
4)測試授權用戶能否從mysql代理服務器訪問後端的2臺數據庫服務器
在代理服務器192.168.1.254上登陸
[root@data ~]mysql -h192.168.1.1 -uproxyuser -p123
[root@file ~]mysql -h192.168.1.2 -uproxyuser -p123
2、安裝mysql-proxy並配置
1)mysql-proxy(代理軟件)
客戶端將請求發給代理,由代理區分讀寫操作,將讀操作發送給從數據庫服務器,寫操作發送給主數據庫服務器
mysql –hmysql-proxy的ip –u用戶名 –p密碼 //客戶端直接訪問IP 1.254
2)停止代理服務器的mysql服務,釋放3306端口,給mysql-proxy代理軟件用
#service mysql stop #chkconfig --level 35 mysql off
安裝需要軟件包
**linux6中lua,lua-devel已包含在mysql-proxy中
lua-5.0.2-1.el5.rf.i386.rpm
lua-devel-5.0.2-1.el5.rf.i386.rpm
mysql-proxy-0.8.3-linux-rhel5-x86-64bit.tar.gz
mysql-proxy 默認監聽3306端口
3)安裝提供代理服務的軟件mysql-proxy
mysql-proxy軟件是用lua語言編寫,所以系統上必須安裝lua包
[root@dai ~]# rpm -qa | grep lua
lua-devel-5.0.2-1.el5.rf
lua-5.0.2-1.el5.rf
解壓mysql-proxy包到指定位置下
[root@seven~]# tar -zxvf mysql-proxy-0.8.3...64bit.tar.gz -C /usr/local/
[root@seven~]# cd /usr/local
[root@sevenlocal]# mv mysql-proxy... mysql-proxy //將文件夾改名,方便訪問
/usr/local/mysql-proxy下的文件夾的作用
bin 啓動服務腳本
include 頭文件
share 功能腳本
lib 庫文件
libexec 可執行命令
#ls mysql-proxy/share/doc/mysql-proxy/
rw-splitting.lua //實現讀寫分離功能的腳本
#ll /usr/local/proxy/share/doc/mysql-proxy/rw-splitting.lua //查看權限限
#chmod +x /usr/local/proxy/share/doc/mysql-proxy/rw-splitting.lua //添加執行權限
4)啓動代理服務
格式:./mysql-proxy –P 代理服務器ip:指定端口 -r 讀服務器ip:指定端口 -b 寫服務器ip:端口 -s(調用執行腳本) /usr/local/mysql-proxy/share/doc/mysql-proxy/ rw-splitting.lua &
說明:&表示後臺運行
[root@sevenbin]# /usr/local/mysql-proxy/bin/mysql-proxy \
-P 192.168.1.254:3306 -r 192.168.1.2:3306 -b 192.168.1.1:3306 \
-s /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua &
2014-02-18 14:26:51: (critical) plugin proxy 0.8.3started //出這句代表成功
停止:只能殺進程 #pkill -9 mysql-proxy
殺進程號 #kill 9 %1
5)查看mysql代理服務是否處於運行狀態
[root@dai~]# jobs //查看後臺是否運行
[1]+ Running /usr/local/mysql-proxy/bin/mysql-proxy-P 192.168.1.254:3306 -r 192.168.1.23:3306 -b 192.168.1.100:3306 -s/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua &
6)測試mysql代理服務器的讀寫分離功能
**proxy服務器也需創建與1.1、1.2數據庫服務器庫、表結構一致的庫表。
客戶端用授權賬號連接代理服務器,代理服務器自動連接數據庫服務器測試讀寫分離
# mysql -h192.168.1.254 -uproxyuser -p123
mysql>insert into test300.a vales(100);//因沒有到併發數,此時客戶端和1.1上都能看到100這條記錄。
在客戶機上開5或6個終端分別如下操作:
# mysql -h192.168.1.3 -uproxyuser -p123
mysql> select * from test300.a;
當第5或第6個終端的時候,因爲達到了併發數,再執行select * from test300.a;語句,只能看到:1.2中的記錄,再插入記錄後,記錄會寫入負責寫的服務器1.1,客戶端將看不到這條記錄。
7)若想客戶端立馬看到,還需將寫讀的服務器,做成主從服務器
寫服務器192.168.1.1:→主服務器
讀服務器192.168.1.2:→從服務器
在主服務器上授權從服務器:
# mysql -uroot -p123456
mysql> grant all on *.* to [email protected] identified by ‘123’;
從服務器上登錄:
# mysql -h192.168.1.1 -uroot -p123
mysql> select * from test300.a;
此時,客戶機上插入記錄,1.2上就能立馬看到了
8)修改主配置文件—併發數
** 併發數不能設置爲0**
#vim /usr/local/mysqlproxy/share/doc/mysql-proxy/rw-splitting.lua
min_idle_connections = 4
max_idle_connections = 8
問答:
1 mysql代理服務器的併發連接達到(4或4+1)個時(區分用戶的讀寫操作)
2 當用戶的併發連接數沒有超過指定的最小併發連接閥值時,mysql代理服務器如何分發用戶的讀寫請求(主)
3 當用戶的併發連接數超過最小併發連接閥值時,是否能否按照啓動mysql代理服務時指定的設置分發用 戶的讀寫請求(能)
4 當用戶的併發連接數大於4時,區分用戶的讀寫操作,當用戶的併發連接數恢復小於最小併發連接數 後,mysql代理服務如何分發用戶的讀寫請求(一旦區分開來,就會一直保持區分)