首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Chaos Mesh 实战分享丨通过混沌工程验证 GreatDB 分布式部署模式的稳定性

Chaos Mesh 实战分享丨通过混沌工程验证 GreatDB 分布式部署模式的稳定性

原创
作者头像
PingCAP
发布于 2022-03-31 06:20:43
发布于 2022-03-31 06:20:43
9500
举报
文章被收录于专栏:PingCAP的专栏PingCAP的专栏

Chaos Mesh 最初作为开源分布式数据库 TiDB 的测试平台而创建,是一个多功能混沌工程平台,通过混沌测试验证分布式系统的稳定性。本文以万里安全数据库软件 GreatDB 分布式部署模式为例,介绍了通过 Chaos Mesh 进行混沌测试的全流程。

需求背景与 GreatDB 介绍

需求背景

混沌测试是检测分布式系统不确定性、建立系统弹性信心的一种非常好的方式,因此我们采用开源工具 Chaos Mesh 来做 GreatDB 分布式集群的混沌测试。

GreatDB 分布式部署模式介绍

万里安全数据库软件 GreatDB 是一款关系型数据库软件,同时支持集中式和分布式的部署方式,本文涉及的是分布式部署方式。

分布式部署模式采用 shared-nothing 架构;通过数据冗余与副本管理确保数据库无单点故障;数据 sharding 与分布式并行计算实现数据库系统高性能;可无限制动态扩展数据节点,满足业务需要。

整体架构如下图所示:

1.jpg
1.jpg

环境准备

Chaos Mesh 安装

在安装 Chaos Mesh 之前请确保已经预先安装了 helm,docker,并准备好了一个 kubernetes 环境。

  • 使用 Helm 安装

1)在 Helm 仓库中添加 Chaos Mesh 仓库:

代码语言:shell
AI代码解释
复制
helm repo add chaos-mesh https://charts.chaos-mesh.org

2)查看可以安装的 Chaos Mesh 版本:

代码语言:shell
AI代码解释
复制
helm search repo chaos-mesh

3)创建安装 Chaos Mesh 的命名空间:

代码语言:shell
AI代码解释
复制
kubectl create ns chaos-testing

4)在 docker 环境下安装 Chaos Mesh:

代码语言:shell
AI代码解释
复制
helm install chaos-mesh chaos-mesh/chaos-mesh -n=chaos-testing
  • 验证安装

执行以下命令查看 Chaos Mesh 的运行情况:

kubectl get pod -n chaos-testing

下面是预期输出:

代码语言:shell
AI代码解释
复制
NAME                                       READY   STATUS    RESTARTS   AGE

chaos-controller-manager-d7bc9ccb5-dbccq   1/1     Running   0          26d

chaos-daemon-pzxc7                         1/1     Running   0          26d

chaos-dashboard-5887f7559b-kgz46           1/1     Running   1          26d

如果 3 个 pod 的状态都是 Running,表示 Chaos Mesh 已经成功安装。

准备测试需要的镜像

准备 MySQL 镜像

一般情况下,MySQL 使用官方 5.7 版本的镜像,MySQL 监控采集器使用的是 mysqld-exporter,也可以直接从 docker hub 下载:

代码语言:shell
AI代码解释
复制
docker pull mysql:5.7

docker pull prom/mysqld-exporter
准备 ZooKeeper 镜像

ZooKeeper 使用的是官方 3.5.5 版本镜像,ZooKeeper 组件涉及的监控有 jmx-prometheus-exporter 和 zookeeper-exporter,均从 docker hub 下载:

代码语言:shell
AI代码解释
复制
docker pull zookeeper:3.5.5

docker pull sscaling/jmx-prometheus-exporter

docker pull josdotso/zookeeper-exporter
准备 GreatDB 镜像

选择一个 GreatDB 的 tar 包,将其解压得到一个 ./greatdb 目录,再将 greatdb-service-docker.sh 文件拷贝到这个解压出来的./greatdb 目录里:

代码语言:shell
AI代码解释
复制
cp greatdb-service-docker.sh ./greatdb/

将 greatdb Dockerfile 放到./greatdb 文件夹的同级目录下,然后执行以下命令构建 GreatDB 镜像:

代码语言:shell
AI代码解释
复制
docker build -t greatdb/greatdb:tag2021 .
准备 GreatDB 分布式集群部署/清理的镜像

下载集群部署脚本 cluster-setup,集群初始化脚本 init-zk 以及集群 helm charts 包(可咨询 4.0 开发/测试组获取)

将上述材料放在同一目录下,编写如下 Dockerfile:

