Canonical Juju 的一个奇怪编排部署

news2024/11/17 16:28:35

一周前的一个项目扩容出现了异常,进行了操作回滚,未对线上业务造成损失。

现象是这样的:

        通过基于 Canonical Juju-GUI 在一组节点上部署了某个组件,在把这组节点添加到集群后,有4个节点上出现了同一组件的2个instance、这4个异常节点中的3个发生了组件配置文件全部丢失的现象。

        BD的现场产品支撑粗暴地下结论为:短时间内重复点击了组件部署,导致组件配置文件被替换。

        但我认为这个论调很牵强,在时间先后上构不成必然的因果关系。

整个操作过程如下:

        20:30分开始部署业务组件,有6个节点因部署结果相应不正确而进行了第二次部署,两次部署时间间隔 34秒47毫秒;

        由于该项目同时有另一个组件配置变更,协商后决定顺序执行这2个变更操作(扩容操作为后者)。21:30分开始操作扩容变更,检查全部节点上该组件的配置文件未发现异常,按照既定计划向集群中添加Node,全部Node添加成功。大约3分钟后,开始向新的集群节点中添加磁盘,该过程中发现了有2个节点添加磁盘失败。根据控制台输出的日志,发现是这2个节点中中组件配置文件全部不存在了。

        至此,中止本次扩容操作,开始数据止损、确保数据安全。

现在,来谈谈为什么不能认同 BD 产品支撑给出的结论:

一 、驳“短时间内重复点击了组件部署”

        首先,通过回放扩容操作录像,可以确认针对故障节点所在组的全部节点进行了两次批量部署,这两次批量部署的时间间隔是 34秒47毫秒。这个时间间隔在响应时间不超过5秒的产品规格中,不能算是“短时间重复操作”。

       其次,根据Juju-deploy的日志记录,部署组件的action日志中显示,重复的两次操作事件开始时间间隔只有3秒,这个时间差和回看录像发现的34秒47毫秒相差太大。另外,重复操作波及到的14台机器中只有4台上有创建2个instance的action事件记录。

二、驳“重复部署instance时配置文件被覆盖为空”

       首先,如果是重复操作部署产生的结果,那为何同一批14个节点中只有4个产生了2个instance、且这4个节点中只有3个节点上的配置文件发生了丢失?难道不是被波及的14个节点的配置文件全部被在第二次部署时覆盖掉吗?

       其次,根据 Linux 命令行工具的实验结论,通过tar解压一个空白文件夹是不会把已有的同名文件中的文件清空的。此外,在组件的install工具脚本中并未看到对已存在的同名文件夹进行删除的语句。因此,“重复部署instance时配置文件被覆盖为空”这个论点在事实上是不成立的。

       再次,为什么节点上的配置文件丢失是在第二次部署结束后的90分钟以后、且在instance使用该配置文件的过程中发生的配置文件丢失?“重复部署instance时配置文件被覆盖为空”这个论点与既有事实自相矛盾,无法解释为什么配置文件在使用中发生了丢失。

         BD的产品支撑给出的论点根本无法解释以上两个大方向的问题中的任何一个疑问。

        接下来的3天,我作为交付方代表主持了此次项目扩容事故的全面调查,产研、交付、运维、联合售后专家委员会、项目经理一致认可的结论是:基于Juju的交付工具存在产品缺陷,当前项目中的这个交付工具版本尚未修复过已经发现的产品BUG。

       在调查过程中,根据查阅的产品BUG汇总表,发现BD的产品研发对Canonical Juju进行了自研化修改,修改后的Juju存在的一个严重缺陷是:通过这个交付平台部署软件时,软件封包时的默认配置信息会被Juju工具平台删除,但这并不是一个必然的现象,而是只有在向既有集群中扩容新节点时才会发生。这个产品缺陷,最早在2023年9月就被作为业务环境重大生产事故报告过。2024年3月又有一次作为业务环境重大生产事故被在联合售后组会上通报过。

      更可怕的是,这个问题刚刚本次扩容当天的那个组件配置变更中发生了,在本次扩容中发生了这个问题,当天经历了这个问题的产研支撑竟然没有提示这个问题、在事故发生后的原因定位过程中居然还在避重就轻地往人员操作方向引导我们的调查思路......

