
技术分享 | 在GreatDB分布式部署模式中使用Chaos Mesh做混沌测试
● 1. 需求背景与万里安全数据库软件GreatDB分布式部署模式介绍
● 2. 环境准备
● 3. Chaos Mesh的使用
● 4. 在argo中编排测试流程
1. 需求背景与万里安全数据库软件GreatDB分布式部署模式介绍
1.1 需求背景
混沌测试是检测分布式系统不确定性、建立系统弹性信心的一种非常好的方式,因此我们采用开源工具Chaos Mesh来做GreatDB分布式集群的混沌测试。
1.2 万里安全数据库软件GreatDB分布式部署模式介绍
万里安全数据库软件GreatDB 是一款关系型数据库软件,同时支持集中式和分布式的部署方式,本文涉及的是分布式部署方式。
分布式部署模式采用shared-nothing架构;通过数据冗余与副本管理确保数据库无单点故障;数据sharding与分布式并行计算实现数据库系统高性能;可无限制动态扩展数据节点,满足业务需要。
整体架构如下图所示:
2. 环境准备
2.1 Chaos Mesh安装
在安装Chaos Mesh之前请确保已经预先安装了helm,docker,并准备好了一个kubernetes环境。
● 使用Helm安装
1)在 Helm 仓库中添加 Chaos Mesh 仓库:
2)查看可以安装的 Chaos Mesh 版本:
3)创建安装 Chaos Mesh 的命名空间:
4)在docker环境下安装Chaos Mesh:
● 验证安装
执行以下命令查看Chaos Mesh的运行情况:
kubectl get pod -n chaos-testing
下面是预期输出:
如果3个pod的状态都是Running,表示 Chaos Mesh 已经成功安装。
2.2 准备测试需要的镜像
2.2.1 准备mysql镜像
一般情况下,mysql使用官方5.7版本的镜像,mysql监控采集器使用的是mysqld-exporter,也可以直接从docker hub下载:
2.2.2 准备zookeeper镜像
zookeeper使用的是官方3.5.5版本镜像,zookeeper组件涉及的监控有jmx-prometheus-exporter 和zookeeper-exporter,均从docker hub下载:
2.2.3 准备GreatDB镜像
选择一个GreatDB的tar包,将其解压得到一个./greatdb目录,再将greatdb-service-docker.sh文件拷贝到这个解压出来的./greatdb目录里:
将greatdb Dockerfile放到./greatdb文件夹的同级目录下,然后执行以下命令构建GreatDB镜像:
2.2.4 准备GreatDB分布式集群部署/清理的镜像
下载集群部署脚本cluster-setup,集群初始化脚本init-zk 以及集群helm charts包(可咨询4.0开发/测试组获取)
将上述材料放在同一目录下,编写如下Dockerfile:
执行以下命令构建所需镜像:
2.2.5 准备测试用例的镜像
目前测试支持的用例有:bank,bank2,pbank,tpcc,flashback等,每个用例都是一个可执行文件。
以flashback测例为例构建测试用例的镜像,先将用例下载到本地,在用例的同一目录下编写如下内容的Dockerfile:
执行以下命令构建测试用例镜像:
2.3 将准备好的镜像上传到私有仓库中
创建私有仓库和上传镜像操作请参考:https://zhuanlan.zhihu.com/p/78543733
3. Chaos Mesh的使用
3.1 搭建GreatDB分布式集群
在上一章2.2.4 中cluster-setup目录下执行以下命令块去搭建测试集群:
输出信息:
执行如下命令,查看集群pod状态:
输出信息:
看到c0-zookeeper-initzk-7hbfs的状态是Completed,其他pod的状态为Running,表示集群搭建成功。
3.2 在GreatDB分布式集群中使用Chaos Mesh做混沌测试
Chaos Mesh在kubernetes环境支持注入的故障类型包括:模拟Pod故障、模拟网络故障、模拟压力场景等,这里我们以模拟Pod故障中的pod-kill为例。
将实验配置写入到文件中 pod-kill.yaml,内容示例如下:
创建故障实验,命令如下:
创建完故障实验之后,执行命令 kubectl get pod -n test -o wide 结果如下:
可以看到有带greatdb名字的pod正在被重启,说明注入故障成功。
4. 在argo中编排测试流程
Argo 是一个开源的容器本地工作流引擎,用于在Kubernetes上完成工作,可以将多步骤工作流建模为一系列任务,完成测试流程编排。
我们使用argo定义一个测试任务,基本的测试流程是固定的,如下所示:
测试流程的step1是部署测试集群,接着开启两个并行任务,step2跑测试用例,模拟业务场景,step3同时使用Chaos Mesh注入故障,step2的测试用例执行结束之后,step4终止故障注入,最后step5清理集群环境。
4.1 用argo编排一个混沌测试工作流(以flashback测试用例为例)
1)修改 cluster-setup.yaml 中的image信息,改成步骤2.2 准备测试需要的镜像中自己传上去的集群部署/清理镜像名和tag
2)修改 testsuite-flashback.yaml 中的image信息,改成步骤2.2 准备测试需要的镜像中自己传上去的测试用例镜像名和tag
3)将集群部署、测试用例和工具模板的yaml文件全部使用 kubectl apply -n argo -f xxx.yaml 命令创建资源 (这些文件定义了一些argo template,方便用户写workflow时候使用)
4)复制一份workflow模板文件 workflow-template.yaml,将模板文件中注释提示的部分修改为自己的设置即可,然后执行以下命令创建混沌测试工作流:
以下是一份workflow模板文件:
Enjoy GreatSQL :)
文章转载自公众号:GreatSQL社区