代码语言:shell
AI代码解释
复制
FROM debian:buster-slim as init-zk



COPY ./init-zk /root/init-zk

RUN chmod +x /root/init-zk



FROM debian:buster-slim as cluster-setup

\*# Set aliyun repo for speed*

RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list && \

  sed -i 's/security.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list



RUN apt-get -y update && \

  apt-get -y install \

  curl \

  wget



RUN curl -L https://storage.googleapis.com/kubernetes-release/release/v1.20.1/bin/linux/amd64/kubectl -o /usr/local/bin/kubectl && \

  chmod +x /usr/local/bin/kubectl && \

  mkdir /root/.kube && \

  wget https://get.helm.sh/helm-v3.5.3-linux-amd64.tar.gz && \

  tar -zxvf helm-v3.5.3-linux-amd64.tar.gz && \

  mv linux-amd64/helm /usr/local/bin/helm



COPY ./config /root/.kube/

COPY ./helm /helm

COPY ./cluster-setup /

执行以下命令构建所需镜像:

代码语言:shell
AI代码解释
复制
docker build --target init-zk -t greatdb/initzk:latest .


docker build --target cluster-setup -t greatdb/cluster-setup:v1 .
准备测试用例的镜像

目前测试支持的用例有:bank、bank2、pbank、tpcc、flashback 等,每个用例都是一个可执行文件。

以 flashback 测例为例构建测试用例的镜像,先将用例下载到本地,在用例的同一目录下编写如下内容的 Dockerfile:

代码语言:shell
AI代码解释
复制
FROM debian:buster-slim

COPY ./flashback /

RUN cd / && chmod +x ./flashback

执行以下命令构建测试用例镜像:

代码语言:shell
AI代码解释
复制
docker build -t greatdb/testsuite-flashback:v1 .

将准备好的镜像上传到私有仓库中

创建私有仓库和上传镜像操作请参考:https://zhuanlan.zhihu.com/p/78543733

Chaos Mesh 的使用

搭建 GreatDB 分布式集群

在上一章中 cluster-setup 目录下执行以下命令块去搭建测试集群:

代码语言:shell
AI代码解释
复制
./cluster-setup  \

-clustername=c0 \

-namespace=test \

-enable-monitor=true \

-mysql-image=mysql:5.7 \

-mysql-replica=3 \

-mysql-auth=1 \

-mysql-normal=1 \

-mysql-global=1 \

-mysql-partition=1 \

-zookeeper-repository=zookeeper \

-zookeeper-tag=3.5.5 \

-zookeeper-replica=3 \

-greatdb-repository=greatdb/greatdb \

-greatdb-tag=tag202110 \

-greatdb-replica=3 \

-greatdb-serviceHost=172.16.70.249

输出信息:

代码语言:shell
AI代码解释
复制
liuxinle@liuxinle-OptiPlex-5060:~/k8s/cluster-setup$ ./cluster-setup \

\> -clustername=c0 \

\> -namespace=test \

\> -enable-monitor=true \

\> -mysql-image=mysql:5.7 \

\> -mysql-replica=3 \

\> -mysql-auth=1 \

\> -mysql-normal=1 \

\> -mysql-global=1 \

\> -mysql-partition=1 \

\> -zookeeper-repository=zookeeper \

\> -zookeeper-tag=3.5.5 \

\> -zookeeper-replica=3 \

\> -greatdb-repository=greatdb/greatdb \

\> -greatdb-tag=tag202110 \

\> -greatdb-replica=3 \

\> -greatdb-serviceHost=172.16.70.249

INFO[2021-10-14T10:41:52+08:00] SetUp the cluster ...                         NameSpace=test

INFO[2021-10-14T10:41:52+08:00] create namespace ...                         

INFO[2021-10-14T10:41:57+08:00] copy helm chart templates ...                

INFO[2021-10-14T10:41:57+08:00] setup ...                                     Component=MySQL

INFO[2021-10-14T10:41:57+08:00] exec helm install and update greatdb-cfg.yaml ... 

INFO[2021-10-14T10:42:00+08:00] waiting mysql pods running ...               

INFO[2021-10-14T10:44:27+08:00] setup ...                                     Component=Zookeeper

INFO[2021-10-14T10:44:28+08:00] waiting zookeeper pods running ...           

INFO[2021-10-14T10:46:59+08:00] update greatdb-cfg.yaml                      

INFO[2021-10-14T10:46:59+08:00] setup ...                                     Component=greatdb

INFO[2021-10-14T10:47:00+08:00] waiting greatdb pods running ...             

INFO[2021-10-14T10:47:21+08:00] waiting cluster running ...                  

