הוספת Looker לאשכול

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

סקירה כללית

פריסות של Looker באירוח בצד הלקוח יכולות לפעול כצומת יחיד או באשכול:

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

יש שתי סיבות עיקריות לכך שארגון ירצה להפעיל את Looker כאשכול:

  • איזון עומסים
  • שיפור הזמינות והמעבר האוטומטי לגיבוי (failover)

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

חלופות לאיזון עומסים

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

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

אם יש לכם עד 50 משתמשים שמשתמשים ב-Looker באופן קליל, מומלץ להפעיל שרת יחיד ששווה ערך למכונת AWS EC2 בגודל גדול (M4.large: ‏ 8GB של RAM, ‏ 2 ליבות CPU). במערכות עם יותר משתמשים או עם הרבה משתמשים פעילים מתקדמים, כדאי לבדוק אם יש עליות חדות בשימוש במעבד או אם המשתמשים מבחינים בהאטה בפעולת האפליקציה. אם כן, צריך להעביר את Looker לשרת גדול יותר או להפעיל הגדרת Looker מקובצת.

זמינות משופרת/מעבר לגיבוי (failover)

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

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

רכיבים נדרשים

הגורמים הבאים נדרשים להגדרת Looker באשכול:

  • מסד נתונים של אפליקציית MySQL
  • צמתים של Looker (שרתים שמריצים את תהליך Java של Looker)
  • מאזן עומסים
  • מערכת קבצים משותפת
  • גרסה מתאימה של קובצי ה-JAR של אפליקציית Looker

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

מסד נתונים של אפליקציית MySQL

‫Looker משתמש במסד נתונים של האפליקציה (שנקרא לעיתים קרובות מסד נתונים פנימי) כדי לאחסן נתונים של האפליקציה. כש-Looker פועל כאפליקציה עם צומת יחיד, הוא בדרך כלל משתמש במסד נתונים של HyperSQL בזיכרון.

בהגדרת Looker עם אשכול, כל מופע Looker של צומת צריך להצביע על מסד נתונים משותף של טרנזקציות (האפליקציה המשותפת או מסד הנתונים הפנימי). התמיכה במסד הנתונים של האפליקציה ב-Looker עם אשכולים היא כדלקמן:

  • רק MySQL נתמך במסד הנתונים של האפליקציה עבור מופעי Looker באשכול. אין תמיכה ב-Amazon Aurora וב-MariaDB.
  • יש תמיכה ב-MySQL בגרסאות 5.7 ומעלה ו-8.0 ומעלה.
  • אין תמיכה במסדי נתונים מקובצים כמו Galera.

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

צמתים של Looker

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

מאזן עומסים

כדי לאזן את העומס או להפנות בקשות לצמתים זמינים, נדרש מאזן עומסים או שרת proxy (לדוגמה, NGINX או AWS ELB) כדי להפנות את התנועה לכל צומת Looker. מאזן העומסים מטפל בבדיקות התקינות. במקרה של כשל בצומת, צריך להגדיר את מאזן העומסים כך שינתב מחדש את התנועה לצמתים התקינים שנותרו.

כשבוחרים ומגדירים את מאזן העומסים, מוודאים שאפשר להגדיר אותו לפעולה רק בשכבה 4. דוגמה לכך היא Amazon Classic ELB. בנוסף, ל-Load Balancer צריך להיות טיימאוט ארוך (3,600 שניות) כדי למנוע את סגירת השאילתות.

מערכת קבצים משותפת

חובה להשתמש במערכת קבצים משותפת שתואמת ל-POSIX (כמו NFS,‏ AWS EFS,‏ Gluster,‏ BeeGFS,‏ Lustre או מערכות רבות אחרות). ‫Looker משתמש במערכת הקבצים המשותפת כמאגר למידע שמשמש את כל הצמתים באשכול.

אפליקציית Looker (קובץ JAR שניתן להפעלה)

צריך להשתמש בקובץ JAR של אפליקציית Looker מגרסה Looker 3.56 ואילך.

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

הגדרת האשכול

צריך לבצע את המשימות הבאות:

  1. התקנת Looker
  2. הגדרה של מסד נתונים של אפליקציית MySQL
  3. הגדרת מערכת הקבצים המשותפת
  4. שיתוף מאגר מפתחות ה-SSH (בהתאם למצב)
  5. פתיחת הפורטים לתקשורת בין הצמתים
  6. הפעלת Looker בצמתים

התקנה של Looker

מוודאים ש-Looker מותקן בכל צומת באמצעות קובצי ה-JAR של אפליקציית Looker וההוראות שבדף התיעוד שלבי ההתקנה באירוח עצמי.

הגדרת מסד נתונים של אפליקציית MySQL

