php+sqlrelay+mysql實現串連池及讀寫負載平衡

來源:互聯網
上載者:User

在大型的web應用中資料庫經常成為並發訪問的一個瓶頸,為了有效解決並發訪問的瓶頸,利用多台資料庫master-slave的模式來增加web的並發訪問量。
master-slave模式是為了資料同步的問題。
sqlrelay解決串連池問題以及實現讀寫分離的均衡負載。
sqlrelay配置3個instance A/B/C,A負責從Master和slave讀取資料,B負責寫資料,且唯寫Master,C為router,負責調度應用。
php通過A還是通過B串連資料庫。
在實際配置中,由於master承擔了讀寫操作,那麼在instance A的配置中,可以把從Master的串連稍微降小,把從slave串連讀取資料的串連數稍稍增大以此進行平衡。
一、MySQL master/slave配置
################
#mster/slave配置
################
master:192.168.1.51
slave:192.168.1.50
1、master配置
/etc/my.cnf 中加入
binlog-do-db=book book為資料庫名
確保
server-id=1
log-bin=mysql-bin
授權給rep使用者進行複製操作
GRANT REPLICATION SLAVE ON book.* TO rep@192.168.1.50 IDENTIFIED BY '123456';
重啟master服務
2、配置slave
vi /etc/my.cnf
設定下面4行
server-id = 2
master-host = 192.168.1.51
master-user = rep
master-password = 123456
重啟slave
3、把master的未經處理資料匯入slave。
二、sqlrelay配置
當前行業中比較流行的串連池解決方案幾乎都不支援php,經過多番努力終於在找到了一個開源的串連池技術--------sqlrelay。
sqlreplay支援的語言:
C C++ Perl Python PHP Ruby Java TCL Zope
sqlreplay支援的資料庫:
Oracle MySQL mSQL PostgreSQL Sybase MS SQL Server IBM DB2 Interbase Sybase SQLite ODBC MS Access
sqlreplay的網站
http://sqlrelay.sourceforge.net/。

基本思路:
1、配置2個執行個體用以最終處理業務
clubs-read
clubi-write
其中讀取的 instance分別配置兩個串連,且兩個串連啟動對等的串連數。
2、配置一個instance來調度讀寫操作,即clubr
通過router來區分讀寫串連不同的mysql資料庫。

<?xml version="1.0"?>
<!DOCTYPE instances SYSTEM "sqlrelay.dtd">
<instances>
<!-- club Instance -->
<instance id="clubs" port="9002" socket="/tmp/clubs.socket" dbase="mysql" connections="10" maxconnections="20" maxqueuelength="5" growby="1" ttl="60" endofsession="commit" sessiontimeout="600" runasuser="nobody" runasgroup="nobody" cursors="5" authtier="listener"
handoff="pass" deniedips="" allowedips="" debug="none" maxquerysize="65536" maxstringbindvaluelength="4000" maxlobbindvaluelength="71680" idleclienttimeout="-1" maxlisteners="-1" listenertimeout="0">
<users>
<user user="club" password="edb:club"/>
</users>
<connections>
<connection connectionid="master51" string="host=192.168.1.51;port=3306;db=book;user=club;password=club;" metric="1" behindloadbalancer="no"/>
<connection connectionid="slave50" string="host=192.168.1.50;port=3306;db=book;user=club;password=club;" metric="1" behindloadbalancer="no"/>
</connections>
</instance>
<instance id="clubi" port="9003" socket="/tmp/clubi.socket" dbase="mysql" connections="10" maxconnections="40" maxqueuelength="5" growby="1" ttl="60" endofsession="commit" sessiontimeout="600" runasuser="nobody" runasgroup="nobody" cursors="5" authtier="listener"
handoff="pass" deniedips="" allowedips="" debug="none" maxquerysize="65536" maxstringbindvaluelength="4000" maxlobbindvaluelength="71680" idleclienttimeout="-1" maxlisteners="-1" listenertimeout="0">
<users>
<user user="club" password="edb:club"/>
</users>
<connections>
<connection connectionid="master51" string="host=192.168.1.51;port=3306;db=book;user=club;password=club;" metric="1" behindloadbalancer="no"/>
</connections>
</instance>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.