INFO[2021-10-14T10:47:27+08:00] waiting prometheus server running...         

INFO[2021-10-14T10:47:27+08:00] Dump Cluster Info                            

INFO[2021-10-14T10:47:27+08:00] SetUp success.                                ClusterName=c0 NameSpace=test

执行如下命令,查看集群 pod 状态:

代码语言:shell
AI代码解释
复制
kubectl get pod -n test -o wide

输出信息:

代码语言:shell
AI代码解释
复制
NAME                                    READY   STATUS      RESTARTS   AGE     IP             NODE                     NOMINATED NODE   READINESS GATES

c0-auth0-mysql-0                        2/2     Running     0          10m     10.244.87.18   liuxinle-optiplex-5060   <none>           <none>

c0-auth0-mysql-1                        2/2     Running     0          9m23s   10.244.87.54   liuxinle-optiplex-5060   <none>           <none>

c0-auth0-mysql-2                        2/2     Running     0          8m39s   10.244.87.57   liuxinle-optiplex-5060   <none>           <none>

c0-greatdb-0                            2/2     Running     1          5m3s    10.244.87.58   liuxinle-optiplex-5060   <none>           <none>

c0-greatdb-1                            2/2     Running     0          4m57s   10.244.87.20   liuxinle-optiplex-5060   <none>           <none>

c0-greatdb-2                            2/2     Running     0          4m50s   10.244.87.47   liuxinle-optiplex-5060   <none>           <none>

c0-glob0-mysql-0                        2/2     Running     0          10m     10.244.87.51   liuxinle-optiplex-5060   <none>           <none>

c0-glob0-mysql-1                        2/2     Running     0          9m23s   10.244.87.41   liuxinle-optiplex-5060   <none>           <none>

c0-glob0-mysql-2                        2/2     Running     0          8m38s   10.244.87.60   liuxinle-optiplex-5060   <none>           <none>

c0-nor0-mysql-0                         2/2     Running     0          10m     10.244.87.29   liuxinle-optiplex-5060   <none>           <none>

c0-nor0-mysql-1                         2/2     Running     0          9m29s   10.244.87.4    liuxinle-optiplex-5060   <none>           <none>

c0-nor0-mysql-2                         2/2     Running     0          8m45s   10.244.87.25   liuxinle-optiplex-5060   <none>           <none>

c0-par0-mysql-0                         2/2     Running     0          10m     10.244.87.55   liuxinle-optiplex-5060   <none>           <none>

c0-par0-mysql-1                         2/2     Running     0          9m26s   10.244.87.13   liuxinle-optiplex-5060   <none>           <none>

c0-par0-mysql-2                         2/2     Running     0          8m42s   10.244.87.21   liuxinle-optiplex-5060   <none>           <none>

c0-prometheus-server-6697649b76-fkvh9   2/2     Running     0          4m36s   10.244.87.37   liuxinle-optiplex-5060   <none>           <none>

c0-zookeeper-0                          1/1     Running     1          7m35s   10.244.87.44   liuxinle-optiplex-5060   <none>           <none>

c0-zookeeper-1                          1/1     Running     0          6m41s   10.244.87.30   liuxinle-optiplex-5060   <none>           <none>

c0-zookeeper-2                          1/1     Running     0          6m10s   10.244.87.49   liuxinle-optiplex-5060   <none>           <none>

c0-zookeeper-initzk-7hbfs               0/1     Completed   0          7m35s   10.244.87.17   liuxinle-optiplex-5060   <none>           <none>

看到 c0-zookeeper-initzk-7hbfs 的状态是 Completed,其他 pod 的状态为 Running,表示集群搭建成功。

在 GreatDB 分布式集群中使用 Chaos Mesh 做混沌测试

Chaos Mesh 在 kubernetes 环境支持注入的故障类型包括:模拟 Pod 故障、模拟网络故障、模拟压力场景等,这里我们以模拟 Pod 故障中的 pod-kill 为例。

将实验配置写入到文件中 pod-kill.yaml,内容示例如下:

代码语言:yaml
AI代码解释
复制
apiVersion: chaos-mesh.org/v1alpha1

kind: PodChaos   *# 要注入的故障类型*

metadata:

  name: pod-failure-example

  namespace: test   *# 测试集群pod所在的namespace*

spec:

  action: pod-kill   *# 要注入的具体故障类型*

  mode: all    *# 指定实验的运行方式,all(表示选出所有符合条件的 Pod)*

  duration: '30s'    *# 指定实验的持续时间* 

  selector: 

    labelSelectors:

      "app.kubernetes.io/component": "greatdb"    *# 指定注入故障目标pod的标签,通过kubectl describe pod c0-greatdb-1 -n test 命令返回结果中Labels后的内容得到*

