Leistung von MySQL-Arbeitslasten in GKE optimieren

In diesem Dokument wird beschrieben, wie Sie die Leistung Ihrer MySQL-Arbeitslasten in Google Kubernetes Engine (GKE) verbessern können, indem Sie optimierte Konfigurationen auf Anwendungs- und Knotenebene generieren. Weitere Informationen finden Sie unter Für Arbeitslasten in GKE optimieren.

Die Optimierungen für MySQL wurden für eine MySQL 8-Instanz ermittelt, die als Single-Node-OLTP-Datenbank („Read/Write OLTP“) mit SSL verwendet wird. Die Leistung wurde mit Sysbench 1.1.0 gemessen. Überlegen Sie, wie die MySQL-Arbeitslast in Ihrem Cluster im Vergleich zu diesem Anwendungsfall verwendet wird. Wenn sich Ihr Anwendungsfall unterscheidet, müssen die empfohlenen Optimierungen möglicherweise an Ihren Kontext angepasst werden.

Hinweis

Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:

  • Aktivieren Sie die GKE Recommender API und die Google Kubernetes Engine API.
  • APIs aktivieren
  • Wenn Sie die Google Cloud CLI für diese Aufgabe verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit dem Befehl gcloud components update ab. In früheren gcloud CLI-Versionen werden die Befehle in diesem Dokument möglicherweise nicht unterstützt.

Voraussetzungen

Verwenden Sie die GKE-Version 1.31.1-gke.12000 oder höher.

Für MySQL-Arbeitslasten optimieren

Wir empfehlen, einen dedizierten Knotenpool für Ihre MySQL-Arbeitslast zu verwenden. Standardmäßig wird ein neuer Knotenpool erstellt, wenn Sie die folgenden Schritte ausführen.

So optimieren Sie die Leistung einer MySQL-Arbeitslast:

  1. Erstellen Sie die Manifeste mit Optimierungen für die MySQL-Arbeitslast:

    1. Generieren Sie Manifeste mit empfohlenen Optimierungen, indem Sie den folgenden Befehl ausführen:

      gcloud container workload profiles manifests create \
         --workload=mysql-8-oltp
         --cluster-version=CLUSTER_VERSION
         --options=machineType=MACHINE_TYPE \
         --output-path=/tmp/manifests.yaml
      

      Ersetzen Sie Folgendes:

      • CLUSTER_VERSION: die GKE-Version. Wir empfehlen GKE-Version 1.31.1-gke.12000 oder höher.
      • MACHINE_TYPE: der gewünschte Maschinentyp.

      Das Flag --output-path=/tmp/manifests.yaml ist optional. Wenn es nicht angegeben ist, werden die Manifeste im Terminal ausgegeben, aber nicht in einer Datei gespeichert.

      Mit diesem Befehl wird eine einzelne YAML-Datei mit zwei Kubernetes-Ressourcen generiert:

      • Eine ConfigMap, die eine MySQL-Konfiguration mit dem Namen default-auth.cnf angibt.
      • Ein ComputeClass-Objekt. Damit werden Maschinen für die Ausführung von MySQL angegeben. Dies ist optional. Weitere Informationen zum Angeben von Maschinentypen finden Sie unter Benutzerdefinierte Compute-Klassen.
    2. Sehen Sie sich die Empfehlungen an und ändern Sie die Manifeste so, dass sie die gewünschten Optimierungen enthalten. So können Sie die Empfehlungen bewerten:

      • Sehen Sie sich die MySQL-Dokumentation an, um die empfohlene Konfiguration für Ihren Kontext zu ermitteln.
      • Vergleichen Sie die Nutzung der MySQL-Arbeitslast in Ihrem Cluster mit dem folgenden Anwendungsfall. Wenn sich Ihr Anwendungsfall unterscheidet, müssen die empfohlenen Optimierungen möglicherweise an Ihren Kontext angepasst werden.

      Die Optimierungen für MySQL wurden für eine MySQL 8-Instanz ermittelt, die als Single-Node-OLTP-Datenbank („Read/Write OLTP“) mit SSL verwendet wird. Die Leistung wurde mit Sysbench 1.1.0 gemessen.

    3. Bearbeiten Sie die Manifestdatei, wenn Sie die Konfiguration ändern oder ergänzen möchten.

    4. Wenden Sie die Manifeste mit dem folgenden Befehl auf den Cluster an:

      kubectl create -f /tmp/manifests.yaml
      
  2. Stellen Sie einen Pod bereit, der auf die Optimierungen verweist. Beispiel:

    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
    

    Ändern Sie den Namen der Compute-Klasse so, dass er mit dem generierten Namen übereinstimmt. Wenden Sie dann das Pod-Manifest auf den Cluster an:

    kubectl apply -f pod.yaml
    
  3. Prüfen Sie, ob MySQL die optimierte Konfiguration verwendet. Führen Sie dazu den folgenden Befehl aus, um sicherzustellen, dass MySQL die optimierte Konfiguration verwendet:

    kubectl exec mysql -- mysql -e "SELECT DISTINCT VARIABLE_PATH FROM performance_schema.variables_info WHERE VARIABLE_PATH != '';"
    

    Die Ausgabe sollte in etwa so aussehen:

    VARIABLE_PATH
    /etc/mysql/conf.d/gke-optimized.cnf
    /etc/my.cnf
    

    Sie können auch den Befehl mysql verwenden, um die einzelnen Richtlinien abzufragen, die in der optimierten Konfiguration festgelegt sind, z. B. max_connections.

Wenn Sie die Arbeitslast bereitstellen, erstellt der Cluster einen neuen Knotenpool, der der optimierten Konfiguration entspricht, und weist Ihre Pods diesen Knotenpools zu.

Bereits vorhandene Pods werden nicht geändert. Nur Pods, die auf die optimierten Konfigurationen verweisen, werden optimiert. Wenn Sie zuvor MySQL-Arbeitslasten in Ihrem Cluster bereitgestellt haben, müssen Sie diese Arbeitslasten noch einmal bereitstellen, damit sie mit den optimierten Konfigurationen ausgeführt werden.

Nächste Schritte