בהגדרת Looker באשכול, מסד הנתונים של האפליקציה חייב להיות מסד נתונים של MySQL. אם יש לכם מופע Looker קיים שלא מבוסס על אשכולות ומשתמש ב-HyperSQL למסד הנתונים של האפליקציה, אתם צריכים להעביר את נתוני האפליקציה מנתוני HyperSQL למסד הנתונים החדש של האפליקציה ב-MySQL.

במאמר מעבר ל-MySQL מוסבר איך לגבות את Looker ואז להעביר את מסד הנתונים של האפליקציה מ-HyperSQL ל-MySQL.

הגדרת מערכת הקבצים המשותפת

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

  1. בשרת שבו תאוחסן מערכת הקבצים המשותפת, מוודאים שיש לכם גישה לחשבון אחר שיכול su לחשבון המשתמש ב-Looker.
  2. בשרת של מערכת הקבצים המשותפת, מתחברים לחשבון המשתמש ב-Looker.
  3. אם Looker פועל, צריך להשבית את ההגדרה של Looker.
  4. אם השתמשתם בעבר בסקריפטים של inotify Linux לצורך אשכולות, צריך להפסיק את הסקריפטים האלה, להסיר אותם מ-cron ולמחוק אותם.
  5. יוצרים שיתוף רשת ומעלים אותו לכל צומת באשכול. מוודאים שהיא מוגדרת להרכבה אוטומטית בכל צומת, ושלמשתמש Looker יש אפשרות לקרוא ולכתוב בה. בדוגמה הבאה, השם של השיתוף ברשת הוא /mnt/looker-share.
  6. בצומת אחד, מעתיקים את מפתחות הפריסה ומעבירים את הפלאגינים ואת הספריות looker/models ו-looker/models-user-*, שבהן מאוחסנים קובצי המודל, אל השיתוף ברשת. לדוגמה:

    mv looker/models /mnt/looker-share/
    mv looker/models-user-* /mnt/looker-share/
    
  7. לכל צומת, מוסיפים את ההגדרה --shared-storage-dir אל LOOKERARGS. מציינים את נתח הרשת, כמו בדוגמה הזו:

    --shared-storage-dir /mnt/looker-share
    

    צריך להוסיף את LOOKERARGS אל $HOME/looker/lookerstart.cfg כדי שהעדכונים לא ישפיעו על ההגדרות. אם כתובות ה-LOOKERARGS שלכם לא מופיעות בקובץ הזה, יכול להיות שמישהו הוסיף אותן ישירות לסקריפט מעטפת $HOME/looker/looker.

    כל צומת באשכול חייב לכתוב לספרייה ייחודית /log – או לפחות לקובץ יומן ייחודי.

שיתוף מאגר מפתחות SSH

  • אתם יוצרים אשכול של מערכת קבצים משותפת מתצורת Looker קיימת, ו
  • יש לכם פרויקטים שנוצרו ב-Looker 4.6 או בגרסאות קודמות.

