<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[php+sqlrelay+mysql实现连接池及读写负载均衡]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Fri, 01 Jan 2010 09:32:33 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	在大型的web应用中数据库经常成为并发访问的一个瓶颈，为了有效的解决并发访问的瓶颈，利用多台数据库master-slave的模式来增加web的并发访问量。<br/>master-slave模式是为了数据同步的问题。<br/>sqlrelay解决连接池问题以及实现读写分离的均衡负载。<br/>sqlrelay配置3个instance A/B/C，A负责从Master和slave读取数据，B负责写数据，且只写Master，C为router，负责调度应用。<br/>php通过A还是通过B连接数据库。<br/>在实际配置中，由于master承担了读写操作，那么在instance A的配置中，可以把从Master的连接稍微降小，把从slave连接读取数据的连接数稍稍增大以此进行平衡。<br/>一、MySQL master/slave配置<br/>################<br/>#mster/slave配置<br/>################<br/>master:192.168.1.51<br/>slave:192.168.1.50<br/>1、master配置<br/>/etc/my.cnf 中加入<br/>binlog-do-db=book book为数据库名<br/>确保<br/>server-id=1<br/>log-bin=mysql-bin<br/>授权给rep用户进行复制操作<br/>GRANT REPLICATION SLAVE ON book.* TO rep@192.168.1.50 IDENTIFIED BY &#039;123456&#039;;<br/>重启master服务<br/>2、配置slave<br/>vi /etc/my.cnf<br/>设置下面4行<br/>server-id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 2<br/>master-host&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; 192.168.1.51<br/>master-user&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; rep<br/>master-password =&nbsp;&nbsp; 123456<br/>重启slave<br/>3、把master的原始数据导入slave。<br/>二、sqlrelay配置<br/>当前行业中比较流行的连接池解决方案几乎都不支持php，经过多番努力终于在找到了一个开源的连接池技术--------sqlrelay。<br/>sqlreplay支持的语言：<br/>C C++ Perl&nbsp;&nbsp;Python PHP Ruby&nbsp;&nbsp;Java TCL Zope<br/>sqlreplay支持的数据库：<br/>Oracle MySQL mSQL PostgreSQL Sybase MS SQL Server&nbsp;&nbsp; IBM DB2 Interbase Sybase SQLite ODBC MS Access<br/>sqlreplay的网站<br/>http://sqlrelay.sourceforge.net/。<br/><br/><br/>基本思路：<br/>1、配置2个实例用以最终处理业务<br/>clubs-read<br/>clubi-write<br/>其中读取的 instance分别配置两个连接，且两个连接启动对等的连接数。<br/>2、配置一个instance来调度读写操作，即clubr<br/>通过router来区分读写连接不同的mysql数据库。<br/>&lt;?xml version=&quot;1.0&quot;?&gt;<br/>&lt;!DOCTYPE instances SYSTEM &quot;sqlrelay.dtd&quot;&gt;<br/>&lt;instances&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- club Instance --&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;instance id=&quot;clubs&quot; port=&quot;9002&quot; socket=&quot;/tmp/clubs.socket&quot; dbase=&quot;mysql&quot; connections=&quot;10&quot; maxconnections=&quot;20&quot; maxqueuelength=&quot;5&quot; growby=&quot;1&quot; ttl=&quot;60&quot; endofsession=&quot;commit&quot; sessiontimeout=&quot;600&quot; runasuser=&quot;nobody&quot; runasgroup=&quot;nobody&quot; cursors=&quot;5&quot; authtier=&quot;listener&quot; handoff=&quot;pass&quot; deniedips=&quot;&quot; allowedips=&quot;&quot; debug=&quot;none&quot; maxquerysize=&quot;65536&quot; maxstringbindvaluelength=&quot;4000&quot; maxlobbindvaluelength=&quot;71680&quot; idleclienttimeout=&quot;-1&quot; maxlisteners=&quot;-1&quot; listenertimeout=&quot;0&quot;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;users&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;user user=&quot;club&quot; password=&quot;edb:club&quot;/&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/users&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;connections&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;connection connectionid=&quot;master51&quot; string=&quot;host=192.168.1.51;port=3306;db=book;user=club;password=club;&quot; metric=&quot;1&quot; behindloadbalancer=&quot;no&quot;/&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;connection connectionid=&quot;slave50&quot; string=&quot;host=192.168.1.50;port=3306;db=book;user=club;password=club;&quot; metric=&quot;1&quot; behindloadbalancer=&quot;no&quot;/&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/connections&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/instance&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;instance id=&quot;clubi&quot; port=&quot;9003&quot; socket=&quot;/tmp/clubi.socket&quot; dbase=&quot;mysql&quot; connections=&quot;10&quot; maxconnections=&quot;40&quot; maxqueuelength=&quot;5&quot; growby=&quot;1&quot; ttl=&quot;60&quot; endofsession=&quot;commit&quot; sessiontimeout=&quot;600&quot; runasuser=&quot;nobody&quot; runasgroup=&quot;nobody&quot; cursors=&quot;5&quot; authtier=&quot;listener&quot; handoff=&quot;pass&quot; deniedips=&quot;&quot; allowedips=&quot;&quot; debug=&quot;none&quot; maxquerysize=&quot;65536&quot; maxstringbindvaluelength=&quot;4000&quot; maxlobbindvaluelength=&quot;71680&quot; idleclienttimeout=&quot;-1&quot; maxlisteners=&quot;-1&quot; listenertimeout=&quot;0&quot;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;users&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;user user=&quot;club&quot; password=&quot;edb:club&quot;/&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/users&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;connections&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;connection connectionid=&quot;master51&quot; string=&quot;host=192.168.1.51;port=3306;db=book;user=club;password=club;&quot; metric=&quot;1&quot; behindloadbalancer=&quot;no&quot;/&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/connections&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/instance<br/><br/><br/>本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/rushcc2006/archive/2009/11/07/4775135.aspx
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] php+sqlrelay+mysql实现连接池及读写负载均衡]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>