随着一个网站的业务不断扩展,数据不断增加,数据库的压力也会越来越大,对数据库或者SQL的基本优化可能达不到最终的效果,我们可以采用读写分离的策略来改变现状。读写分离现在被大量应用于很多大型网站,这个技术也不足为奇了。ebay就做得非常好。ebay用的是oracle,听说是用Quest Share Plex 来实现主从复制数据。
一、什么是读写分离
读写分离简单的说是把对数据库读和写的操作分开对应不同的数据库服务器,这样能有效地减轻数据库压力,也能减轻io压力。主数据库提供写操作,从数据库提供读操作,其实在很多系统中,主要是读的操作。当主数据库进行写操作时,数据要同步到从的数据库,这样才能有效保证数据库完整性。
主数据库同步到从数据库后,从数据库一般由多台数据库组成这样才能达到减轻压力的目的。读的操作怎么样分配到从数据库上?应该根据服务器的压力把读的操作分配到服务器,而不是简单的随机分配。mysql提供了MySQL-Proxy实现读写分离操作。不过MySQL-Proxy好像很久不更新了。oracle可以通过F5有效分配读从数据库的压力。
二、读写分离方案
1. 淘宝TDDL,client模型,关键链路上不需要额外的服务器(diamond配置服务器,宕机不影响服务),不会产生额外的故障点。排名第一。
2. 奇虎atlas,阿里amoeba,cobar 都是server模型,需要在关键链路上增加额外服务器,会产生额外的故障点。排名并列第二。
3. msyql-proxy,MySQL官方出品,据说是atlas是根据它优化出来的,排名第三
4. mysql replicationDriver,排名第四
三、采用Atlas+Keepalived实现MySQL读写分离、读负载均衡
具体参阅:http://sofar.blog.51cto.com/353572/1601552/
Atlas+Keepalived实现MySQL读写分离主要有以下优点:
(1)、基于mysql-proxy-0.8.2进行修改,代码完全开源;
(2)、比较轻量级,部署配置也比较简单;
(3)、支持DB读写分离;
(4)、支持从DB读负载均衡,并自动剔除故障从DB;
(5)、支持平滑上下线DB;
(6)、具备较好的安全机制(IP过滤、账号认证);
(7)、版本更新、问题跟进、交流圈子都比较活跃。
总体架构图:
参阅文章
MySQL + Atlas --- 部署读写分离 http://www.cnblogs.com/yyhh/archive/2015/12/29/5084844.html
MySQL-(Master-Slave)配置 http://www.cnblogs.com/luxh/p/4088420.html
MySQL Master Slave同步配置 http://www.cnblogs.com/xiazh/archive/2011/04/22/1971182.html
使用Atlas实现MySQL读写分离 http://www.cnblogs.com/luxh/p/4104516.html
解决Mysql读写分离数据延迟 http://blog.csdn.net/allen_hdh/article/details/19854783
MySQL 读写分离后的数据一致性问题 https://www.v2ex.com/t/174052
浅谈mysql主从复制的高可用解决方案 http://blog.csdn.net/burpee/article/details/49422235