APP下载

Cloudera Manager扩展MariaDB服务的方法研究

2024-04-14黄杰马凯陈雪瓶孙伯清何宏靖

现代信息科技 2024年2期

黄杰 马凯 陈雪瓶 孙伯清 何宏靖

DOI:10.19850/j.cnki.2096-4706.2024.02.021

收稿日期:2023-05-10

基金项目:重庆工程学院校本科研项目(2022xzcr04)

摘  要:大数据平台的优点在于能够快速处理超出单机能力的数据,平台中的数据仓库不仅具备存储功能,还兼具离线式的数据处理和分析能力。然而,数据仓库在服务响应方面效率不高,并且事务处理支持较弱,因此许多企业仍采用传统关系数据库提供查询和联机事务处理服务。Cloudera Manager管理的CDH可以动态扩展数据仓库,但不能部署关系数据库,为突破这局限性,以MariaDB为研究对象,并利用Cloudera Manager的扩展能力引入MariaDB parcel应用包和CSD管理包用来实现对其部署和管理。最终,经过实际验证,通过Cloudera Manager可视化动态部署和监控管理MariaDB服务是完全可行的,这为关系数据库服务的扩展奠定了基础。

关键词:Cloudera Manager扩展;部署MariaDB服务;Parcel包;Custom Service Descriptors

中图分类号:TP311.5    文献标识码:A    文章编号:2096-4706(2024)02-0096-06

Research on the Method of Extending MariaDB Service of Cloudera Manager

HUANG Jie, MA Kai, CHEN Xueping, SUN Boqing, HE Hongjing

(Chongqing Institute of Engineering, Ba'nan  400056, China)

Abstract: The advantage of big data platforms is that they can quickly process data beyond the capacity of individual machines. The data warehouse in the platform not only has the storage function, but also has the offline data processing and analysis ability. However, data warehouses are not efficient in service response and the support of transaction processing is weak, so many enterprises still use traditional relational databases to provide query and online transaction processing services. CDH managed by Cloudera Manager can dynamically expand the data warehouse, but cannot deploy the relational database. In order to break this limitation, this paper takes MariaDB as the research object, uses the extension capability of Cloudera Manager to introduce MariaDB parcel application package and CSD management package, so as to deploy and manage them. Finally, after actual verification, it is feasible to dynamically deploy and monitor and manage MariaDB services visually through Cloudera Manager, laying the foundation for the expansion of relational database services.

Keywords: Cloudera Manager extension; deployment of MariaDB service; Parcel package; Custom Service Descriptors

0  引  言

经过近几年大数据的高速发展,大数据应用产品及研究产物在业界催生下层出不穷,其中Cloudera公司主要大数据产品CDH(Cloudera's Distribution Including Apache Hadoop)/CDP(Cloudera Data Platform)尤为知名。CDH是最完整的Apache Hadoop及相关项目的发行版[1],具有大数据仓库可扩展存储和分布式计算的功能,但其本身在实时服务上表现有所不足,通常有高延迟[2]、不支持事務性[3,4]操作以及不具备数据增删改的功能等缺陷。一种解决方案是以定时运行的方式利用计算框架计算得到分析结果的数据更新提供数据服务的数据库中对应数据,进而实现非实时数据更新服务,也能实现事务性等操作。

Cloudera Manager[5](后文简称CM)是用于管理CDH集群的应用程序,具有可视化部署CDH功能以及动态扩展CDH节点以增加CDH网络算力[6]的能力。如果CM能可视化部署或者扩展CDH,那么MariaDB数据库是否也能集成到CM之中接受CM管控呢?答案是肯定的。本文旨在解决如何使用CM可视化部署和管理MariaDB服务,扩大CM管理的范围,为CM扩展新应用打下牢固的基础。

在遵从CM应用部署规则的情况下,从CM扩展功能出发,研发MariaDB的Parcel应用包和CSD(Custom Service Descriptors)管理信息包,以至于能够使用CM部署管理MariaDB服务。在完成研发扩展包后,主要从四方面进行验证:一是在CM UI(CM的用户界面)界面检查MariaDB信息是否存在;二是测试利用CMUI添加MariaDB服务是否能够顺利部署;三是测试部署好的MariaDB服务被CM UI管理操作是否出现异常,比如停止是否异常;四是对MariaDB进行连接测试是否存在异常。通过实验表明,利用CM扩展MariaDB是完全有效的。

本文第1节介绍CM和MariaDB的概念;第2节介绍CM扩展功能,并解读其具体构成;第3节配置MariaDB的参数,并在CM UI上验证研发的MariaDB扩展包是否有效;第4节总结本文工作。

1  相关介绍

1.1  CM介绍

CM是管理CDH集群的端到端应用程序。CM制定了可视化的企业部署的标准,能控制CDH集群授权操作的每部分,具有增强性能、强化服务质量、提高顺从性以及减少管理成本作用。通过CM可以容易地部署和中心化操作整个CDH栈和其他受控服务,能够自动安装程序,减少大量安装时间,提供一个中心控制平台能够改变整个集群的配置,以及集成了日志和诊断工具进行监控集群环境[7]。

CM以Server為中心节点,其中心服务与数据库进行元数据交互,提供集群管理服务,并与客户端进行交互,管理着以Agent管理的服务和接受CM管控的应用程序,如图1所示,从远程Cloudera Repository库获取最新和更多应用软件。每个部件都有在其位置对应的作用,如表1所示。

CM管理的主机间是通过心跳机制完成信息和命令同步。默认情况下,每个Agent间隔15秒向CM服务器发送一次心跳。当状态改变时,为了减少用户延迟,心跳频率会增加。通过心跳交换,Agent将正在进行的活动报告给CM服务器,同样地,CM服务器会将当前任务反应给Agent。例如,如果在CM UI上启动了一个服务,Agent会尝试启动相关进程;如果进程启动失败,CM服务会将启动命令标记为失败。

图1  Cloudera Manager架构

Clients 与服务器交互的接口:

1)管理控制台——基于Web的用户界面,管理员可以使用它管理集群和Cloudera Manager

2)API——开发人员用来创建自定义Cloudera Manager应用程序的API

