分布式数据库系统环境的“无感”升级

2024-09-05 20:44

本文主要是介绍分布式数据库系统环境的“无感”升级,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

导读

本文聚焦于杭州银行在数字化转型背景下,通过高可用机制实现关键业务系统“无感”升级的探索实践。随着金融行业加速线上化和移动化转型,业务系统的连续性要求显著提升,传统的数据库变更方式已无法满足新时期的需求。杭州银行基于 TiDB 分布式架构设计的新一代关键业务系统,通过节点冗余、数据副本、故障转移和负载均衡等机制,实现了系统的高可靠性与可维护性。

文章详细阐述了在这一架构下进行业务“无感”维护的技术要点,包括节点不可用时的业务影响评估、滚动升级的操作方法、以及存储和计算节点的连接管理策略。

随着金融科技的飞速发展,传统银行业务快速向线上化、移动化转型,各种新渠道、新场景对系统连续性目标提出了更高要求。在此背景下,杭州银行基于分布式架构建设新一代关键业务系统(如图 1 所示),利用节点冗余、数据副本、故障转移和负载均衡等机制实现架构高可靠性设计,并探索利用高可用机制完成业务“无感”维护,显著提升了内部使用体验和客户服务体验。

图 1 新一代关键业务系统架构

图 1 新一代关键业务系统架构

“无感” 升级技术落地探索

与传统基于小型机的架构设计相比,新一代关键业务系统按照“单点不可靠”思路设计的分布式架构在可维护性方面优势明显,不仅通过组件全冗余设计消除了架构中的单点故障,同时还支持基于策略的节点流量调度。为避免软件环境升级补丁对关键业务系统生产集群及容灾集群运行连续性造成影响,杭州银行在分布式环境中进一步探索“无感”升级的可行路径,并重点梳理了以下技术要点:一是确定节点不可用及恢复上线时的业务影响范围和影响时长;二是在分布式架构下,探索不影响可用性的流量调拨操作方法及滚动式操作的粒度;三是实施滚动式操作时,制定防范出现二次故障或者出现二次故障后的快速恢复方法;四是基于每日操作窗口时间,科学设计节点批次。

分布式架构的组件按照处理请求时是否依赖外部状态可分为有状态组件和无状态组件,且不同组件的高可用机制及其对业务的影响也各有不同(见表 1)。考虑上述特点,杭州银行利用高可用机制和流量调拨方法设计了节点重启方案。在此模式下,计算节点保有应用层的数据库长连接,通过负载均衡转发策略与应用连接池的淘汰机制结合,可实现非活跃连接转移和新节点的连接恢复。存储节点上数据分片多副本的 Leader 角色响应计算节点的读写请求,通过对指定节点进行 Leader 角色的迁移或者排斥操作来实现数据读写请求的迁移。

表 1 分布式组件高可用机制及其对业务的影响

表 1 分布式组件高可用机制及其对业务的影响

负载均衡支持以手工或者感知计算节点状态端口的方式将计算节点在“计划内”下线,即保持原有连接的同时,新连接不再连接到下线节点。同时,使用应用程序的 hikariCP 连接池的 maxlifetime 参数标识一个“连接”生命周期的上限,超过该时间会被标记为过期连接,如果是闲置状态,则会被连接池关闭并重新创建,新连接会被负载均衡转发到其他在线的节点上。当下线节点所有的数据库连接超出 maxlifetime 的时间后均会被释放,从而使节点重启过程对业务无影响。在节点恢复后,再由负载均衡将节点上线,根据最少连接策略将应用侧连接池的新建连接转移到连接较少的刚恢复的计算节点。所有节点的连接平衡后,再进行下一组节点的操作。

基于上述方式,杭州银行通过滚动式升级依次完成了所有的计算节点升级重启并保持连接平衡,且其间即便有节点发生故障,亦有剩余可用节点来接收所有的应用连接。计算节点滚动式重启的连接状态如图 2 所示。

图 2 计算节点滚动式重启的连接状态

图 2 计算节点滚动式重启的连接状态

其间,使用数据库管理工具可添加准备下线存储节点的 Leader 角色的排斥调度,当同一数据分片 Raft 组的 Leader 角色切换到其他存储节点的数据副本后,计算节点的读写流量会随之调拨。当存储节点上没有 Leader 角色的数据分片后,仅保持副本同步状态,没有计算节点的访问流量。多副本组成的 Raft 组可容忍少数派的副本成员下线,所以仅有 Follower 角色数据分片的节点进行升级重启时对业务无影响,且同一副本成员节点恢复后,将自动保持副本同步状态,管理员可通过管理工具恢复 Leader 角色的调度能力。存储节点滚动式重启的数据分片副本状态如图 3 所示。

图 3 存储节点滚动式重启的数据分片副本状态

图 3 存储节点滚动式重启的数据分片副本状态

杭州银行 “无感” 升级实践