事件有了结论,也该总结一下工程管理中的警示与教训了:

1)在非标准化产品交付过程中,一定要指定专职的DTA和SOP执笔,要充分考虑当前工程中的工具软件的缺陷与规避问题的方式;

2)不要盲目相信产品研发和产品规划提供的“标准操作”,他们提供的工作成果只能作为参考、不能直接执行,一定要贴合运行中的项目实况进行剪裁修改;

3)要取得方案执行的主导权和话语权,争取得到高层领导在资源和人力方面的支持,未取得绝对支持前不可妄动;

4)事故发生后不要慌,要原原本本说明自己“做了什么、没做什么”,客观地描述事故发生过程

5)被指名参与项目执行方案评审的产研、交付、运维、技术专家,必须亲自登录到目标业务环境中了解业务系统使用的组件是什么、组件版本是什么、该版本的组件已知产品缺陷是什么、在当前评审的执行方案中应当注意什么问题、如何规避已知问题。

6)项目活动执行方案评审,必须严格执行三审排期制度、绝对不可走过场式地临时评审,要确保每个执行方案评审意见有事前会签、事后反馈。

        

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

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

相关文章

Postman文件数据导入导出

前言 不同的接口测试工具如Postman、Apipost、Apifox创建的接口文档都是互通的,都可以互相兼容使用。我们就不需要在3个不同测试工具都去创建,只要在一个工具上创建,想要在其他接口测试工具上使用就运用导入和导出功能即可。 Postman、Apip…

爆赞!GitHub首本Python开发实战背记手册,标星果然百万名不虚传

Python (发音:[ paiθ(ə) n; (US) paiθɔn ] n. 蟒蛇,巨蛇 ),是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定。Python 具有脚本语言中最丰富…

【接口自动化测试】第二节.Requests库和接口对象封装

文章目录 前言一、Requests库 1.1 Requests介绍 1.2 Requests发送请求 1.3 Requests查看响应 1.4 案例1登录接口调试-获取验证码 1.5 案例2登录接口调试-登录 1.6 归纳小结二、接口对象封装 2.1 当前代码待优化问题 2.2 接口对象封装思…

互联网应用主流框架整合之SpingMVC运转逻辑及高级应用

Spring MVC处理器的执行过程 在SpringMVC的流程中,它会把控制器的方法封装为处理器(Handler),为了更加灵活,SpringMVC还提供了处理器的拦截器,从而形成了一条包括处理器和拦截器的执行链,即HandlerExecutionChain&…

Linux-安装及管理程序

目录 一、Linux应用程序基础 1、应用程序与系统命令的关系 2、 典型应用程序的目录结构 3、常见的软件包封装类型 二、RPM包管理工具 1、RPM包管理器 2、RPM软件包 ​3、RPM的命令格式 4、RPM命令的常用选项 5、RPM安装 三、 yum安装 1、yum源介绍 1.1、本地yum源 …

给日期加上15天

// 给当前日期加上15天 function toAndTimeFifteen(params) {let startDate new Date(params); // 创建一个Date对象表示2024年5月31日startDate.setDate(startDate.getDate() 15); // 给当前日期加上15天let dateString formatDate(startDate)// 转换时间格式return dateSt…

自动水位雨量站:用于水库防汛预警

TH-SW2自动水位雨量站是一种现代化的监测设备,主要用于水库等水域的防汛预警系统。它通过集成水位和雨量监测功能,为水库的管理和调度提供实时、准确的数据支持。 工作原理: 自动水位雨量站通过内置的水位计和雨量计实时监测水库的水位变化和…

C++封装TCP类,包括客户端和服务器

头文件 XTcp.h #ifndef XTCP_H #define XTCP_H#ifdef WIN32 #ifdef XSOCKET_EXPORTS #define XSOCKET_API __declspec(dllexport) #else #define XSOCKET_API __declspec(dllimport) #endif #else #define XSOCKET_API #endif#include <string> XSOCKET_API std::string…

宁德时代华北首座电池工厂在北京开工

