אופטימיזציה של ביצועי עומסי עבודה של MySQL ב-GKE

במאמר הזה נסביר איך לשפר את הביצועים של עומסי העבודה של MySQL ב-Google Kubernetes Engine‏ (GKE) באמצעות יצירה של הגדרות אופטימליות ברמת האפליקציה וברמת הצומת. פרטים נוספים זמינים במאמר אופטימיזציה של עומסי עבודה ב-GKE.

האופטימיזציות ל-MySQL נקבעו עבור מופע MySQL 8 שמשמש כמסד נתונים של עיבוד עסקאות אונליין (OLTP) עם צומת יחיד (Read/Write OLTP) עם SSL, והביצועים נמדדו באמצעות Sysbench 1.1.0. כדאי להשוות בין אופן השימוש בעומס העבודה של MySQL באשכול שלכם לבין אופן השימוש בתרחיש לדוגמה הזה. אם תרחיש השימוש שלכם שונה, יכול להיות שתצטרכו לשנות את ההמלצות לאופטימיזציה בהתאם להקשר שלכם.

לפני שמתחילים

לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:

  • מפעילים את GKE Recommender API ואת Google Kubernetes Engine API.
  • הפעלת ממשקי API
  • כדי להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את gcloud CLI. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה gcloud components update כדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.

דרישות

משתמשים בגרסה ‎1.31.1-gke.12000 ואילך של GKE.

אופטימיזציה לעומסי עבודה של 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. ההמלצה היא להשתמש בגרסה ‎1.31.1-gke.12000 של GKE ואילך.
      • MACHINE_TYPE: סוג המכונה הרצוי.

      הדגל --output-path=/tmp/manifests.yaml הוא אופציונלי. אם לא מציינים את הפרמטר הזה, המניפסטים מודפסים בטרמינל, אבל לא נשמרים בקובץ.

      הפקודה הזו יוצרת קובץ YAML יחיד שמכיל שני משאבי Kubernetes:

      • ‫ConfigMap שמציין הגדרת MySQL בשם default-auth.cnf.
      • אובייקט ComputeClass. ההגדרה הזו מציינת את המכונות שבהן יפעל MySQL, והיא אופציונלית. פרטים על האופן שבו מציינים סוגי מכונות זמינים במאמר מידע על ComputeClasses בהתאמה אישית
    2. בודקים את ההמלצות ומשנים את קובצי המניפסט כך שיכללו את האופטימיזציות המועדפות. כדי להעריך את ההמלצות, אפשר לבצע את הפעולות הבאות:

      • כדאי לעיין במסמכי התיעוד של MySQL כדי להעריך את ההגדרה המומלצת בהקשר שלכם.
      • כדאי להשוות את אופן השימוש בעומס העבודה של MySQL באשכול שלכם לתרחיש לדוגמה הבא. אם התרחיש לדוגמה שלכם שונה, יכול להיות שתצטרכו להתאים את האופטימיזציות המומלצות להקשר שלכם.

      האופטימיזציות ל-MySQL נקבעו עבור מופע MySQL 8 שמשמש כמסד נתונים של עיבוד עסקאות אונליין (OLTP) עם צומת יחיד (Read/Write 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.

כשפורסים את עומס העבודה, האשכול יוצר מאגר צמתים חדש שתואם להגדרה האופטימלית, ומקצה את ה-Pods למאגרי הצמתים האלה.

אין שינוי בפודים שכבר קיימים. רק פודים שמפנים להגדרות שעברו אופטימיזציה עוברים אופטימיזציה. אם פרסתם בעבר עומסי עבודה של MySQL באשכול, תצטרכו לפרוס מחדש את עומסי העבודה האלה כדי להריץ אותם עם ההגדרות האופטימליות.

המאמרים הבאים