数据库Sharding集群:扩容问题解决方案

数据库Sharding集群扩容问题方案

MySQLSharding集群一般按照用户id进行哈希分区,这里面存在两个问题:
1)集群的容量不够怎么办?
2)单个用户的数据量太大怎么办?

一、问题一

对于第1个问题,MySQLSharding集群往往会采用双倍扩容的方案,即从2台服务器扩到4台,接着再扩到8台……,依次类推。
假设原来有2个dbgroup,第一个dbgroup的主机为A0,备机为A1,第二个dbgroup的主机为B0,备机为B1。

按照用户id哈希取模,结果为奇数的用户分布在第一个dbgroup,结果为偶数的用户分布在第二个dbgroup。

扩容前的架构图

二、问题一解决方案

常见的一种扩容方式如下:
1)等待A0和B0的数据同步到其备服务器,即A1和B1。
2)停止写服务,等待主备完全同步后解除A0与A1、B0与B1之间的主备关系。
3)修改中间层的映射规则,将哈希值模4等于1的用户数据映射到A1,哈希值模4等于3的用户数据映射到B1。
4)开启写服务,用户id哈希值模4等于0、1、2、3的数据将分别写入到A0、A1、B0、B1。这就相当于有一半的数据分别从A0、B0迁移到A1、B1。
5)分别给A0、A1、B0、B1增加一台备机。

扩容后的解决方案

最终,集群由2个dbgroup变为4个dbgroup。可以看到,扩容过程需要停一小会儿服务,另外,扩容进行过程中如果再次发生服务器故障,将使扩容变得非常复杂,很难做到完全自动化。

三、问题二

对于第2个问题,可以在应用层定期统计大用户,并且将这些用户的数据按照数据量拆分到多个dbgroup。当然,定期维护这些信息对应用层是一个很大的代价。

好啦,有更多的问题,欢迎留言,咱们再交流哈。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值