6月18日&#xff0c;由宁德时代与北汽集团、京能集团、小米集团等共同投资建设的北京时代电池基地项目开工仪式在北京举行。 北京市相关政府代表&#xff0c;宁德时代董事长兼CEO曾毓群&#xff0c;北汽集团董事长张建勇&#xff0c;京能集团副总经理张凤阳&#xff0c;小米集…

第6章 设备驱动程序(4)

目录 6.5 块设备操作 6.5.5 请求结构 6.5.6 BIO 6.5.7 提交请求 6.5.8 I/O调度 6.5.9 ioctl实现 本专栏文章将有70篇左右&#xff0c;欢迎关注&#xff0c;查看后续文章。 6.5 块设备操作 6.5.5 请求结构 struct request { //放在请求队列上&#xff0…

BFS 1块、算多少次

目录 1.矩阵内部的1块 2.从1开始&#xff0c;1或乘2&#xff0c;计算要多少次达到n 3.迷宫路径 1.矩阵内部的1块 #include <iostream> #include <vector> #include <cmath> #include <string> #include <cstring> #include <queue> usi…

现代谱估计分析信号的功率谱(1)---AR 模型谱估计

本篇文章是博主在通信等领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对通信等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅解。文章分类在通信领域笔记&#xff1a;…

1951–2021年欧洲地区木本植物的格网物候数据集

本数据集包含1951–2021年欧洲地区&#xff08;3457′N – 723′N&#xff0c;253′W – 403′E&#xff09;6种木本植物的逐年展叶始期和开花始期格网数据&#xff0c;空间分辨率为0.1&#xff0c;时间分辨率为1天。数据集的质量评估表明&#xff0c;欧洲地区各物种展叶始期和…

车载语音识别系统语音数据采集标注案例

随着人工智能技术的不断发展&#xff0c;其在我们日常生活工作场景中的应用也越来越普及&#xff0c;人工智能技术在不同场景的普及大大的提高了我们日常生活、工作的高效性和便利性。以我们的日常出行为例&#xff0c;车载语音识别系统便是一种典型的人工智能应用场景。 车载…

大咖专栏 | AI 时代下,我们可以拥有怎样的数据库?

Hi&#xff0c;各位朋友们&#xff0c;我是 KaiwuDB 高级架构师赵衎衎。 KaiwuDB 始于万物互联时代下千万条数据洪流中&#xff0c;我们持续打磨构造了更加灵活兼容的分布式多模架构&#xff0c;实现了海量异构数据高性能、低成本的集中管理… …这些底层特性都在为后续提供更…

初见DP

线性DP 例题1 1143. 最长公共子序列 &#xff08;LCS&#xff09; 子序列不连续 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#x…

单片机第五季-第八课:STM32CubeMx和FreeRTOS

1&#xff0c;FreeRTOS背景介绍 RTOS简介&#xff1a; 实时操作系统&#xff0c;本用于追求实时性的嵌入式系统&#xff0c;典型&#xff1a;ucos/uclinux/vxworks&#xff1b; 特点&#xff1a;中断响应快、一般可嵌套中断、使用实地址、多任务&#xff1b; &#xff08;实…

如何用Vue3构建一个交互式树状图

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 Vue 3 ApexCharts Treemap 组件&#xff1a;可视化多维数据 应用场景 树形图&#xff08;Treemap&#xff09;是一种可视化多维数据的有效方式&#xff0c;特别适用于展示层次结构数据或按类别分组的数据。它…

Flink 资源静态调度

本内容是根据 Flink 1.18.0-Scala_2.12 版本源码梳理而来。本文主要讲述任务提交时&#xff0c;为 Task 分配资源的过程。 以下是具体步骤讲解&#xff1a; TaskManager 资源注册 TaskManager 再启动时&#xff0c;会向 ResourceManager 注册资源。ResourceManager 会将 Tas…

Debian12安装Nvidia官方驱动

1、下载驱动&#xff08;下载到一个英文目录例如你的用户目录/home/用户名下&#xff0c;我下载到dowload目录&#xff0c;由于默认显示中文&#xff0c;在命令行不支持中文显示的是一串数字&#xff0c;当然你仍然可以cd 那串数字进目录&#xff0c;显示有有引号就加引号&…