`
BucketLi
  • 浏览: 195923 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
5a76a659-f8e6-3bf3-b39a-8ae8f7a0f9d9
Percolator与分布...
浏览量:5686
社区版块
存档分类
最新评论

关于MYSQL在线扩容和缩容

 
阅读更多
主要简单总结下,mysql在线扩容和缩容一般涉及到的内容,主要包括三个方面,1.在线也就意味着需要把增量的数据重新分布到新的拓扑结构中,我们一般称做增量复制,2.原有的数据需要一条不漏的扫出来重新分布到新的拓扑结构中,这个一般叫做全量复制,3.全量做完,增量正在同步,把应用的数据路由拓扑切到新的路由拓扑上来,并且做到无数据丢失,这个我们叫做停写切换。做好这三个方面的工作,能够达到的效果就是应用在最后切换数据分布拓扑的时刻,只要停写非常短的时间(秒级别)就能够做到无数据丢失的扩容和缩容。

增量同步一般有2种方式,一种是应用端或者数据库前端做trigger,记录变更数据的特征值log(比如pk,sharding key),然后异步复制到新的拓扑结构中。另外一种方式是通过分析mysql的binlog再进行不同数据拓扑的复制。两者本质上来说应该是一样的,后者可能更加简便,并且对应用无侵入,前者虽然也能够做到,实际实现或者推广和操作上都有不少阻力,最起码解析binlog方式是mysql一上去,更新的log已经天然存在与binlog中了。

增量同步的两种方式如果要考虑到同步的可伸缩性(也就是多台机器可以同时消费相同的变更日志),需要在原数据中添加数据的版本信息防止更新乱序,或者通过唯一键进行复制机器的sharding,也就是不同进程(线程)同时消费相同的更新日志,必须让同一条记录的更新落在同一个线程里面,如果还需要保证复制的事务,那么实现会非常复杂,一般不会去支持多线程下复制的事务。

全量复制,也就是扫描需要复制的表的数据进行重新分布,主要存在的问题是复制速度和对数据库的写入压力的矛盾,其实能够做到整个拓扑连数据库都全部换掉,来达到对正在使用数据库的0影响,这个是一种可行的方案,另外是分时段调整复制线程数,一般单线程复制对于数据库的影响不会很大,在凌晨再转换成多线程方式达到提速的目标。

扩容或者缩容在最后阶段如何切换,这个涉及到的问题主要是如何避免新更新进来以至于增量没完没了,方式有很多,最简单的方法就是停掉应用,一般时间只有几分钟是可以接受的。另外一种是逻辑停写,因为我们迁移的时候是有一个规则去重新散列数据,也就是如果新的规则和旧的规则两者算出来的结果不一致,那么这个数据就是需要被迁移的,如果在停写的时刻,向前端抛错即可。逻辑停写最大的好处就是避免PE的介入,并且配合动态的数据路由数据推送,可以完全避免重新发布达到扩容或者缩容,这个就是真正的在线扩容,停写不可避免(等待延迟的增量同步完成),但是不影响读。

数据扩容或者缩容,我们觉得不应该排入业务的开发日程中,而是由数据管理团队对应用透明地进行这种操作,最后介入的人员只是DBA而已。但是不像一些nosql一样按容量或者完全透明的split,数据库的sharding还是按照应用的数据特性(pk,user_id,gmt_create等等不同字段,自选策略)进行sharding,应用知道他们的某条数据具体存在哪个机器哪张表上,这个无论对于开发还是测试或者DBA都是一件不错的事情。

0
1
分享到:
评论

相关推荐

    MYCAT数据扩容+数据迁移

    - **MySQL数据源**: 目前仅支持使用MySQL作为数据源的扩容缩容。 #### 三、数据迁移 ##### 1. 使用`LOAD DATA INFILE`导入数据 - **基本语法**: `LOAD DATA [LOCAL] INFILE 'file_name' [REPLACE | IGNORE] INTO ...

    Mycat生产实践之数据迁移与扩容实践.docx

    - 目前仅支持使用MySQL作为数据源的拆分表扩容缩容。 为了优化数据迁移速度,dataMigrate.sh脚本中的四个参数可以调整:并行线程数、每个数据库主机上清理冗余数据的并发线程数、一次加载的数据量和mysqldump命令行...

    新版TiDB 中文手册tidb-stable-zh-manua

    理 (Hybrid Transactional and Analytical Processing, HTAP)的融合型分布式数据库产品,具备水平扩容或者缩容、金 融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 5.7 协议和 MySQL 生态等重要特性。...

    Mysql Cluster(集群)的概念和架构

    MySQL Cluster支持动态添加或移除节点,无需停机,便于根据业务需求调整资源,实现平滑扩容或缩容。 **3. 性能优化** 通过数据分区和并行处理,MySQL Cluster能够在大规模并发场景下提供高效的读写性能,尤其适用...

    tidb数据库安装和介绍

    1. **水平扩容和缩容**:TiDB的存储计算分离架构使得在线扩容和缩容变得简单,只需一键操作,不影响业务运行,运维人员可以轻松管理。 2. **金融级高可用**:TiDB采用多副本存储,并利用Multi-Raft协议保证事务的强...

    Mysql分表分库-core-dbshard2.zip

    设计时要考虑未来扩容和缩容的便利性,避免大规模重构。 9. **挑战与解决方案**:分库分表会带来如跨表查询、事务处理、数据一致性等挑战。需要结合业务特点,选择合适的分片策略和技术框架,例如使用SQL路由、...

    携程容器云实践.docx

    容器的优势在于轻量级的隔离和快速启动,它能在几分钟内完成大规模的扩容和缩容,极大地提高了业务的响应速度。例如,在携程的深度学习小诗机项目中,通过容器技术,1000核的资源可在5分钟内完成150个容器实例的扩容...

    《OBCA模拟考试(新)》考试.docx

    11. 扩容和缩容:OceanBase 支持动态扩容和缩容,对上层业务透明。 12. 集群管理:RootService 总控服务管理整个集群资源,同时支持全局 DDL、集群数据合并等功能。 13. Paxos 协议组:OceanBase 是以分区为单位...

    去年底写的mysql分库分表中间件heisenberg

    1. **动态分片**:Heisenberg支持在线动态扩容和缩容,无需停服即可调整分片策略,适应业务变化。 2. **读写分离**:提供主从复制的支持,实现读写分离,减轻主库压力,提高系统响应速度。 3. **分布式事务**:...

    阿里云 专有云企业版 V3.9.0 分析型数据库MySQL版 产品简介 20191017.pdf

    3. **灵活扩展**:具备水平扩展能力,可以根据业务需求动态调整资源,实现无缝扩容和缩容,确保系统的弹性与稳定性。 4. **数据安全性**:提供完善的数据加密和备份恢复机制,保障数据的安全性和完整性。 5. **易用...

    阿里分布式数据库双十一实践.pdf

    3. **系统自动化扩容缩容**: - DRDS支持根据业务需求进行动态的扩容和缩容,特别是在双十一这样的大型活动中,可以根据实时流量调整资源,确保成本的有效控制。 4. **服务化的分布式事务**: - DRDS提供了服务化...

    如何基于MySQL及Redis搭建统一的KV存储服务

    这种使用方式会有如下问题:1)MySQL及Redis存在数据不一致风险,尤其是长时间运行的系统2)业务层需要处理MySQLsqlschema与Rediskv数据结构上的逻辑差异3)无统一运维4)无法方便扩容/缩容为什么要用MySQL:“在可...

    基于Web的自动化发布系统(cedardeploy).zip

    该系统提供直观的用户界面,支持多种项目类型的发布,如python、Node.js、Golang等,并具备自动扩容和缩容的功能。此外,它还支持通过定时任务进行服务状态报警。安装和使用过程简单明了,包括创建数据库、修改配置...

    京东弹性数据库中间件JED介绍.pptx

    3. 动态伸缩:JED能够实现在线动态扩容和缩容,满足业务的快速增长需求。 4. 流式处理:JED能够实现流式查询处理,支持海量数据的快速查询。 5. 安全审计:JED能够实现业务为单位的安全审计,保证数据库的安全与审计...

    腾讯金融级数据库TDSQL分析

    2. 如何扩容:应对金融业务的数据量和交易量在短时间内爆发式增长,TDSQL提供了按需自动扩容和缩容的能力,实现业务的高伸缩性。 3. 配套设施:提供完善的配套工具,如时耗分析、慢查询分析、冷备及恢复中心、异常...

    TDSQL在微众银行核心交易系统中的实践

    TDSQL支持自动扩容缩容,能够实现透明分表。当系统负载超过阈值时,数据库能够自动增加节点,反之亦然,整个过程对应用层透明,不需要应用层介入。这种机制保证了系统能够应对业务爆发式增长,同时避免资源浪费。 ...

    架构师成长笔记 低成本和高性能MySQL云架构探索 共28页.pptx

    第二版平台则更加强调稳定性和扩展性,提供了主从热备、数据备份、迁移、容灾、读写分离、分库分表等一系列功能,并实现了资源隔离和动态扩容缩容。 平台采用了多种开源组件,如Mnesia(用于核心元数据存储,具有高...

Global site tag (gtag.js) - Google Analytics