创建故障实验,命令如下:

代码语言:shell
AI代码解释
复制
kubectl create -n test -f pod-kill.yaml

创建完故障实验之后,执行命令 kubectl get pod -n test -o wide 结果如下:

代码语言:shell
AI代码解释
复制
NAME                                    READY   STATUS              RESTARTS   AGE     IP             NODE                     NOMINATED NODE   READINESS GATES

c0-auth0-mysql-0                        2/2     Running             0          14m     10.244.87.18   liuxinle-optiplex-5060   <none>           <none>

c0-auth0-mysql-1                        2/2     Running             0          14m     10.244.87.54   liuxinle-optiplex-5060   <none>           <none>

c0-auth0-mysql-2                        2/2     Running             0          13m     10.244.87.57   liuxinle-optiplex-5060   <none>           <none>

c0-greatdb-0                            0/2     ContainerCreating   0          2s      <none>         liuxinle-optiplex-5060   <none>           <none>

c0-greatdb-1                            0/2     ContainerCreating   0          2s      <none>         liuxinle-optiplex-5060   <none>           <none>

c0-glob0-mysql-0                        2/2     Running             0          14m     10.244.87.51   liuxinle-optiplex-5060   <none>           <none>

c0-glob0-mysql-1                        2/2     Running             0          14m     10.244.87.41   liuxinle-optiplex-5060   <none>           <none>

c0-glob0-mysql-2                        2/2     Running             0          13m     10.244.87.60   liuxinle-optiplex-5060   <none>           <none>

c0-nor0-mysql-0                         2/2     Running             0          14m     10.244.87.29   liuxinle-optiplex-5060   <none>           <none>

c0-nor0-mysql-1                         2/2     Running             0          14m     10.244.87.4    liuxinle-optiplex-5060   <none>           <none>

c0-nor0-mysql-2                         2/2     Running             0          13m     10.244.87.25   liuxinle-optiplex-5060   <none>           <none>

c0-par0-mysql-0                         2/2     Running             0          14m     10.244.87.55   liuxinle-optiplex-5060   <none>           <none>

c0-par0-mysql-1                         2/2     Running             0          14m     10.244.87.13   liuxinle-optiplex-5060   <none>           <none>

c0-par0-mysql-2                         2/2     Running             0          13m     10.244.87.21   liuxinle-optiplex-5060   <none>           <none>

c0-prometheus-server-6697649b76-fkvh9   2/2     Running             0          9m24s   10.244.87.37   liuxinle-optiplex-5060   <none>           <none>

c0-zookeeper-0                          1/1     Running             1          12m     10.244.87.44   liuxinle-optiplex-5060   <none>           <none>

c0-zookeeper-1                          1/1     Running             0          11m     10.244.87.30   liuxinle-optiplex-5060   <none>           <none>

c0-zookeeper-2                          1/1     Running             0          10m     10.244.87.49   liuxinle-optiplex-5060   <none>           <none>

c0-zookeeper-initzk-7hbfs               0/1     Completed           0          12m     10.244.87.17   liuxinle-optiplex-5060   <none>           <none>

可以看到有带 greatdb 名字的 pod 正在被重启,说明注入故障成功。

在 Argo 中编排测试流程

Argo 是一个开源的容器本地工作流引擎,用于在 Kubernetes 上完成工作,可以将多步骤工作流建模为一系列任务,完成测试流程编排。

我们使用 argo 定义一个测试任务,基本的测试流程是固定的,如下所示:

2.jpg
2.jpg

测试流程的 step1 是部署测试集群,接着开启两个并行任务,step2 跑测试用例,模拟业务场景,step3 同时使用 Chaos Mesh 注入故障,step2 的测试用例执行结束之后,step4 终止故障注入,最后 step5 清理集群环境。

用 Argo 编排一个混沌测试工作流(以 flashback 测试用例为例)

1)修改 cluster-setup.yaml 中的 image 信息,改成步骤“准备测试需要的镜像”中自己传上去的集群部署/清理镜像名和 tag

2)修改 testsuite-flashback.yaml 中的 image 信息,改成步骤“准备测试需要的镜像”中自己传上去的测试用例镜像名和 tag

3)将集群部署、测试用例和工具模板的 yaml 文件全部使用 kubectl apply -n argo -f xxx.yaml 命令创建资源 (这些文件定义了一些 argo template,方便用户写 workflow 时候使用)

