一个完整的mysql读写分离环境包括以下几个部分:
应用程序client
? database proxy ? database集群
在本次实战中,应用程序client基于c3p0连接后端的database proxy。database proxy负责管理client实际访问database的路由策略,采用开源框架amoeba。database集群采用mysql的master-slave的replication方案。整个环境的结构图如下所示:
?
实战步骤与详解
一.搭建mysql的master-slave环境
1)分别在host1(10.20.147.110)和host2(10.20.147.111)上安装mysql(5.0.45),具体安装方法可见官方文档 2)配置master
首先编辑/etc/my.cnf,添加以下配置:
log-bin=mysql-bin #slave会基于此log-bin来做replication server-id=1 #master的标示
binlog-do-db = amoeba_study #用于master-slave的具体数据库 然后添加专门用于replication的用户:
mysql> GRANT REPLICATION SLAVE ON *.* TO repl@10.20.147.111 IDENTIFIED BY '111111'; 重启mysql,使得配置生效: /etc/init.d/mysqld restart 最后查看master状态:
3)配置slave
首先编辑/etc/my.cnf,添加以下配置: server-id=2 #slave的标示
配置生效后,配置与master的连接:
mysql> CHANGE MASTER TO
-> MASTER_HOST='10.20.147.110', -> MASTER_USER='repl',
-> MASTER_PASSWORD='111111',
-> MASTER_LOG_FILE='mysql-bin.000003', -> MASTER_LOG_POS=161261;
其中MASTER_HOST是master机的ip,MASTER_USER和MASTER_PASSWORD就是我们刚才在master上添加的用户,MASTER_LOG_FILE和MASTER_LOG_POS对应与master status里的信息
最后启动slave: mysql> start slave;
4)验证master-slave搭建生效
通过查看slave机的log(/var/log/mysqld.log):
100703 10:51:42 [Note] Slave I/O thread: connected to master
'repl@10.20.147.110:3306', replication started in log 'mysql-bin.000003' at position 161261
如看到以上信息则证明搭建成功,如果有问题也可通过此log找原因 二.搭建database proxy
此次实战中database proxy采用amoeba ,它的相关信息可以查阅官方文档,不在此详述 1)安装amoeba
下载amoeba(1.2.0-GA)后解压到本地(D:\\openSource\\amoeba-mysql-1.2.0-GA),即完成安装 2)配置amoeba
先配置proxy连接和与各后端mysql服务器连接信息
(D:\\openSource\\amoeba-mysql-1.2.0-GA\\conf\\amoeba.xml):
1. 2. 3. 8066 4. 5. 6. 9. 10. 20 11. 12. 13. 30 14. 15.
16. 30 17. 18. 19. 128 20. 21. 22. true 23. 24. 25. root 26. 27. 28. root 29.
5. defaultManager
ty> 6. 7. 8. 3306 9. 10. 11. 10.20.147.110
rty> 12. amoeba_study
13. 14. 15. root 16. 17. 18. 19. 20. 21. 22. 23. ableObjectPool\> 24. 200 25. 200