php+sqlrelay+mysql实现连接池及读写负载均衡
2013-05-09 11:39
711 查看
在大型的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>
相关文章推荐
- php+sqlrelay+mysql实现连接池及读写负载均衡
- php+sqlrelay+mysql实现连接池及读写负载均衡
- php+sqlrelay+mysql实现连接池及读写负载均衡
- 【mysql连接池】之php+sqlrelay+mysql实现连接池及读写负载均衡 .
- PHP+Mysql实现多关键字与多字段生成SQL语句的函数
- PHP Yaf + Swoole 实现MySQL 连接池
- mysql-proxy主从服务架构下读写分离和负载均衡实现及原理
- php 实现Mysql读写分离操作及数据库连接类
- mysql-proxy主从服务架构下读写分离和负载均衡实现及原理
- Ameoba实现MySQL读写分离及负载均衡
- php实现从mysql备份sql文件中提取特定数据
- mysql-mmm配合amoeba实现高可用、读写分离及负载均衡
- mysql-proxy主从服务架构下读写分离和负载均衡实现及原理
- PHP+Mysql实现多关键字与多字段生成SQL语句的函数
- MYSQL参数调优之见解分析,mysql主从(读写)分离来实现负载均衡
- 如果编程语言(例如PHP)和SQL(例如MySQL)都能实现某个功能,我们是用编程语言实现还是SQL?
- Mysql通过配置主从,读写分离简单实现数据备份,负载均衡
- 用swoole实现mysql的连接池--摘自https://github.com/153734009/doc/blob/master/php/mysql_pool.php
- mysql导入source数据库sql的C++实现和封装
- php 实现 连接池