מגדירים את מאגר מפתחות ה-SSH כך שיהיה משותף:

  1. בשרת הקבצים המשותף, יוצרים ספרייה בשם ssh-share. לדוגמה: /mnt/looker-share/ssh-share.

    מוודאים שהספרייה ssh-share נמצאת בבעלות של משתמש Looker וההרשאות הן 700. בנוסף, מוודאים שספריות מעל הספרייה ssh-share (כמו /mnt ו-/mnt/looker-share) לא ניתנות לכתיבה על ידי כל המשתמשים או על ידי קבוצות.

  2. באחד הצמתים, מעתיקים את התוכן של $HOME/.ssh לספרייה החדשה ssh-share. לדוגמה:

    cp $HOME/.ssh/* /mnt/looker-share/ssh-share

  3. לכל צומת, יוצרים גיבוי של קובץ ה-SSH הקיים ויוצרים קישור סמלי לספרייה ssh-share. לדוגמה:

    cd $HOME
    mv .ssh .ssh_bak
    ln -s /mnt/looker-share/ssh-share .ssh
    

    חשוב לבצע את השלב הזה לכל צומת.

פתיחת הפורטים כדי שהצמתים יוכלו לתקשר

צמתי Looker באשכול מתקשרים ביניהם באמצעות HTTPS עם אישורים בחתימה עצמית וסכמת אימות נוספת שמבוססת על סודות מתחלפים במסד הנתונים של האפליקציה.

יציאות ברירת המחדל שצריכות להיות פתוחות בין צמתי האשכול הן 1551 ו-61616. אפשר להגדיר את היציאות האלה באמצעות דגלי ההפעלה שמפורטים כאן. מומלץ מאוד להגביל את הגישה לרשת ליציאות האלה כדי לאפשר תנועה רק בין המארחים של האשכול.

הפעלת Looker בצמתים

מפעילים מחדש את השרת בכל צומת עם דגלי ההפעלה הנדרשים.

דגלים זמינים להפעלה

בטבלה הבאה מוצגים דגלי ההפעלה הזמינים, כולל הדגלים שנדרשים כדי להפעיל אשכול או להצטרף אליו:

דגל חובה? ערכים מטרה
--clustered כן מוסיפים דגל כדי לציין שהצומת הזה פועל במצב אשכול.
-H או --hostname כן 10.10.10.10 שם המארח שצמתים אחרים משתמשים בו כדי ליצור קשר עם הצומת הזה, כמו כתובת ה-IP של הצומת או שם המארח של המערכת. השם צריך להיות שונה משמות המארחים של כל הצמתים האחרים באשכול.
-n לא 1551 היציאה לתקשורת בין צמתים. ערך ברירת המחדל הוא 1551. כל הצמתים צריכים להשתמש באותו מספר יציאה לתקשורת בין הצמתים.
-q לא 61616 היציאה לתור לאירועים ברמת האשכול. ערך ברירת המחדל הוא 61616.
-d כן /path/to/looker-db.yml הנתיב לקובץ שמכיל את פרטי הכניסה למסד הנתונים של אפליקציית Looker.
--shared-storage-dir כן /path/to/mounted/shared/storage האפשרות צריכה להפנות להגדרת הספרייה המשותפת בחלק הקודם של הדף הזה, שכוללת את הספריות looker/model ו-looker/models-user-*.

דוגמה לשימוש ב-LOOKERARGS ולציון פרטי כניסה למסד נתונים

ממקמים את דגלי ההפעלה של Looker בקובץ lookerstart.cfg שנמצא באותה ספרייה שבה נמצאים קובצי ה-JAR של Looker.

לדוגמה, יכול להיות שתרצו להגיד ל-Looker:

  • כדי להשתמש בקובץ בשם looker-db.yml עבור פרטי הכניסה למסד הנתונים,
  • שהוא צומת באשכול, וגם
  • ששאר הצמתים באשכול צריכים ליצור קשר עם המארח הזה בכתובת ה-IP‏ 10.10.10.10.

הערכים שתציינו:

LOOKERARGS="-d looker-db.yml --clustered -H 10.10.10.10"

הקובץ looker-db.yml יכיל את פרטי הכניסה למסד הנתונים, כמו:

host: your.db.hostname.com
username: db_user
database: looker
dialect: mysql
port: 3306
password: secretPassword

בנוסף, אם מסד הנתונים של MySQL דורש חיבור SSL, בקובץ looker-db.yml צריך להוסיף את השורות הבאות:

ssl: true

אם אתם לא רוצים לאחסן את התצורה בקובץ looker-db.yml בדיסק, אתם יכולים להגדיר את משתנה הסביבה LOOKER_DB כך שיכיל רשימה של מפתחות וערכים לכל שורה בקובץ looker-db.yml. לדוגמה:

export LOOKER_DB="dialect=mysql&host=localhost&username=root&password=&database=looker&port=3306"

איפה נמצאים מפתחות הפריסה של Git SSH

המקום שבו Looker מאחסן מפתחות פריסה של Git SSH תלוי בגרסה שבה הפרויקט נוצר:

  • בפרויקטים שנוצרו לפני Looker 4.8, מפתחות הפריסה מאוחסנים בספריית ה-SSH המובנית של השרת, ~/.ssh.
  • בפרויקטים שנוצרו ב-Looker 4.8 ואילך, מפתחות הפריסה מאוחסנים בספרייה שבשליטת Looker, ~/looker/deploy_keys/PROJECT_NAME.

שינוי אשכול Looker

אחרי שיוצרים אשכול Looker, אפשר להוסיף או להסיר צמתים בלי לבצע שינויים בצמתים אחרים באשכול.

עדכון אשכול לגרסת Looker חדשה

יכול להיות שהעדכונים יכללו שינויים בסכימה של מסד הנתונים הפנימי של Looker, שלא יהיו תואמים לגרסאות קודמות של Looker. יש שתי שיטות לעדכון Looker.

שיטה בטוחה יותר

  1. יוצרים גיבוי של מסד הנתונים של האפליקציה.
  2. מפסיקים את כל הצמתים באשכול.
  3. מחליפים את קובצי ה-JAR בכל שרת.
  4. מפעילים כל צומת בנפרד.

שיטה מהירה יותר

כדי לעדכן באמצעות השיטה המהירה יותר אבל הפחות מלאה:

  1. יוצרים עותק של מסד הנתונים של אפליקציית Looker.
  2. מתחילים אשכול חדש שמצביע על העותק.
  3. מפנים את שרת ה-proxy או מאזן העומסים לצמתים החדשים, ואז אפשר להפסיק את הצמתים הישנים.