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

2024-02-26 10:48

本文主要是介绍全服不停机数据库水平扩容方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本次目标:

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

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、如果扩容期间,容器挂了又自动产生一个新的,这时候 新容器的状态是准备就绪状态

这篇关于全服不停机数据库水平扩容方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/748602

相关文章

Java数组动态扩容的实现示例

《Java数组动态扩容的实现示例》本文主要介绍了Java数组动态扩容的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1 问题2 方法3 结语1 问题实现动态的给数组添加元素效果,实现对数组扩容,原始数组使用静态分配

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

Python + Streamlit项目部署方案超详细教程(非Docker版)

《Python+Streamlit项目部署方案超详细教程(非Docker版)》Streamlit是一款强大的Python框架,专为机器学习及数据可视化打造,:本文主要介绍Python+St... 目录一、针对 Alibaba Cloud linux/Centos 系统的完整部署方案1. 服务器基础配置(阿里

MySQL MHA集群详解(数据库高可用)

《MySQLMHA集群详解(数据库高可用)》MHA(MasterHighAvailability)是开源MySQL高可用管理工具,用于自动故障检测与转移,支持异步或半同步复制的MySQL主从架构,本... 目录mysql 高可用方案:MHA 详解与实战1. MHA 简介2. MHA 的组件组成(1)MHA

SpringSecurity中的跨域问题处理方案

《SpringSecurity中的跨域问题处理方案》本文介绍了跨域资源共享(CORS)技术在JavaEE开发中的应用,详细讲解了CORS的工作原理,包括简单请求和非简单请求的处理方式,本文结合实例代码... 目录1.什么是CORS2.简单请求3.非简单请求4.Spring跨域解决方案4.1.@CrossOr

MySQL 数据库进阶之SQL 数据操作与子查询操作大全

《MySQL数据库进阶之SQL数据操作与子查询操作大全》本文详细介绍了SQL中的子查询、数据添加(INSERT)、数据修改(UPDATE)和数据删除(DELETE、TRUNCATE、DROP)操作... 目录一、子查询:嵌套在查询中的查询1.1 子查询的基本语法1.2 子查询的实战示例二、数据添加:INSE

使用MyBatis TypeHandler实现数据加密与解密的具体方案

《使用MyBatisTypeHandler实现数据加密与解密的具体方案》在我们日常的开发工作中,经常会遇到一些敏感数据需要存储,比如用户的手机号、身份证号、银行卡号等,为了保障数据安全,我们通常会对... 目录1. 核心概念:什么是 TypeHandler?2. 实战场景3. 代码实现步骤步骤 1:定义 E

Python实现繁体转简体功能的三种方案

《Python实现繁体转简体功能的三种方案》在中文信息处理中,繁体字与简体字的转换是一个常见需求,无论是处理港澳台地区的文本数据,还是开发面向不同中文用户群体的应用,繁简转换都是不可或缺的功能,本文将... 目录前言为什么需要繁简转换?python实现方案方案一:使用opencc库方案二:使用zhconv库

通过DBeaver连接GaussDB数据库的实战案例

《通过DBeaver连接GaussDB数据库的实战案例》DBeaver是一个通用的数据库客户端,可以通过配置不同驱动连接各种不同的数据库,:本文主要介绍通过DBeaver连接GaussDB数据库的... 目录​一、前置条件​二、连接步骤​三、常见问题与解决方案​1. 驱动未找到​2. 连接超时​3. 权限不

MySQL数据库读写分离与负载均衡的实现逻辑

《MySQL数据库读写分离与负载均衡的实现逻辑》读写分离与负载均衡是数据库优化的关键策略,读写分离的核心是将数据库的读操作与写操作分离,本文给大家介绍MySQL数据库读写分离与负载均衡的实现方式,感兴... 目录读写分离与负载均衡的核心概念与目的读写分离的必要性与实现逻辑读写分离的实现方式及优缺点读负载均衡