Sql Relay

Sql Realy是SF上的一个项目,它实现了数据库连接池,同时它也可以实现负载均衡,按照文档的说法”In effect, SQL Relay is a very specialized Load Balancer”.
连接池可以有效的减少连接带来的开销,因此Sql Relay和Mysql一起使用,似乎是个不错的主意.除了连接的开销,大量并发读写造成的锁表问题也是优化Mysql时要考虑的问题,我们在提高Mysql数据库应付大并发访问能力的时候,一个常见的方法是使用Master-Slave结构使读写分开,主写从读,从而避免大量读操作造成的锁表,必要时可以使用多个Slave服务器来分担压力,虽然Sql Relay可以作为一个load balancer,但是它并不能区分一个操作是读还是写,因此,我们可以用Sql Relay来专门对付那些Slave.
Sql Relay可以在SF上下载,同时还需要Rudiments.

安装过程:
解压缩,首先安装Rudiments,非常简单,make;make install就搞定
然后安装Sql Relay,注意本机上需要首先安装Mysql,因为Sql Relay在安装的时候需要Mysql的一些include和lib中的文件.
在configure时指定Sql Relay和Mysql的安装路径:
configure –prefix=/usr/local/sqlrelay –with-mysql-prefix=/usr/local/mysql/
然后 make 和make install

配置
到etc目录中,cp sqlrelay.conf.example sqlrelay.conf

修改sqlrelay.conf文件:

<?xml version="1.0"?>
<!DOCTYPE instances SYSTEM "sqlrelay.dtd">

<instances>

<instance id="slave_mysql" port="9000" socket="/tmp/slave_mysql.socket" dbase="mysql" connections="3" maxconnections="15" 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">
<users>
<user user="username" password="passwd"/>
</users>
<connections>
<connection connectionid="slave_mysql" string="host=host;port=3306;db=dbname;user=dbusername1;password=dbpasswd1;" metric="1" behindloadbalancer="no"/>
<connection connectionid="slave_mysql" string="host=host;port=3306;db=dbname;user=dbusername2;password=dbpasswd2;" metric="1" behindloadbalancer="no"/>
</connections>
</instance>

</instances>

其中:
connectionid为自己定义的连接名称
user,passwd为使用Sql Relay时的用户名称和密码
dbusername,dbpasswd为对应数据库的用户名称和密码
metric为Sql Relay在连接Mysql时对不用服务器的连接比率,例子中比率为1:1.注意,需要负载均衡的时候,两个connection的connectionid是一样的.

为了配合PEAR使用,要把源码目录下的src/api/phppeardb/sqlrelay.php文件拷贝到DB目录中,修改Pear_DB的连接为
DB::connect(”sqlrelay://username:passwd@locahost:9000/dbname”);

启动
到sqlrelay/bin/目录下执行:
sqlr-start -id=slave_mysql
到此,Sql Relay就配置完成了,如果不出意外,你可以使用你的mysql pool+ slave load balancer了.

0 comments ↓

目前还木有人敢评论,看你的了.

说吧。。。