代码语言:shell
AI代码解释
复制
kubectl apply -n argo -f cluster-setup.yaml

kubectl apply -n argo -f testsuite-flashback.yaml

kubectl apply -n argo -f tools-template.yaml

4)复制一份 workflow 模板文件 workflow-template.yaml,将模板文件中注释提示的部分修改为自己的设置即可,然后执行以下命令创建混沌测试工作流:

代码语言:shell
AI代码解释
复制
kubectl apply -n argo -f workflow-template.yaml

以下是一份 workflow 模板文件:

代码语言:yaml
AI代码解释
复制
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: chaostest-c0-0-
  name: chaostest-c0-0
  namespace: argo
spec:
  entrypoint: test-entry #测试入口,在这里传入测试参数,填写clustername、namespace、host、greatdb镜像名和tag名等基本信息
  serviceAccountName: argo
  arguments:
    parameters:
      - name: clustername
        value: c0
      - name: namespace
        value: test
      - name: host
        value: 172.16.70.249
      - name: port
        value: 30901
      - name: password
        value: Bgview@2020
      - name: user
        value: root
      - name: run-time
        value: 10m
      - name: greatdb-repository
        value: greatdb/greatdb
      - name: greatdb-tag
        value: tag202110
      - name: nemesis
        value: kill_mysql_normal_master,kill_mysql_normal_slave,kill_mysql_partition_master,kill_mysql_partition_slave,kill_mysql_auth_master,kill_mysql_auth_slave,kill_mysql_global_master,kill_mysql_global_slave,kill_mysql_master,kill_mysql_slave,net_partition_mysql_normal,net_partition_mysql_partition,net_partition_mysql_auth,net_partition_mysql_global
      - name: mysql-partition
        value: 1
      - name: mysql-global
        value: 1
      - name: mysql-auth
        value: 1
      - name: mysql-normal
        value: 2
  templates:
    - name: test-entry
      steps:
        - - name: setup-greatdb-cluster  # step.1 集群部署. 请指定正确的参数,主要是mysql和zookeeper的镜像名、tag名
            templateRef:
              name: cluster-setup-template
              template: cluster-setup
            arguments:
              parameters:
                - name: namespace
                  value: "{{workflow.parameters.namespace}}"
                - name: clustername
                  value: "{{workflow.parameters.clustername}}"
                - name: mysql-image
                  value: mysql:5.7.34
                - name: mysql-replica
                  value: 3
                - name: mysql-auth
                  value: "{{workflow.parameters.mysql-auth}}"
                - name: mysql-normal
                  value: "{{workflow.parameters.mysql-normal}}"
                - name: mysql-partition
                  value: "{{workflow.parameters.mysql-partition}}"
                - name: mysql-global
                  value: "{{workflow.parameters.mysql-global}}"
                - name: enable-monitor
                  value: false
                - name: zookeeper-repository
                  value: zookeeper
                - name: zookeeper-tag
                  value: 3.5.5
                - name: zookeeper-replica
                  value: 3
                - name: greatdb-repository
                  value: "{{workflow.parameters.greatdb-repository}}"
                - name: greatdb-tag
                  value: "{{workflow.parameters.greatdb-tag}}"
                - name: greatdb-replica
                  value: 3
                - name: greatdb-serviceHost
                  value: "{{workflow.parameters.host}}"
                - name: greatdb-servicePort
                  value: "{{workflow.parameters.port}}"
        - - name: run-flashbacktest    # step.2 运行测试用例,请替换为你要运行的测试用例template并指定正确的参数,主要是测试使用的表个数和大小
            templateRef:
              name: flashback-test-template
              template: flashback
            arguments:
              parameters:
                - name: user
                  value: "{{workflow.parameters.user}}"
                - name: password
                  value: "{{workflow.parameters.password}}"
                - name: host
                  value: "{{workflow.parameters.host}}"
                - name: port
                  value: "{{workflow.parameters.port}}"
                - name: concurrency
                  value: 16
                - name: size
                  value: 10000
                - name: tables
                  value: 10
                - name: run-time
                  value: "{{workflow.parameters.run-time}}"
                - name: single-statement
                  value: true
                - name: manage-statement
                  value: true
          - name: invoke-chaos-for-flashabck-test    # step.3 注入故障,请指定正确的参数,这里run-time和interval分别定义了故障注入的时间和频次,因此省略掉了终止故障注入步骤
            templateRef:
              name: chaos-rto-template
              template: chaos-rto
            arguments:
              parameters:
                - name: user
                  value: "{{workflow.parameters.user}}"
                - name: host
                  value: "{{workflow.parameters.host}}"
                - name: password
                  value: "{{workflow.parameters.password}}"
                - name: port
                  value: "{{workflow.parameters.port}}"
                - name: k8s-config
                  value: /root/.kube/config
                - name: namespace
                  value: "{{workflow.parameters.namespace}}"
                - name: clustername
                  value: "{{workflow.parameters.clustername}}"
                - name: prometheus
                  value: ''
                - name: greatdb-job
                  value: greatdb-monitor-greatdb
                - name: nemesis
                  value: "{{workflow.parameters.nemesis}}"
                - name: nemesis-duration
                  value: 1m
                - name: nemesis-mode
                  value: default
                - name: wait-time
                  value: 5m
                - name: check-time
                  value: 5m
                - name: nemesis-scope
                  value: 1
                - name: nemesis-log
                  value: true
                - name: enable-monitor
                  value: false
                - name: run-time
                  value: "{{workflow.parameters.run-time}}"
                - name: interval
                  value: 1m
                - name: monitor-log
                  value: false
                - name: enable-rto
                  value: false
                - name: rto-qps
                  value: 0.1
                - name: rto-warm
                  value: 5m
                - name: rto-time
                  value: 1m
                - name: log-level
                  value: debug
        - - name: flashbacktest-output         # 输出测试用例是否通过的结果
            templateRef:
              name: tools-template
              template: output-result
            arguments:
              parameters:
                - name: info
                  value: "flashback test pass, with nemesis: {{workflow.parameters.nemesis}}"
        - - name: clean-greatdb-cluster           # step.4 清理测试集群,这里的参数和step.1的参数一致
            templateRef:
              name: cluster-setup-template
              template: cluster-setup
            arguments:
              parameters:
                - name: namespace
                  value: "{{workflow.parameters.namespace}}"
                - name: clustername
                  value: "{{workflow.parameters.clustername}}"
                - name: mysql-image
                  value: mysql:5.7
                - name: mysql-replica
                  value: 3
                - name: mysql-auth
                  value: "{{workflow.parameters.mysql-auth}}"
                - name: mysql-normal
                  value: "{{workflow.parameters.mysql-normal}}"
                - name: mysql-partition
                  value: "{{workflow.parameters.mysql-partition}}"
                - name: mysql-global
                  value: "{{workflow.parameters.mysql-global}}"
                - name: enable-monitor
                  value: false
                - name: zookeeper-repository
                  value: zookeeper
                - name: zookeeper-tag
                  value: 3.5.5
                - name: zookeeper-replica
                  value: 3
                - name: greatdb-repository
                  value: "{{workflow.parameters.greatdb-repository}}"
                - name: greatdb-tag
                  value: "{{workflow.parameters.greatdb-tag}}"
                - name: greatdb-replica
                  value: 3
                - name: greatdb-serviceHost
                  value: "{{workflow.parameters.host}}"
                - name: greatdb-servicePort
                  value: "{{workflow.parameters.port}}"
                - name: clean
                  value: true
        - - name: echo-result
            templateRef:
              name: tools-template
              template: echo
            arguments:
              parameters:
                - name: info
                  value: "{{item}}"
            withItems:
              - "{{steps.flashbacktest-output.outputs.parameters.result}}"

