优化 GKE 上的 MySQL 工作负载性能

本文档介绍了如何通过生成优化的应用级和节点级配置,提高 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 工作负载的性能,请执行以下操作:

  1. 创建针对 MySQL 工作负载进行了优化的清单:

    1. 运行以下命令,生成包含推荐优化的清单:

      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 简介
    2. 查看建议并修改清单,使其包含您偏好的优化。如需评估建议,您可以执行以下操作:

      • 查看 MySQL 文档,评估适合您具体情况的推荐配置。
      • 请考虑您的集群上 MySQL 工作负载的使用方式与以下使用情形的对比。如果您的使用情形有所不同,则可能需要根据您的具体情况调整建议的优化措施。

      MySQL 的优化是针对以下情况确定的:MySQL 8 实例用作单节点联机事务处理数据库(“读/写 OLTP”),使用 SSL,性能使用 Sysbench 1.1.0 进行衡量。

    3. 如果您想修改配置或向配置中添加内容,请修改清单文件。

    4. 使用以下命令将清单应用于集群:

      kubectl create -f /tmp/manifests.yaml
      
  2. 部署引用优化的 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
    
  3. 确认 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 工作负载,则需要重新部署这些工作负载,以便使用优化后的配置运行它们。

后续步骤