標籤:mysql 讀寫分離
結構圖如下:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/88/5C/wKiom1fyDEeQulXRAAA8LOGwCDk547.png" title="123.png" alt="wKiom1fyDEeQulXRAAA8LOGwCDk547.png" />
思路:
1 讓mysql-proxy服務監聽3306連接埠
2 在後端的資料庫伺服器1.1與1.2上做使用者授權
3 為保證使用者能夠看到寫入的資料,把負責讀寫操作的資料庫伺服器做成主從同步的結構
1、資料庫伺服器讀寫分離配置
1)開啟資料庫服務
service mysqld start
2)所有資料庫建立庫、表結構一致,設定表記錄初始值不一樣(驗證代理是否實現讀寫分離)
進入IP 1.1與1.2資料庫伺服器建立庫、表結構一致,表記錄不一樣。
[[email protected] ~]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)在兩台資料庫伺服器上分別授權允許Proxy 伺服器串連自己
在IP 1.1與1.2上做相同的授權給同一個使用者,@地址是匹配所有
mysql>grant all on *.* to [email protected]’%’identifiedby‘123’;
4)測試授權使用者能否從mysqlProxy 伺服器訪問後端的2台資料庫伺服器
在Proxy 伺服器192.168.1.254上登陸
[[email protected] ~]mysql -h192.168.1.1 -uproxyuser -p123
[[email protected] ~]mysql -h192.168.1.2 -uproxyuser -p123
2、安裝mysql-proxy並配置
1)mysql-proxy(代理軟體)
用戶端將請求發給代理,由代理區分讀寫操作,將讀操作發送給從資料庫伺服器,寫操作發送給主要資料庫伺服器
mysql –hmysql-proxy的ip –u使用者名稱 –p密碼 //用戶端直接存取IP 1.254
2)停止Proxy 伺服器的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包
[[email protected] ~]# rpm -qa | grep lua
lua-devel-5.0.2-1.el5.rf
lua-5.0.2-1.el5.rf
解壓mysql-proxy包到指定位置下
[[email protected]~]# tar -zxvf mysql-proxy-0.8.3...64bit.tar.gz -C /usr/local/
[[email protected]~]# cd /usr/local
[[email protected]]# 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 Proxy 伺服器ip:指定連接埠 -r 讀伺服器ip:指定連接埠 -b 寫伺服器ip:連接埠 -s(掉用執行指令碼)../usr/local/mysql-proxy/share/doc/mysql-proxy/ rw-splitting.lua &
說明:&表示後台運行
[[email protected]]# /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代理服務是否處於運行狀態
[[email protected]~]# 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)測試mysqlProxy 伺服器的讀寫分離功能
**proxy伺服器也需建立與1.1、1.2資料庫伺服器庫、表結構一致的庫表。
用戶端用授權帳號串連Proxy 伺服器,Proxy 伺服器自動連接資料庫伺服器測試讀寫分離
# 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 mysqlProxy 伺服器的並發串連達到(4或4+1)個時(區分使用者的讀寫操作)
2 當使用者的並發串連數沒有超過指定的最小並發串連閥值時,mysqlProxy 伺服器如何分發使用者的讀寫請求(主)
3 當使用者的並發串連數超過最小並發串連閥值時,是否能否按照啟動mysql代理服務時指定的設定分發用 戶的讀寫請求(能)
4 當使用者的並發串連數大於4時,區分使用者的讀寫操作,當使用者的並發串連數恢複小於最小並發串連數 後,mysql代理服務如何分發使用者的讀寫請求(一旦區分開來,就會一直保持區分)
本文出自 “Dave-技術部落格” 部落格,請務必保留此出處http://davewang.blog.51cto.com/6974997/1858580
Mysql讀寫分離