【mysql連接池】之php+sqlrelay+mysql實現連接池及讀寫負載均衡 .

在大型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 [email protected] 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章