Mysql讀寫分離

來源:互聯網
上載者:User

標籤: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讀寫分離

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.