From 1d19820464cc88eaf197b47239abd49858a1ccfe Mon Sep 17 00:00:00 2001 From: "wang.luo" Date: Mon, 25 Mar 2024 15:13:47 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E7=AB=A0?= =?UTF-8?q?=EF=BC=9A=E7=94=A8zStorage=E6=90=AD=E5=BB=BA=E6=8C=81=E4=B9=85?= =?UTF-8?q?=E5=8C=96MySQL=E5=BE=AE=E6=9C=8D=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../install_mysql_on_cce_with_zstorage.md | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/luowang/csi_mysql_install/install_mysql_on_cce_with_zstorage.md b/luowang/csi_mysql_install/install_mysql_on_cce_with_zstorage.md index e9bbd74..c19fafc 100644 --- a/luowang/csi_mysql_install/install_mysql_on_cce_with_zstorage.md +++ b/luowang/csi_mysql_install/install_mysql_on_cce_with_zstorage.md @@ -3,22 +3,22 @@ #### 简介 -云原生场景下中的业务的生命周期是不稳定的, 传统模式下当pod被删除时数据也会随之删除, 在实际的生产环境中, 数据是十分重要, 不能随意删除. -为了解决这个问题, 需要在k8s中做数据持久化, 数据持久化就是将数据保存到持久化的存储介质上, 以便pod重启或者迁移到其它节点时, 将存储介质同时转移. -本文将介绍在云原生场景下, 使用zStorage向MySQL微服务提供持久化能力. +云原生场景下中的业务的生命周期是不稳定的,传统模式下当pod被删除时数据也会随之删除,在实际的生产环境中,数据是十分重要,不能随意删除。 +为了解决这个问题,需要在k8s中做数据持久化,数据持久化就是将数据保存到持久化的存储介质上,以便pod重启或者迁移到其它节点时,将存储介质同时转移。 +本文将介绍在云原生场景下,使用zStorage向MySQL微服务提供持久化能力。 #### 准备环境 ##### zStorage 存储服务 -本文使用三台云主机搭建了zStorage服务, zStorage同样支持在虚拟机、物理机等设备上进行部署. +本文使用三台云主机搭建了zStorage服务,zStorage同样支持在虚拟机、物理机等设备上进行部署。

##### K8S环境: -本文将在华为cce集群上进行演示, 在其它类型的k8s集群上操作类似, 版本1.20以上支持才支持存储类(StorageClass). +本文将在华为cce集群上进行演示,在其它类型的k8s集群上操作类似,版本1.20以上支持才支持存储类(StorageClass)。

-#### 1、在k8s集群中部署zStorage csi组件, 创建存储类(StorageClass). +#### 1、在k8s集群中部署zStorage csi(容器存储接口)组件,创建存储类(StorageClass)。 ##### 1.1 创建命名空间. kubectl apply -f ns.yaml @@ -44,7 +44,7 @@ kubectl apply -f zstorage-csi-node.yaml kubectl apply -f secret.yaml

-##### 1.7 创建存储类(StorageClass) +##### 1.7 创建存储类(StorageClass) kubectl apply -f storageclass-iscsi.yaml

@@ -52,13 +52,13 @@ kubectl apply -f storageclass-iscsi.yaml

-#### 2 使用存储卷声明(pvc)创建mysql微服务 +#### 2 使用存储卷声明(PVC)创建mysql微服务 -##### 2.1 创建存储卷声明(pvc) +##### 2.1 创建存储卷声明(PVC) kubectl apply -f pvc.yaml

-##### 2.2 创建mysql pod +##### 2.2 创建 mysql pod kubectl apply -f mysql-pod.yaml

@@ -73,29 +73,29 @@ kubectl apply -f mysql-svc.yaml #### 3.1 访问mysql并创建一个数据库

-##### 3.2 模拟故障, 重启pod +##### 3.2 模拟故障,重启pod

-##### 3.3 等待服务自动恢复后, 再次访问查看数据库数据未丢失 +##### 3.3 等待服务自动恢复后,再次访问查看数据库数据未丢失