至此,你已经成功使用 Chaos Mesh 进行了一次混沌测试,并成功验证了分布式系统的稳定性。

Now enjoy GreatSQL, and enjoy Chaos Mesh :)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于 Chaos Mesh® 和 Argo 打造分布式测试平台
不久前我们开源了基于 Kubernetes 的混沌测试工具 Chaos Mesh®,Chaos Mesh 提供了模拟系统异常状况的能力,但这只是混沌工程中的一环,完整混沌工程核心原则包含了系统稳定状态的定义、提出假设、运行实验以及验证和改进。
PingCAP
2020/06/30
1K0
Chaos Mesh® X GitHub Actions —— 把混沌工程集成到你的 CI 中
本文将介绍如何在 GitHub Actions 的 workflow 中使用 Chaos Mesh,从而将混沌工程集成到系统开发的 CI 中。
PingCAP
2020/08/21
6530
Chaos Mesh® X GitHub Actions —— 把混沌工程集成到你的 CI 中
腾讯云TKE-混沌测试 部署chaos-mesh (一)
在现实生活中, 汽车领域有一套安全, 性能测试平台和机构,在云原生领域PiingCAP公司在2019年12月31日开源了一个云原生的混沌测试平台Chaos Mesh,Chaos Mesh 提供在 Kubernetes 平台上进行混沌测试的能力.在我们排查问题的过程中经常需要模拟各种场景,例如,podkil,网络延迟,丢包, cpu,内存压测,有了这个工具就可以非常方便的模拟各种场景 本篇文章主要给大家介绍下原理,在TKE中如何部署,以及简单的使用。目前支持以下类型的测试:
朱瑞卿
2020/11/05
2.2K0
腾讯云TKE-混沌测试 部署chaos-mesh (一)
Chaos Mesh 入门教程
混沌工程是在分布式系统上进行实验的学科,目的是建立对系统抵御生产环境中失控条件的能力以及信心。
我是阳明
2020/11/03
4.6K1
Chaos Mesh 入门教程
深度解读 Chaos Mesh®,探索云原生混沌工程的奥秘
本文首先介绍了对混沌工程这一概念的描述,分享了混沌工程的动机和实践方式以及 Chaos Mesh 项目的发展情况。在后半部分,介绍了 Chaos Mesh 项目本身的架构,并涉及到在 Go 的生态环境中对容器等基本概念进行操作。干货十足,enjoy~本文首先介绍了对混沌工程这一概念的描述,分享了混沌工程的动机和实践方式以及 Chaos Mesh 项目的发展情况。在后半部分,介绍了 Chaos Mesh 项目本身的架构,并涉及到在 Go 的生态环境中对容器等基本概念进行操作。干货十足,enjoy~
PingCAP
2021/04/19
1.1K0
【混沌工程】Chaos Mesh:Kubernetes 的混沌工程平台
Chaos Mesh 是云原生计算基金会 (CNCF) 托管的项目。它是一个云原生混沌工程平台,可在 Kubernetes 环境中编排混沌。在当前阶段,它具有以下组件:
架构师研究会
2022/09/28
1.7K0
【混沌工程】Chaos Mesh:Kubernetes 的混沌工程平台
2020,Chaos Mesh® 开源第一年:扬帆起航的一年
Chaos Mesh 开源刚刚一周年,这一年来,Chaos Mesh 产品不断迭代成长,从单一的故障注入工具到现在以构建完整混沌工程生态为目标持续前进。Chaos Mesh 社区从无到有,不断为 Chaos Mesh 带来新的力量,并成功帮助 Chaos Mesh 加入 CNCF 成为沙箱托管项目。
PingCAP
2021/01/20
9280
2020,Chaos Mesh® 开源第一年:扬帆起航的一年
混沌工程工具:chaos-mesh在服务器上注入项原理分析(2)
上篇文章,总体上分析了chaosmesh和chaosblade两个工具的对比和原理,本文继续分析chaosmesh的原理;几个常用的项dnsChaos、stressChaos、NetworkChaos和IOChaos注入项的原理。
AIOPS
2023/10/02
1.3K0
混沌工具之ChaosMesh编译安装
在k8s里面安装ChaosMesh比较简单,请参考《混沌工程之ChaosMesh使用之一模拟CPU使用率》。
高楼Zee
2021/07/14
7130
Manage ONAP Microservices with Istio Service Mesh
In the previous post How service mesh can help during the ONAP Microservice journey, we have discussed why the community wants ONAP to evolve towards Microservice architecture and how service mesh approach could help during the journey. Now it’s time to dip our toe in the water, let’s try out Istio with ONAP by following the below steps.
赵化冰
2022/08/01
2920
Manage ONAP Microservices with Istio Service Mesh
全链路分布式跟踪系统 Apache SkyWalking 入门教程
确保有一套运行正常的 Kubernetes 集群,本文默认为使用 Elasticsearch7 作为后端存储;如果想把 ES 放到 Kubernetes 集群里那么还得确保集群配置了正确的存储,譬如默认的 StorageClass 可用等。本文为了方便起见(其实就是穷)采用外部 ES 存储且使用 docker-compose 单节点部署,所以不需要集群的分布式存储;最后确保你本地的 kubectl 能够正常运行。
iMike
2021/04/16
1.7K0
使用 Argo Workflow 组织跨云运维的可能性
在微服务、容器化和 IaC 等概念普及之前,自动化通常是使用过程性操作进行的,例如摘流——升级——恢复的过程。为了运维方便,通常这些操作序列会由所谓的运维流程编排工具完成,例如 AWS 的 SSM Automation,或者阿里云的 OOS 等。随着运维自动化的要求逐步提高,这些工具的编排能力也逐步扩展,出现了插件扩展、循环、跳转等更复杂的行为,甚至还出现了人工审批等蜜汁操作。自动化的编排复杂度也不断延伸——AWS 公开的作业脚本中已经出现了超过 3000 行 50 个步骤的庞然大物。
崔秀龙
2024/05/06
7420
使用 Argo Workflow 组织跨云运维的可能性
6.2K star!推荐一款开源混沌工程测试平台:Chaos Mesh
Chaos Mesh是一个开源的混沌工程平台,旨在帮助用户在生产环境中测试、验证和优化其应用程序的可靠性和稳定性。通过引入故障注入和混沌工程原则,Chaos Mesh可以模拟各种故障场景,如网络延迟、节点故障、磁盘故障等,以帮助用户发现和解决系统中的潜在问题。
测试开发技术
2024/08/27
5290
6.2K star!推荐一款开源混沌工程测试平台:Chaos Mesh
在 Kubernetes 实施混沌工程 —— Chaos Mesh 原理分析与控制面开发
作者:黄涵(Mayo Cream)[1],CNCF TAG Security 成员,云原生社区贡献者。
CNCF
2021/11/01
1.4K0
混沌测试平台 Chaos Mesh
Chaos Mesh 是PingCap团队研发的一款用于测试kubernetes环境的工具。通过人为地在集群中注入故障来检测集群对故障的处理以及恢复能力。更详细信息可以查看这篇文章。混沌测试与针对某个应用测试的区别为:前者更倾向于在现有大规模集群中进行测试,影响因素可能来自集群中的方方面面;而后者更专注于对应用本身功能的测试。
charlieroro
2020/07/30
2.9K0
混沌测试平台 Chaos Mesh
使用 EFKLK 搭建 Kubernetes 日志收集工具栈
前面大家介绍了 Kubernetes 集群中的几种日志收集方案,Kubernetes 中比较流行的日志收集解决方案是 Elasticsearch、Fluentd 和 Kibana(EFK)技术栈,也是官方现在比较推荐的一种方案。
CNCF
2021/05/07
2.2K0
使用 EFKLK 搭建 Kubernetes 日志收集工具栈
Database Mesh: 使用 Aeraki 对 Redis 进行流量管理
Redis 是一种高性能的键值数据库,支持丰富的数据结构和操作,包括字符串、哈希、列表、集合、有序集合等。由于其强大的能力,Redis 被广泛应用于缓存、会话存储、消息代理等场景中。Aeraki Mesh 提供了对 Redis 的流量管理能力,可以实现客户端无感知的 Redis Cluster 数据分片,支持按 key 将客户端请求路由到不同的 Redis 服务,并提供了读写分离,流量镜像,故障注入等功能。本文将使用 Aeraki Mesh 自带的 Demo 来演示如何使用 Aeraki Mesh 来对 Redis 进行流量管理。
赵化冰
2023/05/11
4000
Database Mesh: 使用 Aeraki 对 Redis 进行流量管理
在 Kubernetes 实施混沌工程—— Chaos Mesh® 原理分析与控制面开发
Chaos Mesh® 是由 TiDB 背后的 PingCAP 公司开发,运行在 Kubernetes 上的混沌工程(Chaos Engineering)系统。简而言之,Chaos Mesh® 通过运行在 K8s 集群中的“特权”容器,依据 CRD 资源中的测试场景,在集群中制造浑沌(模拟故障)1。
PingCAP
2021/10/27
1.5K0
Milvus 实战 | 基于 Kubernetes 的分布式集群部署方案
Milvus 作为一款针对海量特征向量的相似度搜索引擎,在单台服务器上就可以处理十亿级数据规模。而对于百亿或者千亿级数据,则需要具有水平扩展能力的 Milvus 集群来满足对海量向量数据的高性能检索需求。
Zilliz RDS
2020/08/04
4.9K0
Milvus 实战 | 基于 Kubernetes 的分布式集群部署方案
云原生 Kubernetes 分布式存储平台 Longhorn 初体验
前面我们学习了本地存储、NFS共享存储,除了这些存储类型之外,还有一个块存储,同样为 Kubernetes 提供块存储的方案有很多,比如 Ceph RBD,今天我们为大家介绍的是 Rancher 开源的一款 Kubernetes 的云原生分布式块存储方案 - Longhorn,Longhorn 是一个轻量级且功能强大的云原生 Kubernetes 分布式存储平台,可以在任意基础设施上运行,Longhorn 还可以与 Rancher 结合使用,将帮助你在 Kubernetes 环境中轻松、快速和可靠地部署高可用性持久化块存储。
我是阳明
2022/04/06
1.8K0
云原生 Kubernetes 分布式存储平台 Longhorn 初体验
推荐阅读
相关推荐
基于 Chaos Mesh® 和 Argo 打造分布式测试平台
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档