前言:本人有幸接手了一个大项目的运维工作,项目前期发展非常快,其中尤以数据库的发展最为困难,目前大的单表都是在几十亿,最大的达到百亿,高峰时数据流量超1000Mbps。这里还是要首先感谢mycat社区提供的开源中间件,让我能够实现一个如此庞大的数据库。 这期间我们踩了无数坑,对数据库架构进行了多次调整,mysql、redis更是优化再优化(redis集群20万qps以上,这个以后有时间再写个分享),巴不得榨干机器的所有性能。整个过程大多数时候都是困难重重,压力山大,但现在回头去看,一路收获很多。现在整理出来一方面是给自己回顾总结,重新思考,另一方面也是给大家做一个案例参考。(以下的图都是自己画的,平时画的少,所以很多图标我也搞不清楚应该用哪种形状)。
转载请务必表明出处。
我进项目组的时候,项目已经刚起步,用户只有几万,服务器也就10台左右,其中mysql数据库只有2台,使用了最简单的一主一从结构。在我来之前使用的memory引擎,据说有一次机房停电,两台服务器全挂,数据全丢,于是改成了innodb引擎。我觉得应该感谢这次及时的停电,因为还是在项目之初,损失还能承受,如果在后面那是不可想象的。
最初用户发展非常快,数据量只能用暴增来形容,每天的高峰期数据库经常抗不住,直接导致业务不可用。每天的业务高峰时间非常集中(这个是业务特性,我们没有办法去左右用户的行为),这种不可用的时间可能就10分钟,但对业务这足够致命了。于是我们决定对数据库进行拆分,这期间我们测试分析了几种中间件,最后选择了mycat。也是架构开始演变成这样:
于是我给的方案是生成两张用户表,一张是全量表account_s,用来存放用户的账号,同时再生成一张分片的account_s_shard.程序必须先项account_s中插入,插入成功的才算新用户,并获得一个id,然后再插入一次到account_s_shard。
总的来说这一块迁移的时候程序的变动并不多。
在业务低谷时,我们只抓了5分钟左右的时间,就能看到接近200万次的查询。即使他的速度很快,高峰时他占的资源还是非常大。
我们当然可以按照最高的峰值进行预算扩容,但是扩容数据库是非常昂贵的,所以我们也需要通过redis进行缓存,一是写缓存,数据延后写入,另外就是读缓存,缓存热点数据。
我们现在的架构就变成了这样:
这一步的工作量还是非常大的,主要还是涉及到开发的程序,因为有部分数据在redis中进行了缓存,就意味着我们必须是redis+mysql合并才是完整的数据。读写都需要修改。redis与数据库之间的数据同步也是一个非常重要的步骤
于是我们还需要搭建一套mycat的集群。于是就出现了下面这个mycat的集群结构。
一开始我们使用的是haproxy,但是haproxy很快就出现了问题,因为haproxy需要流量转发,于是haproxy就
会成为瓶颈。如下图所示,我们在高峰期流量会超过千兆,直接把我们的千兆网卡打爆:
架构基本上就是这样,keepalived+lvs+mycat 基本上实现了mycat这一层的高可用和负载均衡。单从架构上我们还没有说明mysql的高可用。mycat后面连接的每一个mysql实例,我们都需要建立高可用的方案。方案当然很多, 我们选择的是mha方式。
编辑推荐:
- mycat实战分享(一):单表超百亿流量1000Mbps的数据库集群03-01
- Mysql 5.7在OL 6上以RPM包安装03-01
- 远程登陆mysql5.7服务端03-01
- MySQL:COUNT(*) profile optimizing阶段慢03-01
- Web常见安全漏洞分享03-01
- mysql数据库的备份与还原03-01
- 如何安装MySQL数据库?安装MySQL步骤教程03-01
- 深入理解 MySQL ——锁、事务与并发控制03-01
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- mycat实战分享(一):单表超百亿流量1000Mbps的数据库集群
mycat实战分享(一):单表超百亿流量1000Mbps的数据库集群
26-03-01 - Web常见安全漏洞分享
Web常见安全漏洞分享
26-03-01 - 深入理解 MySQL ——锁、事务与并发控制
深入理解 MySQL ——锁、事务与并发控制
26-03-01 - Innodb:Undo 表空间巨大
Innodb:Undo 表空间巨大
26-03-01 - sysbench花式踩坑之三:自增值导致的锁等待
sysbench花式踩坑之三:自增值导致的锁等待
26-03-01 - mycat实战(二)-mysql数据库管理
mycat实战(二)-mysql数据库管理
26-03-01 - mysql5.7主从复制说明及配置主从详细步骤
mysql5.7主从复制说明及配置主从详细步骤
26-03-01 - 中国数据库40年发展简史
中国数据库40年发展简史
26-03-01 - CentOS whoami命令详解(Linux新手必学:如何查看当前登录用户)
- 简述MySQL数据删除恢复操作内容
简述MySQL数据删除恢复操作内容
26-03-01