1.2  MariaDB介绍

MariaDB[8]是一个全球流行的开源关系数据库,由MySQL的原始开发人员设计开发,与MySQL兼容,并被承诺永久保持开源状态,能够轻松部署并兼容所有主流Linux发行版本,比如:CentOS系列、Debian Linux系列及衍生版本等。目前拥有两种类型版本:Community版(MariaDB Community Server)和Enterprise版(MariaDB Enterprise Server),其中Enterprise版本构建在Community版本上,借助MariaDB MaxScale数据库代理,提供一流的性能、数据安全性、复制、集群和高可用性。并且可以在任何云(含私有云、公共云、混合云)中从单个节点扩展到全球规模,适用于从OLTP到OLAP的任何工作负载。

MariaDB具有数据仓库的特性:

1)兼容现代SQL,支持现代SQL特性,如公共表表达式(CTEs)、窗口函数、时态数据表和JSON函数。MariaDB的SQL与MySQL兼容,同时扩展了柱状存储以及其他功能。

2)可插拔式存储引擎,InnoDB、Aria、ColumnStore、MyRocks以及其他第三方引擎都允许MariaDB使用前端进行扩展,不仅仅是事务处理。

3)柱状存储,MariaDB列存储功能植入MariaDB Community Server中,用于柱状分析(MPP)或混合事务分析处理(HTAP)。

4)集群化,Galera集群引擎实现集群的复制和状态转换。

5)高可用性,MaxScale是能够实现故障转移和事务重放的数据库代理。

6)复杂关系支持,高版本MariaDB支持JSON数据类型,其中使用了“混合关系/JSON”数据模型,拥有更大的模式灵活性和更快的开发速度,除了能将数据存储为JSON,还提供了一套完整的JSON函数进行查询。

针对不同的应用场景,MariaDB提供了对应策略,相对地使用不同的数据库架构,如:图2是一个OLTP架构,使用MaxScale作数据库代理实现自动故障切换,数据后台数据库同步实现高可用,ES表示企业版服务。图3是Galera集群架构,主要不同是后台数据同步以Galera集群冗余的方式实现虚拟同步。图4中的混合结构是兼顾分析和事务处理,支撑不同引擎之间的Join操作。

