Mysql讀寫分離


結構圖如下:

wKiom1fyDEeQulXRAAA8LOGwCDk547.png


思路:

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代理服務如何分發用戶的讀寫請求(一旦區分開來,就會一直保持區分)

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