为什么说 TiDB 在线扩容对业务几乎没有影响
内容提要
本文讨论了分布式数据库在线扩容的挑战,比较了一般分布式数据库和TiDB的扩容机制。一般分布式数据库需要重新平衡数据分布,可能影响系统可用性和IO消耗。相比之下,TiDB的存算分离架构使得扩容对业务影响较小。
延伸解读
扩容机制差异:从数据重分布到副本迁移
一般分布式数据库扩容时,需根据分布键重新计算哈希并搬迁大量数据,可能锁表并消耗大量IO,影响业务可用性。TiDB采用Multi Raft协议,扩容时通过增加副本、迁移Leader等步骤实现,数据搬迁以Region为单位,且支持流控,避免了对业务的大规模阻塞。
存算分离架构如何降低扩容影响
TiDB的存算分离架构允许计算层和存储层独立扩容。计算层TiDB Server无状态,扩容只需增加节点并调整负载均衡,不影响现有业务;存储层TiKV扩容通过副本迁移和Leader均衡实现,过程中虽有IO消耗,但流控机制可动态调整,确保对业务影响极小。
在线扩容的实际影响与应对
尽管TiDB扩容对业务影响很小,但并非完全无影响。TiKV扩容时复制Region会产生额外IO,可能对性能有轻微影响,但TiDB提供流控机制可动态调整复制速度。Leader切换时间短,且TiDB能通过内部重试保证业务正常执行,因此整体影响可控。
Q&A
为什么一般分布式数据库在线扩容会影响业务?
一般分布式数据库扩容时需要重新平衡数据分布,导致大量数据搬迁,产生高IO消耗,可能影响系统可用性。例如Greenplum早期版本在重分布时会锁表,导致表不可读写。
一致性哈希算法如何减少扩容时的数据搬迁?
一致性哈希算法不再使用节点编号取模,而是将数据和节点映射到一个圆环上。增加节点时,只影响圆环上相邻节点之间的部分数据,从而减少数据搬迁量,降低网络和磁盘IO。
TiDB的存算分离架构如何支持在线扩容?
TiDB的存算分离架构将计算层(TiDB Server)和存储层(TiKV/TiFlash)分离,可以独立扩容。计算层无状态,扩容简单;存储层基于Multi Raft协议,扩容时通过副本迁移和Leader均衡实现,对业务影响小。
TiKV扩容的具体步骤是什么?
TiKV扩容步骤包括:1. 增加TiKV节点;2. PD调度确定迁移Region;3. 复制Region到新节点;4. 删除多余Region;5. 重新均衡Leader。整个过程通过流控和内部重试确保业务几乎不受影响。
TiDB扩容时如何保证对业务几乎没有影响?
TiDB通过流控机制动态调整复制速度,减少IO消耗;Leader切换时间短,且TiDB能通过内部重试保证业务正常执行。因此,扩容对业务几乎无影响。
TiDB计算层扩容为什么简单?
TiDB Server节点无状态,不持久化数据,每个节点对等。扩容时只需增加节点,并修改负载均衡组件将连接分发到新节点,完全不影响现有业务。