2  CM扩展机制

CM是一个用于管理CDH服务及其所运行集群的工具。通过使用CM扩展机制[9],CM集群中能够正常部署除Cloudera提供的CDH范围内的服务,如:非Cloudera提供的软件MariaDB,还能够为此类应用进行如同CDH类似的管理和监控。

CM通过它的两个部分(Parcel包部分和CSD部分)与MariaDB建立联系,如图5 Parcel包含有应用程序的二进程代码和与CM和CSD联系的元信息,其中关键文件是parcel.json。CSD提供了能在CM UI上展示现出来的软件基本信息和控制MariaDB的服务信息,与CM联系的service.sdl文件详述了CMUI所有行为描述。Parcel包和CSD具有一定的联系,CSD通过Parcel包提供的tags识别目标应用软件,因此,CM方能管控MariaDB应用服务。

2.1  meta文件结构

以MariaDB为例说明(下同),在Parcel包中,meta文件夹是CM能够识别有效Parcel包的必要组成部分,该路径文件结构如图6所示。它路径下可以包含多级文件路径及其路径下的文件,其中Parcel.json和mariadb-env.sh是MariaDB parcel包必备配置文件,在meta根路径下,决定了Parcel包是否能被CM有效使用。

2.2  parcel.json结构

关于parcel.json,其内容结构是一个JSON格式,存储着Parcel配置信息,它能够被CM服务解析,解析出的信息能够被CM充分利用,如提供版本信息。parcel.json内容这里分为三部分:基础信息、加载信息和用户权限。

2.2.1  基础信息

JSON文件中基础信息包含name、version、packages以及components。name表示Parcel包的名字,命名规则除了不能使用短横线“-”,其他字符没有明确限制,并且不能和其他已存在CM中的应用重复;version描述Parcel包的版本号;packages不为CM提供任何信息,纯粹记录子包信息,描述了两个信息,子包的name和version;components描述Parcel包的对应逻辑组件,记录的信息提供给CM服务,进而供用户查看参考。它下面有四个信息项,name描述组件名,version描述组件的版本号,pkg_version表示組件打包的版本号,pkg_release表示组件打包发行的版本号。

2.2.2  加载信息

这部分包含provides和scripts两项。provides字段是一个字符串列表,提供一组标签(图5中的tags),CM可以通过这组标签识别Parcel包的软件服务。因此,命名时应当避开CM内置的标签,也要避免使用已经存在的第三方标签,更不能使用“*”命名标签,否则这会影响所有进程。标签对于CM具有区分Parcel包的作用,当CM启动一个服务时后台开启一个进程,这个进程就会请求访问一个或者多个Parcel中的文件。为了避免把每个进程暴露给每个Parcel,便有了标签的概念。通过Parcel发布标签,服务通过订阅标签的方式,就能实现什么Parcel影响什么进程,不干扰其他进程。scripts字段只有defines一个项,用于指定环境脚本程序路径,该项只能定义一个脚本。

2.2.3  用户权限

用户权限用于指定访问用户及其组,这项有users和groups两项。users项主要包含五个信息,用户名、用户的描述名称(longname)、用户的主目录(home)、用户的shell程序(shell)、用户要加入的其他组的列表(extra_groups)。CM不允许配置应用软件要求禁用的用户。groups这项是创建除了用户部分中列出的每个用户创建的每个用户组之外的用户组列表。在运行应用软件时,CM服务会检查环境中用户的信息,若没有发现用户信息则会创建该用户以及组(如MariaDB应用软件设置MySQL用户和MySQL组,则会创建MySQL用户和MySQL组),以至于应用软件能够在用户权限内正常运行。

2.3  Parcel定义脚本

