日期:2014-05-16 浏览次数:20732 次
近来公司做了一个计费系统,每天产生的CDR数据较多,数据读写要求比较高,在此基础上,采用了数据读写分离策略,来缓解数据库的压力。
应用环境
1、mysql-proxy,采用了开发框架amoeba,mysql-proxy负责管理client实际访问database的路由策略,实现数据的读写分离。
2、数据库集群环境,database集群采用了mysql的master-slave的replication方案。
3、客户端的应用程序,基于c3p0连接mysql-proxy。
结构示意图
?
实战
一、搭建mysql的master-slave环境
1、分别在192.168.1.132(master)和192.168.1.128(slave)安装mysql数据库,本实例在CentOS5.3的环境下,mysql数据库为mysql-5.1.51.tar.gz版本。
2、配置master
??? a、修改master的/etc/my.cnf文件,添加
????????? log-bin=mysql-bin????????????????????????????????????????????? #slave会基于此log-bin来做replication
????????? server-id=1??????????????????????????????????????????????????????? #master的标示
????????? binlog-do-db = billing???????????????????????????????????????? #用于master-slave的具体数据库
?
????b、开启mysql的日志文件,方便排错(可选)
????????? log-error=/usr/local/mysql/log/error.log?????????????????????? #错误日志?
????????? log=/usr/local/mysql/log/mysql.log?????????????????????????????? #查询日志
????????? long_query_time=2??????????????????????????????????????????????????????#慢查询日志,指执行超过多久的sql会被log下来,这里是2秒
????????? log-slow-queries=/usr/local/mysql/log/slowquery.log??#将查询返回较慢的语句进行记录
??? c、为slave添加一个replication用户,授权
???????? mysql>grant replication slave on *.* to repl@192.168.1.128 identified by '123456'
??? d、重启mysql服务,查看master的状态
mysql> show master status; +-----------------------+------------+-------------------+-----------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +-----------------------+------------+-------------------+-----------------------+ | mysql-bin.000005 | 106 | billing | | +-----------------------+------------+-------------------+-----------------------+ 1 row in set (0.00 sec)
??
3、配置salve
?? a、修改slave的/etc/my.cnf文件,添加
????????? server-id=2??????????????????????????????????????????????????????? #slave的标示
?
???b、开启mysql的日志文件,方便排错(可选)
????????? log-error=/usr/local/mysql/log/error.log?????????????????????? #错误日志?
????????? log=/usr/local/mysql/log/mysql.log?????????????????????????????? #查询日志
????????? long_query_time=2??????????????????????????????????????????????????????#慢查询日志,指执行超过多久的sql会被log下来,这里是2秒
????????? log-slow-queries=/usr/local/mysql/log/slowquery.log??#将查询返回较慢的语句进行记录
?? c、重启mysql服务,配置与master的连接
mysql> CHANGE MASTER TO
?? ?-> MASTER_HOST='192.168.1.132',
?? ?-> MASTER_USER='repl',
?? ?-> MASTER_PASSWORD='123456',
?? ?-> MASTER_LOG_FILE='mysql-bin.000005',
?? ?-> MASTER_LOG_POS=106;
注:MASTER_HOST是master机的ip,MASTER_USER和MASTER_PASSWORD就是我们刚才在master上添加的用户,MASTER_LOG_FILE和MASTER_LOG_POS对应与master status里的信息
?? d、启动slave
mysql>start slave;
?
4、验证master-salve环境是否搭配成功
通过查看slave日志(/usr/local/mysql/log/error.log)
有如下信息则表示成功
100703 10:51:42 [Note] Slave I/O thread: connected to master 'repl@192.168.1.132:3306',? replication started in log 'mysql-bin.000005' at position 106
没有成功则通过日志文件查看并解决问题
?
二、搭建mysql-proxy环境
本实例采用了amoeba作为mysql的代理服务器,版本为amoeba-mysql-1.2.0-GA,下装与安装详细参见官方本档,proxy服务器的IP为192.168.1.120
配置amoeba,/usr/local/amoeba-mysql-1.2.0-GA/conf/amoeba.xm
a、提供客户端应用程序的数据库配置
<server> <!-- proxy server绑定的端口 --> <property name="port">8066</property> <!-- proxy server绑定的IP --> <!-- <proper