mysql扩展性架构实践N库到2N 库的扩容,2变4、4变8

mysql扩展性架构实践N库到2N 库的扩容,2变4、4变8

http://geek.csdn.net/news/detail/52070
58同城 沈剑

 

http://www.99cankao.com/algebra/modulo-calculator.php

取模计算器

 


扩展性也是架构师在做数据库架构设计的时候需要考虑的一点。首先分享一个58同城非常帅气的秒级数据扩容的方案。这个方案解决什么问题呢?原来数据库水平切分成N个库,现在要扩容成2N个库,解决的就是这个问题。

一开始除以2取模 0或者1

mysql扩展性架构实践N库到2N 库的扩容,2变4、4变8_第1张图片

假设原来分成两个库,假设按照hash的方式分片。如上图,分为奇数库和偶数库。

mysql扩展性架构实践N库到2N 库的扩容,2变4、4变8_第2张图片

第一个步骤提升从库,底下一个从库放到上面来(其实什么动作都没有做);
第二个步骤修改配置此时扩容完成,原来是2个分片,修改配置后变成4个分片,这个过程没有数据的迁移。原来偶数的那一部分现在变成了两个部分,一部分是0,一部分是2,奇数的部分现在变成1和3。0库和2库没有数据冲突,只是扩容之后在短时间内主从的可用性这个特性丢失掉了。

扩展之后除以4取模 ,0,1,2,3

mysql扩展性架构实践N库到2N 库的扩容,2变4、4变8_第3张图片

第三个步骤还要做一些收尾操作:把旧的主从给解除掉,为了保证可用性增加新的主从同步,原来拥有全部的数据,现在只为一半的数据提供服务了,我们把多余的数据删除掉,结尾这三个步骤可以事后慢慢操作。整个扩容在过程在第二步提升从库,修改配置其实就秒级完成了,非常的帅气。

这个方案的缺点是只能实现N库到2N 库的扩容,2变4、4变8,不能实现2库变3库,2库变5库的扩容。

 

 



沈剑这个方案不能秒级扩容


第一个步骤提升从库,底下一个从库放到上面来(其实什么动作都没有做)
第二个步骤原来是2个分片,现在变成4个分片,这个过程没有数据的迁移。原来偶数的那一部分现在变成了两个部分,一部分是0,一部分是2,奇数的部分现在变成1和3,把旧的主从给解除掉,0库和2库,1库和3库都有数据冲突,需要先把多余的数据删除掉
第三个步骤为了保证可用性增加新的主从同步,修改配置,此时扩容完成

 

阿里云HybridDB for MySQL 在线加分片
阿里云HybridDB for MySQL 在线加分片应该是在扩容时记录下对数据库的修改,直至删除数据完毕,应用新的路由规则,xtrabackup备份主库生成从库,增加新的主从同步

 



扩容其实就是一个删数据过程而不是迁移数据过程,理论上可以无限横向扩展

2库扩3库可以扩,问题1:数据倾斜 0,1,2三个分片,1这个分片数据量最多  问题2:本来磁盘空间不够要扩容,如果不增加3这个分片,那么1这个分片无法再插入数据,因为磁盘空间不足






mysql扩展性架构实践N库到2N 库的扩容,2变4、4变8_第4张图片

 

f

你可能感兴趣的:(mysql扩展性架构实践N库到2N 库的扩容,2变4、4变8)