במאמר הזה נסביר איך לשפר את הביצועים של עומסי העבודה של 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 למשימה הזו, צריך להתקין ואז לאתחל את ה-CLI של gcloud. אם התקנתם בעבר את ה-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 למאגרי הצמתים האלה.
אין שינוי ב-Pods שכבר קיימים. רק פודים שמפנים להגדרות שעברו אופטימיזציה עוברים אופטימיזציה. אם פרסתם בעבר עומסי עבודה של MySQL באשכול, תצטרכו לפרוס מחדש את עומסי העבודה האלה כדי להריץ אותם עם ההגדרות האופטימליות.
המאמרים הבאים
- מידע נוסף על אופטימיזציה של עומסי עבודה ב-GKE
- מידע נוסף על פריסת אשכול MySQL עם שמירת מצב ב-GKE
- מידע נוסף על ComputeClasses ב-GKE
- כדי לבצע אופטימיזציה של עומסי עבודה של Redis, אפשר לעיין במאמר אופטימיזציה של ביצועי עומסי עבודה של Redis ב-GKE.