-#### 4 使用 sysbench 测试 mysql TPCC(事务处理性能) +#### 4 使用 sysbench 测试 mysql TPCC(事务处理性能) ##### 4.1 使用工具和脚本 -使用 sysbench 工具进行测试, 测试脚本如下图所示, 从上往下依次是: 测试数据准备脚本、128线程测脚本、16线程测脚本、32线程测脚本、64线程测脚本. +使用 sysbench 工具进行测试,测试脚本如下图所示,从上往下依次是:测试数据准备脚本、128线程测脚本、16线程测脚本、32线程测脚本、64线程测脚本。

-##### 4.2 测试数据,部分截图 -由于文章篇幅所限, 这里仅展示了32线程的测试脚本和测试过程, 其他线程测试过程不做具体展示, 将结果直接录入表格. +##### 4.2 测试数据,部分截图 +由于文章篇幅所限,这里仅展示了32线程的测试脚本和测试过程,其他线程测试过程不做具体展示,将结果直接录入表格。

-#### 5 和cce上典型的存储类 nfs-rw(标准文件协议类型文件存储卷)进行数据对比 -在完全相同的测试环境、测试步骤下, 使用nfs-rw类型的存储卷进行测试, 将测试数据和zStorage测试结果进行对比, 如下图所示. +#### 5 和cce上典型的存储类 nfs-rw(标准文件协议类型文件存储卷)进行数据对比 +在完全相同的测试环境、测试步骤下,使用nfs-rw类型的存储卷进行测试,将测试数据和zStorage测试结果进行对比,如下图所示。

-在正常情况下, 随着线程数的增加, TPS和QPS都会增加, 直到达到性能瓶颈后下降. -在本次测中, 两者都在32线程时达到峰值, 性能开始下降. 这是由于测试环境是云原生场景, 所有的测试流量和业务流量都会经过k8s网络的转发, -而cce是公有云环境只有一个管理网络, 网络成为了性能瓶颈, 从时延数随着线程数同步增长就可以印证这一点. +在正常情况下,随着线程数的增加,TPS和QPS都会增加,直到达到性能瓶颈后下降。 +在本次测试中,两者都在32线程时达到峰值,性能开始下降。这是由于测试环境是云原生场景,所有的测试流量和业务流量都会经过k8s网络的转发, +而cce是公有云环境只有一个管理网络,网络成为了性能瓶颈,从时延数随着线程数同步增长就可以印证这一点。 #### 结语 -目前在云原生场景下, 大部分微服务架构的业务都具有高可用的特性, 但是需要paas分离才能具有持久化能力, 也就是需要存储服务向集群提供持久卷. -后续将会推出更多zStorage在云原生场景下的应用和测试对比, 请关注后续的更新. +目前在云原生场景下,大部分微服务架构的业务都具有高可用的特性,加上使用数据卷来实现持久化,也就是需要存储服务通过CSI(容器存储接口)向集群提供持久卷。 +后续将会推出更多zStorage在云原生场景下的应用和测试对比,请关注后续的更新。 -- Gitee From f3d7b62f0e5ebd0c2cb1b443b642ecdd41369fd0 Mon Sep 17 00:00:00 2001 From: "wang.luo" Date: Mon, 25 Mar 2024 16:11:58 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E7=AB=A0?= =?UTF-8?q?=EF=BC=9A=E7=94=A8zStorage=E6=90=AD=E5=BB=BA=E6=8C=81=E4=B9=85?= =?UTF-8?q?=E5=8C=96MySQL=E5=BE=AE=E6=9C=8D=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../install_mysql_on_cce_with_zstorage.md | 73 ++++++++++--------- 1 file changed, 38 insertions(+), 35 deletions(-) diff --git a/luowang/csi_mysql_install/install_mysql_on_cce_with_zstorage.md b/luowang/csi_mysql_install/install_mysql_on_cce_with_zstorage.md index 4fcf20a..230ce8f 100644 --- a/luowang/csi_mysql_install/install_mysql_on_cce_with_zstorage.md +++ b/luowang/csi_mysql_install/install_mysql_on_cce_with_zstorage.md @@ -3,27 +3,27 @@ ## 1. 简介 -云原生场景下中的业务的生命周期是不稳定的, 对于Kubernetes无状态部署,POD被删除时 -数据也会随之删除。但在实际生产环境中, 多数情况下数据是十分重要, 不能随意删除。 -为了解决这个问题, 需要在Kubernetes中做数据持久化, 也就是将数据保存到持久化的存储 -介质上, 以便pod重启或者迁移到其它节点时, 将存储介质同时转移。 +云原生场景下中的业务的生命周期是不稳定的,对于Kubernetes无状态部署,POD被删除时 +数据也会随之删除。但在实际生产环境中,多数情况下数据是十分重要,不能随意删除。 +为了解决这个问题,需要在Kubernetes中做数据持久化,也就是将数据保存到持久化的存储 +介质上,以便pod重启或者迁移到其它节点时,将存储介质同时转移。 -本文将介绍在云原生场景下, 使用zStorage向MySQL微服务提供持久化能力。 +本文将介绍在云原生场景下,使用zStorage向MySQL微服务提供持久化能力。 ## 2. 准备环境 #### 2.1. zStorage 存储服务 -本文使用三台云主机搭建了zStorage服务, zStorage同样支持在虚拟机、物理机等设备上进行部署. +本文使用三台云主机搭建了zStorage服务,zStorage同样支持在虚拟机、物理机等设备上进行部署。

-#### 2.2. K8S环境: -本文将在华为cce集群上进行演示, 在其它类型的k8s集群上操作类似, 版本1.20以上支持才支持存储类(StorageClass). +#### 2.2. K8S环境 +本文将在华为CCE集群上进行演示,在其它类型的k8s集群上操作类似,版本1.20以上支持存储类(StorageClass)。

-## 3、在k8s集群中部署zStorage csi组件, 创建存储类(StorageClass). +## 3、在k8s集群中部署zStorage csi组件,创建存储类(StorageClass) -#### 3.1. 创建命名空间. +#### 3.1. 创建命名空间 kubectl apply -f ns.yaml

@@ -32,14 +32,14 @@ kubectl apply -f ns.yaml kubectl apply -f rbac.yaml

-#### 3.3. 配置zStorage证书以及zStorage manager服务地址 +#### 3.3. 配置 zStorage 证书以及 zStorage manager服务地址

-#### 3.4. 部署csi-controller-plugin +#### 3.4. 部署 csi controller plugin kubectl apply -f zstorage-csi-controller.yaml

-#### 3.5. 部署csi node plugin +#### 3.5. 部署 csi node plugin kubectl apply -f zstorage-csi-node.yaml

@@ -47,7 +47,7 @@ kubectl apply -f zstorage-csi-node.yaml kubectl apply -f secret.yaml

-#### 3.7. 创建存储类(StorageClass) +#### 3.7. 创建存储类(StorageClass) kubectl apply -f storageclass-iscsi.yaml

@@ -55,13 +55,13 @@ kubectl apply -f storageclass-iscsi.yaml

-## 4. 使用存储卷声明(pvc)创建mysql微服务 +## 4. 使用存储卷声明(PVC)创建 mysql 微服务 -#### 4.1. 创建存储卷声明(pvc) +#### 4.1. 创建存储卷声明(PVC) kubectl apply -f pvc.yaml

-#### 4.2. 创建mysql pod +#### 4.2. 创建 mysql pod kubectl apply -f mysql-pod.yaml

@@ -73,36 +73,39 @@ kubectl apply -f mysql-svc.yaml

## 5 测试 mysql 持久化能力 -#### 5.1. 访问mysql并创建一个数据库 +#### 5.1. 访问 mysql 并创建一个数据库

-#### 5.2. 模拟故障, 重启pod +#### 5.2. 模拟故障,重启 pod

-#### 5.3. 等待服务自动恢复后, 再次访问查看数据库数据未丢失 +#### 5.3. 等待服务自动恢复后,再次访问查看数据库数据未丢失

-## 6. 使用 sysbench 测试 mysql TPCC(事务处理性能) +## 6. 使用 sysbench 测试 mysql TPCC(事务处理性能) #### 6.1. 使用工具和脚本 -使用 sysbench 工具进行测试, 测试脚本如下图所示, 从上往下依次是: 测试数据准备脚本、128线程测脚本、16线程测脚本、32线程测脚本、64线程测脚本。 +使用 sysbench 工具进行测试,测试脚本如下图所示,从上往下依次是:测试数据准备脚本、128线程测脚本、16线程测脚本、32线程测脚本、64线程测脚本。

-#### 6.2. 测试数据,部分截图 -由于文章篇幅所限, 这里仅展示了32线程的测试脚本和测试过程, 其他线程测试过程不做具体展示, 将结果直接录入表格。 +#### 6.2. 测试数据,部分截图 +由于文章篇幅所限,这里仅展示了32线程的测试脚本和测试过程,其他线程测试过程不做具体展示,将结果直接录入表格。

-#### 7. 和cce上典型的存储类 nfs-rw(标准文件协议类型文件存储卷)进行数据对比 -在完全相同的测试环境、测试步骤下, 使用nfs-rw类型的存储卷进行测试, 将测试数据和zStorage测试结果进行对比, 如下图所示。 +#### 7. 与 CCE 上典型的存储类 nfs-rw(标准文件协议类型文件存储卷)进行对比测试 +在完全相同的测试环境、测试步骤下,使用 nfs-rw 类型的存储卷进行测试,将测试数据和 zStorage 测试结果进行对比,如下图所示。

-在正常情况下, 随着线程数的增加, TPS和QPS都会增加, 直到达到性能瓶颈后下降。 -在本次测中, 两者都在32线程时达到峰值, 性能开始下降. 这是由于测试环境是公有云, 所有的测试流量和业务流量都会经过Kubernetes网络的转发, -而华为云CCE是公有云环境只有一个管理网络, 网络成为了性能瓶颈, 从时延数随着线程数同步增长就可以印证这一点。 在正常情况下,随着线程数的增加,TPS和QPS都会增加,直到达到性能瓶颈后下降。 -在本次测试中,两者都在32线程时达到峰值,性能开始下降。这是由于测试环境是云原生场景,所有的测试流量和业务流量都会经过k8s网络的转发, -而cce是公有云环境只有一个管理网络,网络成为了性能瓶颈,从时延数随着线程数同步增长就可以印证这一点。 - -## 8.结语 -目前在云原生场景下,大部分微服务架构的业务都具有高可用的特性,加上使用数据卷来实现持久化,也就是需要存储服务通过CSI(容器存储接口)向集群提供持久卷。 -后续将会推出更多zStorage在云原生场景下的应用和测试对比,请关注后续的更新。 +在本次测试中,两者都在32线程时达到峰值,性能开始下降。 +这是由于测试环境是公有云,所有的测试流量和业务流量都会经过 Kubernetes 网络的转发, +而华为云CCE是公有云环境只有一个管理网络,网络成为了性能瓶颈,从时延数随着线程数同步增长就可以印证这一点。 +在正常情况下,随着线程数的增加,TPS和QPS都会增加,直到达到性能瓶颈后下降。 +在本次测试中,两者都在32线程时达到峰值,性能开始下降。 +这是由于测试环境是云原生场景,所有的测试流量和业务流量都会经过k8s网络的转发, +而CCE是公有云环境只有一个管理网络,网络成为了性能瓶颈,从时延数随着线程数同步增长就可以印证这一点。 + +## 8. 结语 +目前在云原生场景下,大部分微服务架构的业务都具有高可用的特性,加上使用数据卷来实现持久化, +也就是需要存储服务通过 CSI(容器存储接口)向集群提供持久卷。 +后续将会推出更多 zStorage 在云原生场景下的应用和测试对比,请关注后续的更新。 -- Gitee