在 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 是選用旗標。如果未指定,資訊清單會列印至終端機,但不會儲存至檔案。

      這項指令會產生單一 YAML 檔案,其中包含兩項 Kubernetes 資源:

      • 指定名為 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 工作負載,則需要重新部署這些工作負載,才能以最佳化設定執行。

後續步驟