Canonical Juju 的一个奇怪编排部署

2024-06-20 03:12

本文主要是介绍Canonical Juju 的一个奇怪编排部署,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

现象是这样的:

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

        

这篇关于Canonical Juju 的一个奇怪编排部署的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

ubuntu如何部署Dify以及安装Docker? Dify安装部署指南

《ubuntu如何部署Dify以及安装Docker?Dify安装部署指南》Dify是一个开源的大模型应用开发平台,允许用户快速构建和部署基于大语言模型的应用,ubuntu如何部署Dify呢?详细请... Dify是个不错的开源LLM应用开发平台,提供从 Agent 构建到 AI workflow 编排、RA

ubuntu16.04如何部署dify? 在Linux上安装部署Dify的技巧

《ubuntu16.04如何部署dify?在Linux上安装部署Dify的技巧》随着云计算和容器技术的快速发展,Docker已经成为现代软件开发和部署的重要工具之一,Dify作为一款优秀的云原生应用... Dify 是一个基于 docker 的工作流管理工具,旨在简化机器学习和数据科学领域的多步骤工作流。它

Nginx部署React项目时重定向循环问题的解决方案

《Nginx部署React项目时重定向循环问题的解决方案》Nginx在处理React项目请求时出现重定向循环,通常是由于`try_files`配置错误或`root`路径配置不当导致的,本文给大家详细介... 目录问题原因1. try_files 配置错误2. root 路径错误解决方法1. 检查 try_f

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

SpringBoot配置Ollama实现本地部署DeepSeek

《SpringBoot配置Ollama实现本地部署DeepSeek》本文主要介绍了在本地环境中使用Ollama配置DeepSeek模型,并在IntelliJIDEA中创建一个Sprin... 目录前言详细步骤一、本地配置DeepSeek二、SpringBoot项目调用本地DeepSeek前言随着人工智能技

通过Docker Compose部署MySQL的详细教程

《通过DockerCompose部署MySQL的详细教程》DockerCompose作为Docker官方的容器编排工具,为MySQL数据库部署带来了显著优势,下面小编就来为大家详细介绍一... 目录一、docker Compose 部署 mysql 的优势二、环境准备与基础配置2.1 项目目录结构2.2 基

CentOS 7部署主域名服务器 DNS的方法

《CentOS7部署主域名服务器DNS的方法》文章详细介绍了在CentOS7上部署主域名服务器DNS的步骤,包括安装BIND服务、配置DNS服务、添加域名区域、创建区域文件、配置反向解析、检查配置... 目录1. 安装 BIND 服务和工具2.  配置 BIND 服务3 . 添加你的域名区域配置4.创建区域