技术方案|某工业集团PaaS容灾方案

在当今快速发展的数字化时代,业务的连续性和稳定性已成为企业核心竞争力的重要组成部分。然而,由于各种原因,企业常常面临着数据丢失、系统瘫痪等潜在风险。因此,制定一套科学、高效的容灾方案至关重要。本文将围绕某全球领先的工业集团如何通过灵雀云企业级云原生平台ACP(以下简称ACP)实现高效的容灾方案展开深入探讨,旨在为您提供可借鉴的经验和启示。

容灾概念说明

在系统高可用架构设计中,容灾能力的建设是不可或缺的。容灾设计要求系统对容灾事件具备快速响应能力,保障系统持续高可用。系统面对异常情况,如软件自身故障、外界环境影响(自然灾害)需具备快速恢复能力保障系统的持续高可用。

容灾的定义是指灾难发生时,通过采用一定的技术手段和措施,保证信息系统能够快速恢复正常的运行,从而减少业务中断和数据丢失所带来的损失。容灾不仅保护数据,更重要的是保证业务的连续性。容灾要求数据远程复制,保证容灾站点的数据尽可能与生产站点一致。

备份的定义是指将数据或系统备份到本地或远程存储设备中,以防止数据丢失或系统崩溃。

衡量灾难恢复能力的级别有两个重要的技术指标:RTO(恢复时间目标)和RPO(恢复点目标)。

RTO(恢复时间目标)是指在发生系统故障或灾难事件后,恢复业务运作所需的时间。也就是说,RTO是指从系统中断到恢复正常运作所需的最长时间。RTO的设定根据业务的需求和可接受的风险水平来确定。较短的RTO意味着业务中断的时间较短,需要更快地恢复业务运作。

RPO(恢复点目标)是指在系统故障或灾难事件发生前,系统数据的恢复点。也就是说,RPO是指在发生故障或灾难之前,数据备份的时间点。RPO的设定取决于业务对数据丢失的可接受程度。较小的RPO意味着数据丢失的时间较短,需要更频繁地备份数据。

容灾方案介绍

2021年,某全球领先的工业集团通过大量的调研和方案对比决定引入ACP作为其数字化转型的基座,以加速其数字化转型为目标,并确保业务连续性。为达到这个目标,该集团对灵雀云提出了严格的容灾需求,要求恢复时间目标(RTO)不超过2小时,恢复点目标(RPO)不超过1分钟。

ACP是基于云原生架构的全方位解决方案,提供了容器化、微服务、自动化运维等一系列功能。灵雀云与该集团紧密合作,深入了解其业务需求和技术挑战,为其量身定制了一套完整的云原生解决方案。

通过ACP,集团成功地将其传统应用迁移到了云原生环境,实现了应用的快速部署、弹性伸缩和自动化运维。同时,灵雀云还为集团提供了专业的培训和技术支持,确保其能够充分利用ACP平台的优势来提升业务价值。

在容灾方面,灵雀云利用先进的容器技术和自动化运维工具,为集团构建了一套高效的容灾体系。通过自动化备份和快速恢复机制,满足了RTO不超过2小时和RPO不超过1分钟的要求,确保了集团业务的连续性和稳定性。

1.    整体容灾方案介绍

图片

图表 1 容灾方案总体架构

在制定企业整体容灾方案时,应考虑技术中台、应用数据、应用以及接入层的容灾需求。同时还需一套容灾切换管理平台,帮助企业对整个容灾过程的集中管理和控制,包括对数据、应用和接入层的自动化切换操作。

  • 技术中台容灾

在遭遇火灾等灾难后,原有的技术中台可能无法继续提供正常服务,如应用的全生命周期管理、服务依赖的注册中心等。因此,容灾方案必须充分考虑中台服务的连续性和中台数据的冗余性。

理想的容灾方案应由供应商提供,解决主数据中心和备数据中心的数据同步问题、接入层切换问题。但项目中因某些特殊情况,技术中台需要在两个数据中心进行单元化部署,并对外提供两套访问地址。从用户角度来看,一套访问地址对应主数据中心,另一套对应备数据中心。

灵雀云提供ACP原生容灾能力,如数据同步、接入层切换等方案,能够满足各种容灾需求。

  • 数据层容灾

业务运行过程中,数据的持久化至关重要。主要涉及三种类型的持久化需求:业务文件存储、中间件存储和数据库存储。

业务文件存储

