全服不停机数据库水平扩容方案

本次目标:

全服不停机情况下在线扩容数据分库

280c362b31a99e9dee57428d93948b67.png

不停机变更为

ab94e0933269b12906e5b4171abbeb75.png

方案已有的基础:

具有分库信息登记表,应用启动过程已具备动态读取分库信息并建立动态数据源的能力,已实现分库

方案1:

1、运维人员准备数据库实例,克隆数据库模板,建立好分库

2、分库连接信息 配置到 数据库信息登记表中,状态为 未就绪(这就避免了此库被分配出去)

3、滚动重启全部应用容器(应用集群保证了客户端无感知),重启完毕后修改数据库列表为就绪状态,可以接收新数据

4、本方案关键在于 “滚动”两个字

方案2:

数据源列表里设计一个是否就绪的开关列,定时任务动态建立完毕连接池后,更改开关状态为就绪,开始接收新数据。

步骤:

1、zk上建立一个目录,应用启动后注册自己的ip信息和数据分库就绪【重启的都是就绪】的信息到目录下,为临时节点

2、运维人员准备数据库实例,克隆数据库模板,建立好分库

3、分库连接信息 配置到 数据分库信息注册表中,状态为 未就绪(这就避免了此库被分配出去),同时更新zk中所有应用节点为DB未就绪状态

4、应用层面的定时检测任务,发现列表中有待初始化的新数据库

5、定时任务初始化新数据源,添加到Spring动态数据源中

6、定时任务更新zk中自己所在应用的状态为DB连接池已就绪

7、BOSS系统定时任务检查ZK中所有应用的状态是否已完成变更,如果所有已就绪,则更新数据库列表新数据源为 已就绪 状态,开始接受新数据。

难点:

1、k8s中容器的数量很多,如何保证每个容器都准备就绪了?通过zk中登记的状态。

2、为了降低难度,在数据库扩容期间,k8s的容器不要进行扩容,要保持集群稳定状态。

3、步骤较多,为了防止人为出错,要开发相应的界面,按流程一步一步进行,每一步会自动检测是否就绪,上一步没有完成期间(系统定时检测或者按钮检测),无法进入到下一步的界面。

4、如果扩容期间,容器挂了又自动产生一个新的,这时候 新容器的状态是准备就绪状态

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吕哥架构

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值