Parcel定义脚本(如mariadb-env.sh文件)是一个关键组件,它允许Parcel影响CM管理的进程。由于Parcel位于它们自己独立的目录中,所以不会有什么程序发现它们,也不会在其中查找文件,定义脚本恰好补充了这点。定义脚本定义并export环境变量,通过这些变量能够找到程序启动程序。CM设置两个特殊变量,用于Parcel确定其所在位置,PARCELS_ROOT是文件系统中所有包所在的目录(默认值:/opt/cloudera/parcels)。PARCEL_DIRNAME是PARCELS_ROOT下的包目录的名称。因此,激活的Parcel软件应用的绝对路径是PARCELS_ROOT/PARCEL_DIRNAME(若定义PARCEL_DIRNAME值是MARIADB,则该路径为:/opt/cloudera/parcels/MARIADB)。

2.4  Parcel包的形成

Parcel本身是一个gzip压缩包,后缀以parcel表示。它包含了部署的所有文件和一些定义的元数据(如图6所示)。Parcel包的命名格式必须为[name]-[version]-[distro_suffix].parcel,其中distro_suffix表示系统版本,如:el7可用于Redhat Enterprise Linux 7及其克隆版Centos 7。

2.5  CSD主路径结构

MariaDB parcel包与MariaDB CSD一起工作能更好地完成协同工作,因为使用CSD的第三方服务可以利用CM的特性,如监控、资源管理、配置、分发、生命周期管理等。CSD文件结构包含scripts、descriptor和aux路径,如图7所示,主要有control.sh文件、service.mdl和service.sdl文件。其中MariaDB服务仅考虑service.sdl和control.sh文件,它们决定了MariaDB服务是否能正常运行以及是否能顺利被CM管控。

2.6  service.sdl文件配置

CSD的核心是服务描述符语言(Service Descriptor Language, SDL)文件:descriptor/service.sdl,用于向CM描述CSD服务细节。整个文件内容由一个JSON结构呈现,描述了如何管理与CSD同名的服务。其作用主要有:提供服务类型和关联的角色类型信息;如何启动服务和角色;配置服务/角色参数;配置文件生成器。严格地是service.sdl文件必须位于descriptor目录中,否则CM服务无法进行解析。MariaDB service.sdl主要包含:name表示服务逻辑名,规则是大写英文字母、数字和下划线的组合并且全局唯一;label在UI显示,面向用户;description向用户提供服务描述;version定义版本是CSD包命名规则的一部分;定义Parcel的子项requiredTags用于匹配Parcel的标签;roles子结构主要定义角色,关联脚本(如control.sh)配置具体行为。

2.7  control.sh描述

scripts目录包含用于控制底层服务的所有可执行脚本,如control.sh,这些脚本会被service.sdl文件内容指定。能用任何可以在集群上执行的语言编写,通常使用Bash,因为它默认内置在常见的Linux中。在运行时,此目录中的所有文件发送给CM管理的Agent,并写入Agent的进程路径下。当启动一个角色进程或者执行一个角色命令或者部署客户端配置时,会执行这些脚本。通常control.sh提供应用软件的启动和关闭,CM的這些行为没有默认的参数比如“start”“stop”等,具体行为在SDL文件中定义。

2.8  CSD包的形成

CSD包是一个jar文件,包含了图7中的所有文件,其命名规则为:--.jar,文件名的extra是为使用maven构建时CSD的快照构建保留,如“MARIADB-1.0.1-SNAPSHOT.jar”。

2.9  Parcel包和CSD的部署流程

若CM与Parcel和CSD需要建立联系,还需有以下步骤:

1)Parcel包放入CM的parcels-repo路径下并将其sha1码植入同名sha文件中,以至于能确保Parcel包的完整性。

2)CSD包置入CM的csd路径中,以确保CM能通过此路径找到MariaDB的管理应用程序。

3)重启完成配置更新,运行的CM并不能识别到CSD。

4)完成,如果没有出现错误,通过CM UI能够正常管控MariaDB服务。

3  实现效果

3.1  配置部署

以MariaDB 10.6.12版本为例,配置parcel.json参数,如表2所示,其中JSON结构存在多层情况,这里使用路径方式区别分层,如scripts/defines表示scripts字段下还有子json,它有defines字段,定义为“mariadb-env.sh”。通过表2和表3的配置信息,创建Parcel包和CSD包(完整包参考文献[10]),并按照部署流程进行部署,完成部署后接下来查看效果。

