一、停服扩容
(1)通知用户:今晚00:00-2:00升级,不能登录
(2)停服,没有写
(3)建2*n个新库,做好高可用;
(4)迁移:脚本,把数据从n个库select出来,insert到2*n库里
(5)改DB路由配置,模n变为模2*n; 重启
中间如失败,配置改回旧库,恢复
缺点:不高可用、 规定时间内完成、 有问题第一时间没查出,丢数据;
二、不停服务扩容1
改中间件的分库路由信息,杀掉老db连接,新db连接(应用有自动重连能力)按新路由策略走新分库拓扑上。同时拿掉老实例上部分db,也拿掉新实例上另外一部分db,实现扩容。
优点:设计标准,易自动化,保障数据一致性(靠mysql主从同步保证)
(1)改配置(双虚ip,微服务数据库路由);
(2)reload配置,实例增倍完成;
(3)删除冗余数据等收尾工作,数据量减半完成;
1、改配置
改两处,db实例所在机器做双虚ip:
(1)原%2=0的库是虚ip0,现加虚ip00;(2)原%2=1的库是虚ip1,现加虚ip11;
2改为4库,注意旧与新映射:
(1)%2=0的库,会变为%4=0与%4=2 (2)%2=1的部分,会变为%4=1与%4=3
2、reload配置,实例扩容
服务层reload配置,reload方式:
(a)原始:重启服务,读新配置
(b)高级:配置中心给服务发信号,重读配置,重新初始化数据库连接池;
不管哪种方式,reload后,db实例扩容就完成(秒级)
3、收尾,数据收缩
(a)双虚ip改回单虚ip;
(b)解除 旧 双主同步,改成对数据不再同步增加
(c)增加 新 双主同步,保证高可用;
(d)删冗余数据,如:ip0里%4=2全部删除,只为%4=0数据提供服务;
三、不停服务扩容2(同步工具)
建新空实例(主从),同步工具从老实例里抽全量数据,抽前同步工具会记老实例binlog位点。同步该位点后增量数据,赶上后,杀掉老实例连接。后面原理就一样。
方案关键:同步工具,解析mysql的binlog拿到每笔数据修改前后镜像,应用目标实例上
四、不停服务扩容3 (结合rabbitmq)
1.添加容量大从节点,同步主库数据,一主双从集群。
2.关闭主节点,切从库2(大容量)为主前,写数据插入到rabbitmq,读从1
3.切从库2为主,配置读写都从这,修从1 配 从库2 为主库
4.将rabbitmq数据插入新主
https://www.jianshu.com/p/c37eaf21ce42
https://www.zhihu.com/question/51993620/answer/493644184
https://blog.csdn.net/weixin_43139644/article/details/96130102
网友评论