当前位置: 首页 > 科技观察

千云科技:如果GitLab使用CMP来管理PostgreSQL

时间:2023-03-16 17:08:21 科技观察

事件概述1月31日晚,GitLab在推特上发文承认因UNIX运维误操作导致生产环境数据被彻底删除。管理员在荷兰工作到深夜。在他发现GitLab的备库db2无法写入后,为了让数据库复制继续下去,他筋疲力尽,经过分析决定清空db2.cluster.gitlab.com中的备库db2,不幸的是他为数据库选择了错误的服务器,他删除了生产服务器db1.cluster.gitlab.com中的db1数据库目录,这是一个有300GB活动生产数据的目录,其中大部分已经丢失。GitLab随后在博客中补充说大部分数据已经恢复,并在YouTube上开始直播,将恢复工作公开。事件引发的思考这件事一出,整个IT行业一片哗然。云厨科技(www.cloudchef.io)认为,在关注事态进展的同时,我们更应该思考出现此类问题的原因,以及未来如何预防、应对。首先,我们可以理解,在这个过程中,GitLab系统管理员犯了以下错误:1.在错误的机器上执行删除操作,rm-rf,删除操作应该在standbyPostgres所在的机器上执行位于2..直接删除文件系统中的数据库文件目录应该是执行数据库操作,清空数据库。3.备份缺少验证错误。GitLab部署的5套备份/复制方法中,没有一套运行可靠或一开始就设置正确。如果Gitlab使用自动化的方式来管理他的数据库,而不是在生产线上敲键盘,会发生什么?企业运维能力的强弱,与在线环境下的指令输入有关。你越喜欢上网敲单,你的运维能力就会越弱,越是通过自动化来处理问题,你的运维能力就会越强。真正良性的运维能力是——人管理代码,代码管理机器,而不是人管理机器。使用CMP管理数据库在传统运维中,系统管理员一般使用终端窗口远程登录被管理机器,然后运行各种脚本进行运维操作。这种管理要靠系统管理员自己来区分什么时候要对哪台机器的应用进行操作,在管理多台机器的时候,系统管理员需要在多个终端之间切换。对于系统管理员来说,为了不犯错误,他要做很多事情,例如:1.必须时刻牢记哪个应用部署在哪台机器上,无论是生产环境的应用还是备份环境2.必须清楚知道当前应用处于什么状态,可以进行哪些操作?3、你必须清楚地知道每个应用程序之间的关系。当你想在一个应用程序上运行步骤时,它会影响其他应用程序。在这个过程中,任何一步都是不允许的。单靠人力很难保证出错。针对企业IT基础设施管理和运维中存在的问题,Gartner提出了CMP(CloudManagementPlatform,云管理平台)的解决方案,并指出了CMP的发展历程:以第三代CMP为代表,以以应用为核心,千云科技(www.cloudchef.io)介绍了SmartCMP中组件和蓝图的概念。组件是可部署应用程序的抽象和建模。组件有自己的生命周期,从创建、配置、启动、停止到销毁,在其生命周期的每个阶段,都可以有相应的操作(即可执行的脚本文件)与之关联。这些操作是预定义的,并且在投入生产环境之前已经实施验证。以定义PostgreSQL数据库组件为例,可以定义其在创建、配置、启动、参数更新、清除、备份等阶段的操作。下图展示了SmartCMP中PostgreSQL的组件定义:通过这个定义,即使是非专业的数据库管理员也可以执行这些预定义的简单明了的操作。在实际生产环境中,单机部署单个组件是不够的。比如PostgreSQL一般需要提供复制(Replication)或者集群(Cluster)的功能。GitLab使用了PostgreSQL的复制功能,然后就出现了这个运维问题。相应的,CMP中的蓝图可以对这些功能进行抽象描述,同时CMP的编排引擎会根据蓝图中的抽象来部署和执行组件操作。以PostgreSQL的复制功能为例。如下图所示,在DatabaseServer虚拟机中部署了PostgreSQL,在ReplicationDatabaseServer虚拟机中部署了一个备PostgreSQL。绿色虚线标记了它们之间的依赖关系。在实际按照蓝图部署PostgreSQL的时候,各个组件遵守蓝图中预定义的关系,用户可以选择某个组件,得到该组件可以执行的操作列表,然后执行某个操作。回到Gitlab运维中的问题,使用CMP后,如果Gitlab系统管理员发现db2.cluster.gitlab.com中的备库db2无法写入,在蓝图中选择备库PostgreSQL清空数据库。在执行此类破坏性操作之前,SmartCMP会自动为db2所在的虚拟机db2.cluster.gitlab.com创建一个快照,然后执行相应的操作。如果Gitlab公开说明中提到的备份数据库db2清除后仍然无法写入,我们可以在操作列表中选择删除db2,然后安装,这样会生成一个新的备库。当然,在删除和安装之前,SmartCMP会自动创建虚拟机快照,以防不测。试想一下,如果Gitlab系统管理员在CMP中仍然出错,选择清空或重装生产数据库,那么他发现问题后可以立即从快照中恢复原始数据。显然,CMP将运维管理模块化,将具体的操作和组件进行绑定,尽可能降低组件之间的耦合度,简化运维难度。随着自动化运维和开发维护一体化的快速普及,企业只能通过以应用为中心的云管理平台,实现从部署到管理(包括监控、告警、备份、恢复等)的全生命周期管理。)只有这样才能真正提高工作效率和操作合规性,避免类似的事件在Gitlab中发生。更多精彩内容,请关注千云科技微信公众号: