本文档介绍了如何通过生成优化的应用级和节点级配置,提高 Google Kubernetes Engine (GKE) 上 MySQL 工作负载的性能。如需了解详情,请参阅针对 GKE 上的工作负载进行优化。
MySQL 的优化是针对以下情况确定的:MySQL 8 实例用作单节点联机事务处理数据库(“读/写 OLTP”),使用 SSL,性能使用 Sysbench 1.1.0 进行衡量。请考虑您的集群上 MySQL 工作负载的使用情况与此使用情形的对比。如果您的使用情形有所不同,则可能需要根据您的具体情况调整推荐的优化措施。
准备工作
在开始之前,请确保您已执行以下任务:
- 启用 GKE Recommender API 和 Google Kubernetes Engine API。 启用 API
- 如果您要使用 Google Cloud CLI 执行此任务,请安装并初始化 gcloud CLI。如果您之前安装了 gcloud CLI,请通过运行
gcloud components update命令来获取最新版本。较早版本的 gcloud CLI 可能不支持运行本文档中的命令。
要求
使用 GKE 1.31.1-gke.12000 版或更高版本。
针对 MySQL 工作负载进行了优化
我们建议为 MySQL 工作负载使用专用节点池。默认情况下,完成以下步骤后,系统会创建新的节点池。
如需优化 MySQL 工作负载的性能,请执行以下操作:
创建针对 MySQL 工作负载进行了优化的清单:
运行以下命令,生成包含推荐优化的清单:
gcloud container workload profiles manifests create \ --workload=mysql-8-oltp --cluster-version=CLUSTER_VERSION --options=machineType=MACHINE_TYPE \ --output-path=/tmp/manifests.yaml替换以下内容:
CLUSTER_VERSION:GKE 版本。 建议使用 GKE 1.31.1-gke.12000 版或更高版本。MACHINE_TYPE:所需的机器类型。
--output-path=/tmp/manifests.yaml标志是可选的。如果未指定,则清单会打印到终端,但不会保存到文件中。此命令会生成一个包含两个 Kubernetes 资源的 YAML 文件:
- 指定名为
default-auth.cnf的 MySQL 配置的 ConfigMap。 - ComputeClass 对象。 此属性用于指定 MySQL 要在哪些机器上运行,是可选属性。 如需详细了解如何指定机器类型,请参阅自定义 ComputeClass 简介
查看建议并修改清单,使其包含您偏好的优化。如需评估建议,您可以执行以下操作:
- 查看 MySQL 文档,评估适合您具体情况的推荐配置。
- 请考虑您的集群上 MySQL 工作负载的使用方式与以下使用情形的对比。如果您的使用情形有所不同,则可能需要根据您的具体情况调整建议的优化措施。
MySQL 的优化是针对以下情况确定的:MySQL 8 实例用作单节点联机事务处理数据库(“读/写 OLTP”),使用 SSL,性能使用 Sysbench 1.1.0 进行衡量。
如果您想修改配置或向配置中添加内容,请修改清单文件。
使用以下命令将清单应用于集群:
kubectl create -f /tmp/manifests.yaml
部署引用优化的 Pod。例如:
apiVersion: v1 kind: Pod metadata: name: mysql spec: containers: - name: mysql image: mysql:8 volumeMounts: - name: gke-optimized-workload-config subPath: default-auth.cnf mountPath: /etc/mysql/conf.d/gke-optimized.cnf readOnly: true volumes: - name: gke-optimized-workload-config configMap: name: mysql-config nodeSelector: cloud.google.com/compute-class: optimized-gke-mysql-8-oltp-abc123修改 ComputeClass 名称,使其与生成的名称一致。然后,将您的 Pod 清单应用到集群:
kubectl apply -f pod.yaml确认 MySQL 是否正在使用优化后的配置。为此,您可以运行以下命令,确保 MySQL 使用的是优化后的配置:
kubectl exec mysql -- mysql -e "SELECT DISTINCT VARIABLE_PATH FROM performance_schema.variables_info WHERE VARIABLE_PATH != '';"您应该会看到类似于如下内容的输出:
VARIABLE_PATH /etc/mysql/conf.d/gke-optimized.cnf /etc/my.cnf您还可以使用
mysql命令查询在优化配置中设置的各个指令,例如max_connections。
部署工作负载时,集群会创建一个符合优化配置的新节点池,并将您的 Pod 分配给这些节点池。
现有 Pod 不会发生变化。只有引用优化配置的 Pod 才会得到优化。如果您之前已在集群中部署 MySQL 工作负载,则需要重新部署这些工作负载,以便使用优化后的配置运行它们。
后续步骤
- 详细了解 GKE 上的工作负载优化。
- 详细了解如何在 GKE 上部署有状态 MySQL 集群。
- 详细了解 GKE ComputeClass。
- 如需针对 Redis 工作负载进行优化,请参阅在 GKE 上优化 Redis 工作负载性能。