通过滚动式升级,杭州银行依次完成所有的节点升级重启并保持 Leader 角色的数量平衡。以关键系统生产集群为例,数据库节点涉及两个机房的数十台服务器,服务器升级微码重启的操作过程约 30 分钟,结合连接维护超时操作,单台服务器需要约 1 个小时,每日维护窗口时间大致为从 19:00 到 23:00 的 4 个小时,因此需分批进行升级操作;同时,考虑存储节点出现故障的概率更大,选择优先升级存储节点,再升级计算节点/调度节点,最后升级数据同步节点。单次滚动集群组件的批次设计见表 2。

表 2 单次滚动集群组件的批次设计

表 2 单次滚动集群组件的批次设计

在存储节点下线时,杭州银行将需要同次操作重启服务器的存储节点设置为调度驱逐 Leader 角色,并使用 Raft 算法来保证系统存储节点可用性;同时,通过重点关注 Leader 角色的数据分片数量,并使用监控查看每台存储节点的 Leader 数量下降为 0,实现了操作系统升级后的重启过程对业务无影响;基于负载均衡控制台将需要同次操作重启服务器的计算节点设置为“禁用”,即从 Virtual Server 转发的 Real Server 列表中剥离,使数据库长连接开始超时退出。

从计算节点禁用后的连接状态变化来看,10 分钟内每台 4000 个连接快速下降到接近为 0,仅有少量的平台类应用连接未配置 maxlifetime 参数,等待 20 分钟后直接关闭计算节点进程开始升级。计算节点系统重启后,负载均衡将恢复的计算节点设置为“启用”,从而在接下来的 10 分钟内,连接开始逐步恢复到正常水平。组件中断影响记录见表 3。

表 3 组件中断影响记录

表 3 组件中断影响记录

综上所述,杭州银行以提升客户满意度为目标,采用数据库运维与应用连接管理策略协作等创新技术,实现了分布式数据库系统环境的“无感”升级,不仅有效规避了停机窗口限制,拓宽了维护场景,也为同类系统的升级改造提供了可行参考。后续,杭州银行数据库运维团队还将积极探索自动化作业、多层流量联动等技术手段在升级场景的应用,以高质量技术服务助力银行业务可持续创新发展。

这篇关于分布式数据库系统环境的“无感”升级的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

怎么关闭Ubuntu无人值守升级? Ubuntu禁止自动更新的技巧

《怎么关闭Ubuntu无人值守升级?Ubuntu禁止自动更新的技巧》UbuntuLinux系统禁止自动更新的时候,提示“无人值守升级在关机期间,请不要关闭计算机进程”,该怎么解决这个问题?详细请看... 本教程教你如何处理无人值守的升级,即 Ubuntu linux 的自动系统更新。来源:https://

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

mysql-8.0.30压缩包版安装和配置MySQL环境过程

《mysql-8.0.30压缩包版安装和配置MySQL环境过程》该文章介绍了如何在Windows系统中下载、安装和配置MySQL数据库,包括下载地址、解压文件、创建和配置my.ini文件、设置环境变量... 目录压缩包安装配置下载配置环境变量下载和初始化总结压缩包安装配置下载下载地址:https://d

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

gradle安装和环境配置全过程

《gradle安装和环境配置全过程》本文介绍了如何安装和配置Gradle环境,包括下载Gradle、配置环境变量、测试Gradle以及在IntelliJIDEA中配置Gradle... 目录gradle安装和环境配置1 下载GRADLE2 环境变量配置3 测试gradle4 设置gradle初始化文件5 i

java如何分布式锁实现和选型

《java如何分布式锁实现和选型》文章介绍了分布式锁的重要性以及在分布式系统中常见的问题和需求,它详细阐述了如何使用分布式锁来确保数据的一致性和系统的高可用性,文章还提供了基于数据库、Redis和Zo... 目录引言:分布式锁的重要性与分布式系统中的常见问题和需求分布式锁的重要性分布式系统中常见的问题和需求

Golang使用etcd构建分布式锁的示例分享

《Golang使用etcd构建分布式锁的示例分享》在本教程中,我们将学习如何使用Go和etcd构建分布式锁系统,分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要,它有助于维护一致性,防止竞... 目录引言环境准备新建Go项目实现加锁和解锁功能测试分布式锁重构实现失败重试总结引言我们将使用Go作

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

Redis分布式锁使用及说明

《Redis分布式锁使用及说明》本文总结了Redis和Zookeeper在高可用性和高一致性场景下的应用,并详细介绍了Redis的分布式锁实现方式,包括使用Lua脚本和续期机制,最后,提到了RedLo... 目录Redis分布式锁加锁方式怎么会解错锁?举个小案例吧解锁方式续期总结Redis分布式锁如果追求

你的华为手机升级了吗? 鸿蒙NEXT多连推5.0.123版本变化颇多

《你的华为手机升级了吗?鸿蒙NEXT多连推5.0.123版本变化颇多》现在的手机系统更新可不仅仅是修修补补那么简单了,华为手机的鸿蒙系统最近可是动作频频,给用户们带来了不少惊喜... 为了让用户的使用体验变得很好,华为手机不仅发布了一系列给力的新机,还在操作系统方面进行了疯狂的发力。尤其是近期,不仅鸿蒙O