业务运行在Kubernetes(k8s)集群中,通过使用持久化卷(Persistent Volume,PV)和持久化卷申请(Persistent Volume Claim,PVC)K8s实现了对业务数据的持久化。该项目中,通过ACP创建的k8s集群,整合了集团之前采购的Netapp-ontap存储设备,通过CSI插件将k8s与Netapp-ontap存储设备集成。在需要持久化存储时,通过ACP创建PVC,k8s会自动在Netapp-ontap存储设备中创建存储卷,实现业务数据的持久化。值得注意的是,Netapp-ontap在主数据中心和备数据中心都有部署,并通过Snapmirror进行数据同步。在备数据中心,通过将pod与pvc关联,实现了文件的跨数据中心容灾。

图片

图表 2 PVC容灾

中间件存储:

中间件的容灾基于中间自身方案。如Redis缓存系统,通过Redis-shake同步中间件做数据同步。

图片

图表 3 redis容灾

Redis容灾方案操作步骤如下:

a)   在两个数据中心,部署相同版本的业务集群。

b)   分别在两个业务集群内,部署源端Redis哨兵架构实例与目标端Redis哨兵架构实例。

c)   在源端部署Redis-shake组件,用来支持数据传输,对于目标端来说,Redis-shake模拟了Redis的客户端进行写入操作。

在进行容灾切换时,为避免产生脏数据,需手动停止Redis-shake组件。这样可确保切换过程中的数据一致性,并防止因数据不同步而导致的潜在问题。

数据库存储:

该集团业务数据写入Oracle数据库中。Oracle提供Data Guard容灾方案,通过主库和备库来实现容灾。主库将redo log传递到备库上,备库对redo log进行应用,来保持与主库同步。

在进行容灾切换时,为避免产生脏数据,需手动停止数据同步操作,根据具体情况判断是否进行反向同步。这样可确保切换过程中的数据一致性,并防止因数据不同步而导致的潜在问题。

  • 应用层容灾

应用容灾旨在为生产系统构建一套镜像的备份应用系统,确保在灾难发生时能迅速接管业务运行。为实现这一目标,业务需满足以下要求:

a) 应用需是无状态的,避免存储请求上下文信息。这使得任何用户的请求都能被任意实例处理,确保结果一致性。

b) 应用需通过域名提供服务,简化容灾切换过程,只需调整域名解析,无需改动应用本身。

c) 使用具备容灾功能的中间件,提升系统稳定性和可用性。

d) 应用对中间件和数据库的访问都需通过域名进行。这样在容灾切换时,只需调整域名解析,无需对应用进行改动,进一步增强容灾能力。

e) 应用与数据库、中间件的连接需支持断开自动重连功能。这样即使出现短暂的网络波动或容灾切换,应用仍能稳定运行。

应用镜像部署完成后,应用管理员需要确保两个生产环境中的部署版本一致,并保障其稳定性。日常需要对两个环境中的应用进行版本控制、巡检和功能验证,以确保没有差异。

  • 接入层容灾

在业务部署中,客户访问业务分内网和外网两种场景。内网指客户在集团内网访问业务,外网指客户通过互联网访问业务。

图片

图表 4 接入层容灾

在集团内部部署了DNS服务,所有服务器的DNS配置都指向该服务。业务提供的服务都通过域名对外展示。在内网环境中,域名解析到ACP的ALB,客户端通过DNS解析访问这些服务。流量会先被解析到ACP的ALB上,然后ALB会基于域名规则将流量转发给指定的服务。

在外网环境中,域名会解析到公网IP。在公网环境中,负载均衡器会将流量转发到内网的DMZ区。接着,经过防火墙和另一个负载均衡器的处理,流量会进一步被转发给ACP的ALB(Ingress Controller)。

当灾难发生时,接入层只需简单地进行域名解析切换,并等待域名生效,即可快速恢复服务。

  • 容灾管理平台

在灾难发生时,需要进行一系列的切换操作,包括接入层域名解析切换、业务访问中间件和数据库域名解析切换,以及中间件和数据库的数据同步切换等。为了确保操作的准确性和效率,需要一个统一的管理平台来进行这些切换操作。这个管理平台可以将操作剧本化,将每一步的切换操作详细列出,以便在灾难发生时能够按照剧本一步步执行。

图片

图表 5 切换剧本

2.    灾难恢复方案介绍

灾难事件的范畴很广,导致数据被破坏的时间包括自然灾害,硬件故障、人为操作失误、恶意攻击等。从数据保护的应对角度而言,硬件故障、软件故障为常见的主要原因,一般情况下,本地具备数据中心灾备能力,进行数据保护即可。自然灾害、人为误操作属于较低概率事件,但仅本地数据保护能力往往还不够,还需要异地远程灾备能力。与异地远程灾备相比,本地数据可以提供较好的RPO和RTO水平,而异地远程灾备能力建设一般用于应对如自然灾害、人为误操作这类小概率事件,恢复时间可以是分钟级别、小时级或几天级别。

