分享
CT(Cluster Test)-MiniCluster 模块介绍
输入“/”快速插入内容
CT(Cluster Test)-MiniCluster 模块介绍
用户5478
用户5478
用户2731
用户2731
用户9545
用户9545
用户4639
用户4639
2024年9月22日修改
背景说明
这篇文章
稳定性测试实现方案
中介绍了 Cluster Test 的相关背景,以及最终实现方案的选择。
附:
PR 链接
MiniCluster
框架
当前 hugegraph-cluster-test 有三个模块
1.
hugegraph-clustertest-dist
2.
hugegraph-clustertest-minicluster
3.
hugegraph-clustertest-test
hugegraph-clustertest-minicluster 模块
hugegraph-clustertest-minicluster 负责实现 MiniCluster 的功能,包括集群的启动、配置。
Minicluster 内部由四个模块组成:config、env、node 和 base。
•
Config 模块
:负责处理不同节点的模板配置文件。
•
Node 模块
:负责生成和管理不同类型的节点。
•
Env 模块
:负责集成各节点,构建集群环境,并通过 EnvFactory 根据系统属性 envType 创建相应的集群环境。
•
Base 模块
:提供 minicluster 所需的工具类。
框架图如下所示,config、env 和 node 模块分别通过 BaseConfig、BaseEnv 和 BaseNodeWrapper 接口定义对外开放的方法,通用逻辑由抽象类实现,具体节点类则负责补充实现细节和需要区分的功能。
clustertest-minicluster UML 图
hugegraph-clustertest-dist 模块
hugegraph-clustertest-dist 和其他各节点实现中的 dist 组成相似,src/assembly/static 目录中包括了集群中各节点和图运行所需的 Template 文件、log4j2 文件以及其他的配置文件,不同的文件在 miniCluster 中又不同的 config 类进行处理,最终转移到节点对应的文件夹中。descriptor 目录中包括了 assembly.yml 文件,指定打包的文件
hugegraph-clustertest-test 模块
hugegraph-clustertest-test 包括了对 miniCluster 的单元测试和集成测试,计划在 test 模块中加入混沌测试的测试方法,自主实现混沌测试框架。
画板
设计思路
MiniCluster 最重要的功能是在本机环境下搭建并启用一个可以自主设置节点数目的小集群,以对 HugeGraph 进行集成测试。整体的实现逻辑可以理解为将
HugeGraph Distributed (pd‐store) Version Deployment Guide
中的集群部署自动化,通过随机生成节点需要的配置文件(application.yml、log4j2 文件等),并使用进程启动节点。
启动顺序
1.
首先 EnvFactory 根据提供的 EnvType 属性确定创建的集群类型,并根据节点数量初始化 clusterConf 类,clusterConf 根据不同的节点数量初始化不同的 Config 对象,用于存储节点的配置。
2.
配置类读取 template 文件,并随机生成空闲的端口号对模板文件进行替换,从而避免在测试阶段发生端口被抢占的情况。
3.
配置类初始化完成后,由 env 类生成不同的 NodeWrapper 对象,NodeWrapper 对象会为节点创建对应的文件夹,用于存放配置文件,并为节点启动进程。
4.
节点文件夹创建完成后,env 将 clusterConf 中的配置写入文件夹下,并逐一启动节点,最终实现集群环境的搭建。
画板
配置导入
Mini Cluster 实现中最大的问题在于以最小的代价导入配置文件,如果为每一个节点都单独创建所有的配置文件就会导致 dist 的过度冗余,也会极大地损害集群的可拓展性。考虑到大多数节点的配置文件只在极少数配置项上存在不同,因此可以利用 template 文件提供统一的节点配置模板,通过对配置项进行关键词替换实现对不同节点的单独配置。