3.2  实现效果

CMUI引入的Parcel包需要进行下载、分发和激活三个步骤。而CSD需要重新启动CM服务或者重启CM管理主节点。

3.2.1  服务安装性检查

1)Parcel安装成功检查。通常CM UI的Parcel列表中出现MARIADB安装项,表示这个Parcel处于一个可以被安装的状态,CM获取到meta中元数据。若状态项出现已分配和以激活,如图8所示,表示MariaDB已经成功部署到集群中,此时CM可以通过CSD管控MariaDB服务。

2)CSD有效性检查。查看集群的服务列表,出现MARIADB SERVER项则表示CSD已成功被CM识别。接下来尝试安装。

3.2.2  MariaDB服务安装检查

1)运行的服务列表。图9中表示MariaDB安装在Cluster1的CDH集群中,但是这个集群只有MariaDB服务,充分表示第三方服务可以脱离CDH存在;绿色对勾标记表示了MariaDB服务处于正常运行中。

2)服务实例。图10中MARIADB_SERVER NODE是在service.sdl中对服务角色的命名,MariaDB服务成功运行在cdh2(192.168.56.102)和cdh3(192.168.56.103)两个节点上,并且处于已启动状态。

3.2.3  MariaDB服务连接测试

MariaDB服务部署到cdh2和cdh3个节点,如图11所示,通过DBeaver[11]的MariaDB服务,显示成功连接,说明CM成功实现MariaDB的部署,验证CM能够部署和管控MariaDB关系数据库的设想。

3.2.4  停用测试

执行停止服务命令后,如图12所示,cdh2和cdh3主机状态处于停止状态,与图10启动状态呈现鲜明对比,MariaDB服务运行端口号和进程均已退出,这表明通过CM成功实现停止MariaDB服务,测试通过。

通过CMUI进行信息检查、软件部署和功能操作以及使用DBeaver数据库客户端连接测试,并且均以无异常显示,证实了利用CM能够扩展MariaDB关系数据库。

4  结  论

本文利用CM扩展方法研发了MariaDB的Parcel应用包和CSD管理包,并提供了这两个扩展包的使用方法,进而实现CM对关系数据库MariaDB的部署和管控。通过实验安装和服务测试,验证了此方法有效性,为CM用户使用关系数据库功能开拓渠道,同时为CM扩展更多应用软件提供了方法。

参考文献:

[1] CLOUDERA.CDH Overview [DB/OL].(2021-09-29).https://docs.cloudera.com/documentation/enterprise/6/6.3/topics/cdh_intro.html.

[2] 张延松,王珊,周烜.内存数据仓库集群技术研究 [J].华东师范大学学报:自然科学版,2014(5):117-132.

[3] 田燕军,王玥.hbase与hive整合研究 [J].山西电子技术,2022(1):81-83.

[4] 李翀,张彤彤,杜伟静,等.基于Hive的高可用双引擎数据仓库[J].计算机系统应用,2019,28(9):65-71.

[5] POL U R. Big data and hadoop technology solutions with cloudera manager [J].International Journal,2014,4(11).

[6] CHAI R,GAO S,LAN J,et al. Efficient Computing Resource Metric Method in Computing-First Network [J].Journal of Computer Research and Development,2023,60(4):763-771.

[7] TURLAND M,SLADE P. Farmers' willingness to participate in a big data platform [J].Agribusiness,2019,36(1):20-36.

[8] MARIADB. MariaDB Server [DB/OL].(2023-01-24).https://mariadb.com/docs/server.

[9] GITHUB. Cloudera Manager Extensions [DB/OL].(2020-12-12).https://github.com/cloudera/cm_ext/wiki.

[10] GITHUB.CM的MariaDB扩展 [DB/OL].(2023-04-20).https://github.com/huangjie155/Store.

[11] DBeaver. Universal Database Tool [DB/OL].(2023-05-07).https://dbeaver.io.

作者简介:黄杰(1992—),男,汉族,重庆人,硕士研究生,讲师,研究方向:大数据部署监控、模式匹配。