集团为了确保业务的持续性和数据的安全性,采取了全面的容灾措施。在本地设立了容灾数据中心,旨在提供可靠的备份和故障转移能力。当主数据中心发生故障或灾难时,容灾数据中心能够迅速接管业务运行,确保服务的连续性。

此外,集团还在其他省份建立了灾难机房。这些机房经过特殊设计和配置,能够在灾难发生时提供额外的数据存储和计算能力。与容灾数据中心一样,灾难机房核心目的是确保业务的连续性和数据的安全性。

通过在本地和其他省份建立容灾数据中心和灾难机房,集团能够大大提高业务的可靠性和数据的完整性。这有助于减少因数据中心故障或灾难导致的数据丢失和服务中断的风险。

在制定企业灾难恢复方案时,需考虑技术中台灾难恢复、应用数据灾难恢复、应用灾难恢复。

  • 技术中台灾难恢复

ACP平台以Kubernetes为开发框架,利用其原生扩展机制(如CRD、Controller、API Aggregation等)来开发产品功能。除了日志和监控组件数据,平台的其他数据都存储在etcd中。因此,备份etcd数据等同于备份整个平台数据。

在etcd节点上,可以设置定时任务来执行备份脚本,确保数据被定期备份到存储设备上。同时,使用备份工具将宁乡机房的数据备份至灾备机房,实现数据的异地保护。

当出现灾难或不可修复故障时,可以从存储中提取证书文件和etcd的快照文件。根据恢复手册来快速恢复集群的正常运行。

图片

图表 6 ACP备份、集群备份

  • 应用灾难恢复

灵雀云建议集团将业务核心系统部署在Kubernetes(K8s)集群上,以充分发挥其强大功能和灵活性。通过采用专业的灾难恢复工具,轻松实现将运行在K8s集群中的应用程序完整备份至高可用的对象存储中。这样,一旦发生灾难,集团可以迅速将数据恢复至任何K8s集群,确保业务连续性不受影响。

图片

图表 7 应用容灾

此外,为了应对业务集群的异常情况,灵雀云建议集团定期进行ETCD的快照备份。这些快照可作为集群级别的灾难恢复参考,帮助集团快速恢复集群状态。而应用备份则更为细致,可以针对命名空间或特定应用程序进行备份和恢复,提供更精细的灾难恢复粒度。

  • 数据灾难恢复

数据的灾难恢复涉及多个方面,包括数据库、中间件和文件存储等。为确保数据的完整性和可用性,灾难恢复方案通常分为两类。一类是直接备份整个磁盘,但这种方式可能导致服务无法正常启动。另一类是基于各产品原生能力进行备份,但不同产品的备份和恢复方案可能存在差异,增加了方案的复杂性。

考虑到项目中包含容灾管理平台,对于不同产品的备份和恢复方案的问题,可以将各种备份和恢复方案在容灾管理平台中脚本化。通过容灾管理平台进行统一管理,确保不同产品的备份和恢复操作都能按照标准化的流程进行,提高整个数据恢复过程的可靠性和效率。

容灾演练

容灾切换演练和灾难恢复演练是检验企业容灾方案实际效果的关键环节。通过模拟灾难场景,企业可以测试容灾切换和灾难恢复流程的可行性与有效性,及时发现潜在问题并采取改进措施,从而提升在真实灾难场景下的应对能力。为确保容灾方案的可靠性,集团每年至少进行一次容灾切换演练和灾难恢复演练,并选择核心业务进行验证。

容灾方案点评

该容灾方案在数据容灾、应用容灾和接入层容灾方面已经具备了一定的基础和框架,但仍然有待优化点:

1.    技术中台容灾优化

因项目特殊原因,技术中台是在两个数据中心进行单元化部署,对外提供两套访问地址,非产品最佳实践。ACP提供产品级容灾方案,对外以一个域名提供服务,公司自研acp-mirror组件,实现ACP产品级的数据同步。

图片

图表 8 ACP容灾方案

2.    应用管理优化

当前容灾方案对应用管理员的部署和运维带来了极大的挑战。他们需要时刻关注两边部署的版本一致性、配置一致性以及业务可用性,这无疑增加了工作量和潜在的风险。为了减轻应用管理员的负担并提供更可靠的容灾方案,ACP引入了GitOps解决方案。

