温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
基于
SaltStack
部署
数据库
系统
设计
实现
胡颖
2023.7电脑编程技巧与维护1概述云计算是一种基于互联网的计算模式。云计算技术的出现使企业和个人用户都能够更加方便地获取计算资源和应用程序,降低了企业和个人用户的成本,提高了资源的利用率和管理效率1。云数据库是一种基于云计算技术的数据库服务,它将数据库资源提供给用户,用户可以通过云计算技术进行访问和管理。云数据库的服务可以按需使用,无需购买和部署数据库软件和硬件,可以提高企业的数据处理效率并降低成本2。云计算和云数据库技术的发展已经成为当前计算机行业的主流趋势3。随着云计算技术的不断发展和普及,云数据库服务也越来越成为企业和个人用户的首选。目前,国内外云数据库市场规模均呈现出快速增长的态势。预计到2025年,全球云数据库市场规模将达到更大规模4。基于云计算构建的云数据库,可以根据业务需求弹性扩展或缩减计算和存储资源,从而适应不同的业务需求。云数据库的高可用性,可以保证当服务器硬件发生故障或大规模断电时,数据仍然可用。云数据库灾备和备份恢复机制,也能进一步保证当发生灾难或用户误操作更改数据后,数据仍然能够恢复到用户期望的状态。尽管大多数云数据库管理和维护工作由云服务商提供,例如,软硬件的日常更新和优化补丁,让租户可以更关注与业务开发,而不是过多关注底层基础设置管理。由于云数据库规模庞大,在运维云数据库过程中,尤其是针对部署在私有云上的数据库,过多的人工干预和手工操作会造成效率低下,严重的可能导致服务不可用,因此如何提高运维效率可靠性、及时发现和解决潜在的问题、降低系统不可用的风险,制定完善的自动化运维方案是必不可少的。2相关工作利用shell运维云数据库是一种比较流行的方案,通过编写shell脚本可以进行云数据库部署、数据库实例的创建和配置,并且在shell中可以结合数据库相应的dump操作把数据导出,从而实现数据库备份。在任何需要的情况下,按需对数据库数据进行恢复。当云数据部署使用后,也可以编写shell脚本设置相应的监控报警规则,从而对数据库进行监控和警报。除此之外,按照需求编写相应的shell做到数据定期删除,数据库服务日志管理与分析也是分别可以实现的。尽管shell可以实现如上所述诸多功能,但是同时也存在一些不足之处。(1)维护困难和可扩展性差。使用shell来进行云数据运维,所需要的脚本可能涉及数据库部署、数据库实例创建及数据定时备份和删除等,这些功能会导致shell脚本变得十分冗长且复杂,导致后期脚本可读性变差,难以持续维护。(2)灵活性较差。shell脚本是基于命令行执行,对于一些比较复杂的运维需求,例如资源自动伸缩等,无法做到足够的灵活。而且运维不同的数据库,存在不同的指令,因此需要针对不同数据编写和维护多个脚本,这增大了运维工作量。为了使自动化部署更方便且灵活可靠,SaltStack应运而生。SaltStack是一种基于Python语言开发的自动化运维工具,用于配置管理、远程执行命令、应用程序部署、任务编排等操作6。(1)SaltStack使用一种基于消息传递的架构,称为“Salt”,该架构由一个或多个称为“Salt-Minion”的代理节点和一个被称为“Salt-Master”的中央控制节点组成,这种分布式架构使其在大型生产环境中管理和自动部署系统功能变得更加可靠,并且可以不断按需扩展以适应各大规模的基础设施和服务管作者简介:胡颖(1993),女,硕士,助理工程师,研究方向为数据应用与管理。基于 SaltStack 的自动化部署云数据库系统设计与实现胡颖(中国船舶集团第七一五研究所,杭州310000)摘要:云数据库是传统数据库和云计算技术的结合,具有虚拟化数据库资源、按需使用、动态扩展和高可用性的优点。近年来,越来越多的公司和机构将数据库迁移到云上,导致对云数据库的需求越来越大。提出了一种基于 SaltStack 的自动化部署云数据库系统。主要阐述了有关自动化部署云数据库系统的功能需求及相对应的数据库表结构的实现。关键词:云计算;SaltStack 工具82DOI:10.16184/prg.2023.07.0012023.7电脑编程技巧与维护理;(2)SaltStack提供一系列模块和插件,使管理和配置大规模服务器集群变得更加容易和高效;(3)SaltStack是一种基于声明式配置的自动化工具7,不用编写繁杂且难以维护的脚本,采用YAML等格式的配置文件来描述系统期望的状态,SaltStack将系统最终配置成所需要的状态。SaltStack是一个可靠、灵活、可扩展且易于使用的自动化运维工具,可以大大简化互联网管理和配置管理的工作7。下面介绍基于SaltStack的自动化部署共享存储的云数据库系统。3系统设计与实现基于SaltStack的自动化部署云数据库系统的设计主要分为物理资源池、实例创建与删除、实例的操作、实例备份与恢复4部分。物理资源池包括各种物理服务器,为云数据库系统正常运行提供计算和存储资源;在物理资源池基础上,通过自动化部署系统实现数据库实例的生命周期管理,包括创建实例、启动实例和删除实例;一旦数据库实例成功创建,可以对数据库实例进行操作与管理。除此之外,为了保证数据安全性和可恢复性,需要制定合理的备份策略对数据进行备份,在必要时及时进行数据恢复。3.1物理资源池的创建在物理资源池中,云数据库基础设施由支持多种数据库(MySQL、Oracle、SQL Server等)的物理服务器组成。有必要创建一个数据库表来记录物理服务器池的有关信息,例如,存储的数据类型、本地的虚拟IP地址和多播地址。此外,还需要向用户显示物理数据库资源池的状态,例如,可用性、磁盘利用率和内存利用率。通常不同资源池上剩余资源的大小是影响数据库实例创建的主要因素,需要根据资源需求及每个资源池上剩余的资源选择资源池创建数据库实例,从而合理、高效地利用物理资源。通过ServicePoolList数据库表存储数据库的物理资源池中的信息。这个数据库表的内容如图1所示。物理资源池的相关实现如下:在添加物理资源池时,平台会通过IP格式、字符串长度、组播地址等信息进行前端审核。如果审核通过,则在前端编码上述信息,并且以ASN.1格式将它们发送到C+后端;如果验证失败,则系统会提示用户验证失败。C+后端对ASN.1消息进行解码,并将网站输入的相关信息写入ServerPoolList数据库表,此时服务器池处于不可用状态。在此之后,服务器池中的服务器将被C+后端多次ping。如果C+后端能够成功ping通服务器IP地址,则会将后端输出的消息按照协议缓冲区格式进行编码并发送至SaltStack端。当ping通后的消息发送至SaltStack端后,首先对协议缓冲区消息进行解码,然后调用SaltStack接口,根据IP地址对所在的服务器进行集群配置。配置集群的过程包含 创 建 虚 拟IP地 址、安 装PaceMaker、安 装Corosync和配置数据库4点。在配置集群的过程中,为了使后续创建的数据库实例能够共享存储,可通过SaltStack创建一个卷组(VG)。随着上述工作的完成,SaltStack master会接收来自Salt-Minion集群的相关信息,将接收到的信息编码为协议缓冲区格式,并将其返回C+后端。C+后端将从SaltStack接收的信息写入ServerPoolList表的相应字段,并将服务器状态设置为可用。此时,已完成添加物理资源池,如果在添加的任何阶段发生错误,则数据库表中的服务器状态字段将被修改为添加失败。物理资源池的创建流程如图2所示。图1物理资源池的相关数据库表图2物理资源池的创建流程IDIDVIPServicePoolListPKNameBackupPathDbTypeDiskTotalMemoryTotalStatusDeletedBroadcastIpDeploy StatusDiskRemainedMemoryRemained开始输入IP地址等信息否校验是后端解码并保存物理资源信息到数据库服务器可ping通是后端发送消息给SaltStackSaltStack解码消息并对服务器进行配置否后端更新物理资源状态信息结束832023.7电脑编程技巧与维护3.2实例创建与删除在云数据库系统中,创建和删除数据库实例是核心功能之一。尽管删除实例也是一个重要的过程,但创建实例更为复杂,并且包含更多的数据库表。因此,主要描述创建实例时所涉及的数据库表。为了提高效率,在创建实例时使用了多线程设计。每次创建实例时,都会启动一个任务线程进行处理。创建实例时,会涉及3个数据库表,即SrvConnec-tion表、DbEntityList表和ServerPoolList表。SrvConnec-tion表是一个主要用于查询的表,该表主要包含最大连接数、内存和Iops等记录实例的参数信息。DbEntityList表是通过MaxConnection外键分配给SrvConnection表的,在确定了实例的最大连接数之后,表中的一些其他信息可以利用SrvConnection表来确定。创建实例的3个表之间的关系如图3所示。实例创建和删除的关联实现如下,创建实例时,平台会对最大连接数、实例容量和验证内容等输入信息进行前端验证。进一步判断实例名称是否合法,以及专用网络是否连接。如果无法通过验证,则系统会警告使用者进行整改;如果验证通过,则前台就对输入信息进行加密,并将其发送到C+服务端,以便进行处理ASN.1消息格式。在接收到ASN.1消息后,C+服务端首先对其进行解密,根据解密后的信息对DbEntityList进行数据同步,并将其状态字段修改为禁用状态。C+服务端发送服务器池资源信息同步请求到Salt-Slack。当SaltSlack Master接收到所有Salt-Minion的状态信息后立刻返回服务器信息给C+服务端,服务端将接收到的信息更新到ServerPoolList表中。通过加权计算各服务器池当前的剩余存储和磁盘大小,选择满足需求的服务器池。如果所有服务器池都不满足要求,则返回创建错误;如果满足要求,则调用Create Instance方法从DbEntityList数据库表中检索实例信息,并以协议缓冲区消息格式将其传递给Saltslack端。收到消息后,Saltslack将创建服务器池的一个实例,步骤如下:(1)创建一个用于安装数据库实例的共享存储LVM。在LVM中创建一个实例,并为每个实例生成一个随机密码和增量端口号。(2)将实例配置到PaceMaker,以形成具有备用功能的集群状态。(3)检测实例的状态。如果连续25次检测不可用,则创建将失败。(4)更新服务器池的状态信息。(5)SaltSlack将 结 果 返 回 到C+服 务 端,更 新DbEntityList信息,包括VIP、Username和Password,并将状态设置为可用。如果某个步骤失败,则将状态设置为“创建失败”。3.3实例的操作由于网页不会自动更新实例状态,用户必须手动更新页面才能获得最新的实例状态。对实例的操作包括更新、更新状态和参数更改。参数更改包括3个数据库表,DbEntityList、DbParaList和AllParameterList。3个表之间的关系如图4所示。实例操作的实现如下:对于数据库实例,系统提供多个数据库参数预设值,并将它们持久化存储在AllPa-rameterList数据库表中。前端会对页面上的输入信息进行校验,如果用户输入的信息不合法,则前端会请求用户重新输入,直到输入正确为止,并且对正确的信息以ASN.1消息编码格式将其发送给C+服务端。该消息包含实例ID、参数Uuid、参数当前值和更改的值等信息。图3创建实例的3个表之间的关系图43个表之间的关系SrvConnectionPKMaxConnectionMemoryIopsDbEntityListIdPKNameDbTypeStatusUuidPortMaxConnectionVipApplyMemorySizeServicePoolListPKIdNameIpVipBackupP