במאמר הזה נסביר איך לשפר את הביצועים של עומסי העבודה של 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:
יוצרים את קובצי המניפסט עם אופטימיזציות לעומס העבודה של 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. ההמלצה היא להשתמש בגרסה 1.31.1-gke.12000 של GKE ואילך. -
MACHINE_TYPE: סוג המכונה הרצוי.
הדגל
--output-path=/tmp/manifests.yamlהוא אופציונלי. אם לא מציינים את הפרמטר הזה, המניפסטים מודפסים בטרמינל, אבל לא נשמרים בקובץ.הפקודה הזו יוצרת קובץ YAML יחיד שמכיל שני משאבי Kubernetes:
- ConfigMap שמציין הגדרת MySQL בשם
default-auth.cnf. - אובייקט ComputeClass. ההגדרה הזו מציינת את המכונות שבהן יפעל MySQL, והיא אופציונלית. פרטים על האופן שבו מציינים סוגי מכונות זמינים במאמר מידע על ComputeClasses בהתאמה אישית
-
בודקים את ההמלצות ומשנים את קובצי המניפסט כך שיכללו את האופטימיזציות המועדפות. כדי להעריך את ההמלצות, אפשר לבצע את הפעולות הבאות:
- כדאי לעיין במסמכי התיעוד של MySQL כדי להעריך את ההגדרה המומלצת בהקשר שלכם.
- כדאי להשוות את אופן השימוש בעומס העבודה של MySQL באשכול שלכם לתרחיש לדוגמה הבא. אם התרחיש לדוגמה שלכם שונה, יכול להיות שתצטרכו להתאים את האופטימיזציות המומלצות להקשר שלכם.
האופטימיזציות ל-MySQL נקבעו עבור מופע MySQL 8 שמשמש כמסד נתונים של עיבוד עסקאות אונליין (OLTP) עם צומת יחיד (Read/Write 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.
כשפורסים את עומס העבודה, האשכול יוצר מאגר צמתים חדש שתואם להגדרה האופטימלית, ומקצה את ה-Pods למאגרי הצמתים האלה.
אין שינוי בפודים שכבר קיימים. רק פודים שמפנים להגדרות שעברו אופטימיזציה עוברים אופטימיזציה. אם פרסתם בעבר עומסי עבודה של MySQL באשכול, תצטרכו לפרוס מחדש את עומסי העבודה האלה כדי להריץ אותם עם ההגדרות האופטימליות.
המאמרים הבאים
- מידע נוסף על אופטימיזציה של עומסי עבודה ב-GKE
- מידע נוסף על פריסת אשכול MySQL עם שמירת מצב ב-GKE
- מידע נוסף על ComputeClasses ב-GKE
- כדי לבצע אופטימיזציה של עומסי עבודה של Redis, אפשר לעיין במאמר אופטימיזציה של ביצועי עומסי עבודה של Redis ב-GKE.