GitOps是一种基于Git的声明式管理方法,它允许开发人员使用Git作为配置仓库,并通过ACP平台DevOps持续集成/持续部署(CI/CD)流水线自动部署和管理应用程序。通过GitOps,应用管理员可以将应用程序的版本控制、配置管理和部署策略集中管理在Git仓库中。这使得应用管理员能够更加轻松地实现跨数据中心的版本控制、配置同步和自动化部署。

图片

图表 9 ACP应用管理方案

ACP的GitOps解决方案提供了以下关键功能:

版本控制与同步:ACP的GitOps解决方案确保两个数据中心的应用程序版本一致。每当有代码更改或配置更新时,GitOps会自动触发CI/CD流水线,将更改同步到两个数据中心的部署环境中。

自动化部署:通过ACP平台DevOps持续集成/持续部署功能,可以自动化部署应用程序。应用管理员只需提交代码更改到Git仓库,ACP将自动执行构建、测试和部署流程,确保两个数据中心的部署环境保持同步。

配置管理:ACP的GitOps解决方案提供了一个集中式的配置管理机制。所有的配置文件和参数都存储在Git仓库中,确保两个数据中心的配置一致性。应用管理员可以通过简单的Git操作来管理和更新配置,避免了逐个手动配置的繁琐和潜在错误。

监控与告警:ACP的GitOps解决方案还集成了监控和告警功能。通过对两个数据中心的应用程序进行实时监控,及时发现潜在的问题或性能瓶颈。一旦发生异常情况,系统将自动触发告警通知应用管理员,以便及时采取措施解决问题。

通过引入ACP的GitOps解决方案,集团可以显著降低应用管理员的部署和运维成本,同时提高容灾方案的可靠性和可用性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/743005.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

css实现梯形?

HTML: <div class"box"></div> CSS: .box{width:50px;height:0;border-bottom:50px solid pink;border-left:50px solid #fff;border-right:50px solid #fff; } 效果&#xff1a;

opencv dnn模块 示例(25) 目标检测 object_detection 之 yolov9

文章目录 1、YOLOv9 介绍2、测试2.1、官方Python测试2.1.1、正确的脚本2.2、Opencv dnn测试2.2.1、导出onnx模型2.2.2、c测试代码 2.3、测试统计 3、自定义数据及训练3.1、准备工作3.2、训练3.3、模型重参数化 1、YOLOv9 介绍 YOLOv9 是 YOLOv7 研究团队推出的最新目标检测网络…

IDEA开启Run Dashboard

1、Run Dashboard是什么&#xff0c;为什么要使用 Run Dashboard 是 IntelliJ IDEA 中的一个工具窗口&#xff0c;用于管理和监视项目中正在运行的应用程序和配置。它提供了一种集中管理运行和调试过程的方式&#xff0c;可以让开发人员更方便地查看和控制正在运行的应用程序。…

2061:【例1.2】梯形面积

时间限制: 1000 ms 内存限制: 65536 KB 提交数:201243 通过数: 79671 【题目描述】 在梯形中阴影部分面积是150平方厘米&#xff0c;求梯形面积。 【输入】 (无&#xff09; 【输出】 输出梯形面积&#xff08;保留两位小数&#xff09;。 【输入样例】 &#xff…

数据结构-链表(二)

1.两两交换列表中的节点 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 输入&#xff1a;head [1,2,3,4] 输出&#xff1a;[2…

Java学习笔记------常用API(三)

BigInteger 在Java中&#xff0c;整数类型有四种类型&#xff1a;byte&#xff08;一个字节&#xff09;、short&#xff08;2个字节&#xff09;、int&#xff08;四个字节&#xff09;、long&#xff08;8个字节&#xff09; 超出取值范围上面类型无法使用&#xff0c;这时…

Docker学习之容器管理(超详解析)

容器相关命令&#xff1a; 容器操作&#xff1a; 启动容器 方法1:先创建一个容器&#xff1a;docker create 镜像名再启动容器&#xff1a;docker start 容器名(不推荐) [rootlocalhost ~]# docker create -it myubuntu:18.04 //创建容器 7bc99c9ea102ab49cc400437824a954949…

白酒:生产过程的智能化与自动化升级改造

在当今的工业生产中&#xff0c;智能化与自动化已成为提进一步率、品质和竞争力的关键因素。云仓酒庄紧跟时代步伐&#xff0c;对豪迈白酒的生产过程进行了一系列智能化与自动化升级改造&#xff0c;旨在提升生产效率、确保产品质量的同时&#xff0c;降低生产成本。 首先&…

Express学习(四)

使用Express写接口 创建基本的服务器 创建API路由模块 编写GET接口 编写POST接口 CORS跨域资源共享 什么是CORS CORS由一系列HTTP响应头组成&#xff0c;这些HTTP响应头决定浏览器是否阻止前端JS代码跨域获取资源。浏览器的同源安全策略默认会阻止网页“跨域”获取资源。但如…

数据结构和算法:栈与队列

栈 栈 &#xff08;stack&#xff09;是一种遵循先入后出逻辑的线性数据结构 把堆叠元素的顶部称为“栈顶”&#xff0c;底部称为“栈底”。 将把元素添加到栈顶的操作叫作“入栈”&#xff0c;删除栈顶元素的操作叫作“出栈”。 栈的常用操作 /* 初始化栈 */ stack<int&g…

专升本 C语言笔记-07 逗号运算符

1.逗号表达式的用法 就是用逗号隔开的多个表达式。逗号表达式&#xff0c;从左向右依次执行。 2.逗号表达式的特性 2.1.当没有括号时&#xff0c;第一个表达式为整个表达式的值。 代码 int x 3,y 5,a 0; a x,y; printf("a %d",a); 说明:因为逗号优先级最低,会…

【CSS颜色】

本文章属于学习笔记&#xff0c;在https://www.freecodecamp.org/chinese/learn/2022/responsive-web-design/中练习 三、CSS颜色 1、有两种主要的颜色模型:电子设备中使用的加性RGB(红、绿、蓝)模型和印刷品中使用的减色CMYK(青色、品红、黄色、黑色)模型。 使用RGB模型。这…

学习JAVA的第二十一天(基础)

多线程 线程&#xff1a; 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中&#xff0c;是进程中的实际运作单位。 进程&#xff1a; 程序的基本执行实体 并发&#xff1a; 在同一时刻&#xff0c;有多个指令在单个CPU上交替执行 并行&#xff1a; 在同一时刻&…

【C语言】Windows下的C语言线程编程详解

文章目录 1. 头文件1.1 windows.h1.2 process.h 2. 创建线程3. 线程同步3.1 线程同步方式3.1 互斥量&#xff08;Mutex&#xff09;3.2 事件&#xff08;Event&#xff09; 4. 线程的结束与资源管理5.线程池&#xff08;简要&#xff09; 在Windows平台下&#xff0c;C语言提供…

活动会议线上直播,如何扩大曝光?媒体直播分流解析

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 线上直播扩大曝光与媒体直播分流解析 一、扩大曝光策略&#xff1a; 平台选择&#xff1a;选择用户基数大、活跃度高的直播平台进行直播。 预告宣传&#xff1a;提前发布直播预告&…

k8s-Istio服务网络 27

官网&#xff1a;https://istio.io/latest/zh/about/service-mesh/ Istio与k8s的区别 SpringCloud传统微服务结合k8s与Istio与k8s结合&#xff1a; Istio数据面&#xff1a;通过envoy以sidecar方式拦截svc的流量来进行治理。 Istio控制面&#xff1a;pilot list/watch APIserv…

HarmonyOS NEXT应用开发之异常处理案例

介绍 本示例介绍了通过应用事件打点hiAppEvent获取上一次应用异常信息的方法&#xff0c;主要分为应用崩溃、应用卡死以及系统查杀三种。 效果图预览 使用说明&#xff1a; 点击构建应用崩溃事件&#xff0c;3s之后应用退出&#xff0c;然后打开应用进入应用异常页面&#x…

nginx启动闪退

在nginx目录下cmd&#xff0c;nginx -t&#xff0c;找到原因是&#xff1a;“在端口80上运行NGINX时&#xff0c;因为端口80是HTTP默认端口&#xff0c;需要管理员权限才能访问” 所以修改端口号&#xff1a; 在nginx.conf文件中&#xff0c;修改listen&#xff1a;80为8080 …

【C++】类的默认成员函数(下)

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 一、运算符重载1.1 引例1.2 概念及运用&#xff1a;1.3 牛刀小试:1.4 重载1.5 运…

Python网络基础爬虫-python基本语法

文章目录 逻辑语句if,else,elifforwhile异常处理 函数与类defpassclass 逻辑语句 熟悉C/C语言的人们可能很希望Python提供switch语句&#xff0c;但Python中并没有这个关键词&#xff0c;也没有这个语句结构。但是可以通过if-elif-elif-…这样的结构代替&#xff0c;或者使用字…