章节摘要:分片集群由 mongos 路由、config 服务与多个分片组成,按分片键把数据水平拆开。本章从一次热点分片事故与一次迁移风暴事故讲分片架构、部署、分片键选择与再分片。读完本章,你能判断"该不该分片",并选出一个不后悔的分片键。
金句:分片键是给数据定的"户口"——迁户口(再分片)要停写排期数周,落户前请三思。
7.1 讲数据怎么被拆开、找到;7.2 讲拆完怎么搬平衡;7.3 回到源头——键怎么选才不用事后大动干戈。倒着读也成立:7.3 的键选对了,7.2 的 balancer 风暴多半不会发生;7.1 的广播查询过多,往往正是 7.3 选键时没看查询日志的后果。三章合起来是一个因果链的两端,中间隔着时间的延迟兑现。
架构与寻址(7.1) ──► 迁移与平衡(7.2) ──► 选键判据(7.3) │ │ │ mongos·chunk balancer 基数·写分布
本章还该回答一个前置问题:该不该分片。单集合数据量与索引总体积能在单机内存的合理倍数内放下、写入未到单机瓶颈时,复制集加纵向扩容仍是更简单的答案——分片换来的扩展性,每一分都用运维复杂度支付。先问"该不该",再问"怎么分",顺序反了就是给自己发牌。
离开本章前逐条自查:能否画出 mongos、config、shard 三层并说清一次带分片键查询的完整寻址路径;能否解释 chunk 分裂与迁移各自的触发条件、以及 jumbo chunk 为什么会让均衡器停摆;能否对着 sh.status() 的分布表判断是否存在热点或冻结;能否用选键四问评估自己业务的主集合;能否说出 refineCollectionShardKey 能解什么、不能解什么。任何一条卡住,回对应小节的事故复盘重走一遍定位过程。
评审会上最常被问到的边界问题:数据量到多少才必须分片。经验数字是单集合索引工作集明显超过 WiredTiger 缓存、且纵向加内存的成本曲线变陡时,通常落在单节点几 TB 量级;但比数字更可靠的是第 10 章的三个指标——缓存命中率、扫描量与复制延迟,它们先于容量上限报警。把分片决策挂在这三个指标上,比挂在一个拍出来的 GB 数上更能经住复盘。
前置:第 6 章复制集(每个分片就是一个复制集)。延伸:分片集群的监控指标在第 10 章,跨分片操作与事务限制在第 8 章。