配置php下的mysql连接池-sqlrelay

作者 : admin 于 2010年05月20日, 22:13:50
2010
05-20

本文主要介绍sqlrelay的配置安装。通过其性能和一些具体环境的测试来帮助开发者应用在相应的场合中去应付大并发的mysql数据库连接。

什么是sqlrelay?

Sqlrelay是一个开源的数据库连接池软件。它可以预建立数据库连接,同时可作为数据库连接代理和负载均衡器使用。

SQL Relay is a persistent database connection pooling, proxying and load balancing system for Unix and Linux.

Sqlrelay项目主页 http://sqlrelay.sourceforge.net/
Sqlrelay源码下载 http://sqlrelay.sourceforge.net/download.html

Sqlrelay原理示意:

连接池示意图:

pool

负载均衡示意图:

router

1、 sqlrelay的安装

下载源代码(因为不能yum或者apt-get)
#wget http://prdownloads.sourceforge.net/sqlrelay/sqlrelay-0.41.tar.gz?download
解压缩
#tar –zxvf sqlrelay-0.41.tar.gz
配置
#cd sqlrelay-0.41
#./configure –prefix=/opt/sqlrelay –with-mysql-prefix=/opt/mysql-5.0.22 –with-php-prefix=/opt/php-5.2.6 –disable-python
注释:因为我用的python版本跟sqlrelay版本稍有纠结,所以显式得去声明不增加python下的api。
为啥我软件编译目标路径是/opt,我也不知道,也许第一次看见某人这么做的,我也就一直这么做。大家别问了,没啥道理,其实编译到 /shit 下边,也不影响正常的运行。
查看编译好的文件:
#cd /opt/sqlrelay
#ls
Bin etc include lib share var
如果出现下列目录,安装“基本完毕”。
2、 sqlrelay的配置
sqlrelay有个问题,如果指定了prefix,而$prefix/bin/目录如果不在环境变量中,则主进程运行是有问题的。因为,编译完后,我们在/etc/profile中增加一条命令:
PATH=$PATH:/opt/sqlrelay/bin #此目录就是你prefix的目录

配置文件:

  1. < ?xml version="1.0"?>
  2. < !DOCTYPE instances SYSTEM "sqlrelay.dtd">
  3. <instances>
  4. <instance id="mysqlpool" port="9002" socket="/tmp/sqlrelay.socket" dbase="mysql" connections="20" maxconnections="50" maxqueuelength="5" growby="1" ttl="60" maxsessioncount="10" 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" reloginatstart="no" timequeriessec="-1" timequeriesusec="-1">
  5. </instance>
  6. </instances>

这样,就配置了一个id为mysqlpool的连接池。
Port=9002 sqlrelay提供服务的端口是 9002
Dbase=mysql 要连接mysql
Connections=20 起始创建20个连接
Maxconnections=50 最大连接数 50
其他参数可以自己琢磨,在具体应用中还需要修改后边的参数,都啥含义,看字面或者看手册皆可。

启动sqlrelay:
#./sqlr-start –id mysqlpool //启动刚才定义的id为mysqlpool的连接池
关闭sqlrelay
#./sqlr-stop

3、 sqlrelayPHP api的配置

sqlrelay的PHP api扩展在编译的时候已经生成,在php的./lib/php/extensions/no-debug-non-zts-20060613/ 目录下,修改php.ini中extension_dir的值:extension_dir=”/opt/php-5.2.6/lib/php/extensions/no-debug-non-zts-20060613/”
而后增加引用声明:extension=sql_relay.so

重启php,执行 php –m 查看是否有 sql_relay 如果有,则证明配置成功。

4、sqlrelay的使用

$con=sqlrcon_alloc(“mysqlpool”,9002,””,”root”,”123456”,0,1);
Var_dump($con);

这样,利用sqlrelay的phpapi,就可以跟mysql建立链接。

————————————————————————————————-

另求高并发的测试环境搭建方案,有经验的朋友可以提供相关信息。注:本人只有非常SB的惠普V3000系列高发热强雪花屏笔记本一台做测试环境。