מידע על תחזוקת ZooKeeper

Edge for Private Cloud v4.18.01

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

מידע על ZooKeeper ועל Edge

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

כדי לציין את צמתים של ZooKeeper, משתמשים במאפיינים ZK_HOSTS ו-ZK_CLIENT_HOSTS בקובץ התצורה של Edge. לבחינה

ZK_HOSTS="$IP1 $IP2 $IP3" 
ZK_CLIENT_HOSTS="$IP1 $IP2 $IP3" 

כאשר:

  • ZK_HOSTS – מציין את כתובות ה-IP של צמתים של ZooKeeper. כתובות ה-IP חייבות להופיע באותו סדר בכל הצמתים של ZooKeeper.

    בסביבה עם כמה מרכזי נתונים, מציינים את כל צמתי ZooKeeper מכל מרכזי הנתונים.
  • ZK_CLIENT_HOSTS – מציין את כתובות ה-IP של צמתים של ZooKeeper שבהם משתמש מרכז הנתונים הזה בלבד. כתובות ה-IP חייבות להופיע באותו סדר בכל צמתים של ZooKeeper במרכז הנתונים.

    בהתקנה אחת של Data Center, אלה אותם צמתים שצוינו על ידי ZK_HOSTS. בסביבה עם כמה מרכזי נתונים, בקובץ התצורה של Edge לכל מרכז נתונים צריכה להופיע רק רשימה של צמתים של ZooKeeper במרכז הנתונים הזה.

כברירת מחדל, כל צמתים של ZooKeeper מוגדרים כצומתים בוחרים. כלומר, כל הצמתים משתתפים בבחירת המנהיג של ZooKeeper. אפשר לכלול את המאפיין ‎:observer עם ZK_HOSTS כדי לציין שההערה היא צומת תצפית ולא צומת הצבעה. צומת תצפית לא משתתף בבחירת המנהיג.

בדרך כלל מציינים את המאפיין ‎:observer כשיוצרים כמה מרכזי נתונים של Edge, או כשלמרכז נתונים אחד יש מספר גדול של צמתים של ZooKeeper. לדוגמה, בהתקנה של Edge עם 12 מארחים ושני מרכזי נתונים, ZooKeeper בצומת 9 במרכז הנתונים 2 הוא הצופה:

לאחר מכן, משתמשים בהגדרות הבאות בקובץ התצורה של מרכז הנתונים 1:

ZK_HOSTS="$IP1 $IP2 $IP3 $IP7 $IP8 $IP9:observer"
ZK_CLIENT_HOSTS="$IP1 $IP2 $IP3"

וגם למרכז הנתונים

ZK_HOSTS="$IP1 $IP2 $IP3 $IP7 $IP8 $IP9:observer"
ZK_CLIENT_HOSTS="$IP7 $IP8 $IP9"

מידע על מנהיגים, עוקבים, מצביעים וצופים

בהתקנה של ZooKeeper עם כמה צמתים, אחד הצמתים מוגדר כמנהיג. כל שאר הצמתים של ZooKeeper מוגדרים כעוקבים. אפשר לבצע קריאות מכל צומת של ZooKeeper, אבל כל בקשות הכתיבה מועברות ליומן. לדוגמה, נוסף מעבד הודעות חדש ל-Edge. המידע הזה נכתב ב-leader של ZooKeeper. כל העוקבים יעתיקו את הנתונים.

בזמן התקנת Edge, מגדירים כל צומת ZooKeeper כמשתתף בבחירות או כמשתמש צופה. לאחר מכן, כל צמתים ב-ZooKeeper עם הרשאת הצבעה בוחרים את המנהיג. הדרישה היחידה לבחירת מנהיג היא שצריך להיות רוב של צמתים שפועלים כמצביעים ב-ZooKeeper. משמעות הרוב היא שיותרה ממחצית מכל צמתים ה-ZooKeeper שיש להם זכות הצבעה, בכל מרכזי הנתונים, פועלים.

אם אין רוב של צמתים עם זכויות הצבעה, אי אפשר לבחור מנהיג. בתרחיש כזה, ‏Zookeeper לא יכול למלא בקשות. המשמעות היא שלא תוכלו לשלוח בקשה לשרת הניהול של Edge, לעבד בקשות של Management API או להתחבר לממשק המשתמש של Edge עד שהמספר הנדרש של המשתתפים יוחזר.

לדוגמה, בהתקנה אחת של Data Center:

  • התקנתם שלושה צמתים של ZooKeeper
  • כל הצמתים של ZooKeeper הם צמתים להצבעה
  • הקוורום הוא שני צמתים תקינים של רשימת הבוחרים
  • אם רק צומת אחד של בודק זמין, קבוצת ZooKeeper לא יכולה לפעול

בהתקנה עם שני מרכזי נתונים:

  • התקנתם שלושה צמתים של ZooKeeper לכל מרכז נתונים, סה"כ שישה צמתים
  • למרכז הנתונים 1 יש שלושה צמתים של בוחרים
  • במרכז הנתונים 2 יש שני צמתים להצבעה וצומת אחד של משקיף
  • הקוורום מבוסס על חמשת המצביעים בשני מרכזי הנתונים, ולכן הוא מורכב משלושה צמתים תקינים של מצביעים
  • אם יש רק שני צמתים של בוחרים או פחות, אסור להפעיל את האנסמבל של ZooKeeper

הוספת צמתים כמשקיפים או כמצביעים

יכול להיות שדרישות המערכת יחייבו להוסיף צמתים נוספים של ZooKeeper להתקנה של Edge. במאמר הוספת צמתים של ZooKeeper מוסבר איך להוסיף צמתים נוספים של ZooKeeper ל-Edge. כשמוסיפים צמתים של ZooKeeper, צריך להביא בחשבון את סוג הצמתים שרוצים להוסיף: צופים או מצביעים.

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

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

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

ב-Data Center אחד, מומלץ להשתמש ב-Apigee עם לא יותר מחמישה בוחרים, ללא קשר למספר צמתים של משקיפים. ב-Apigee מומלץ להשתמש ב-9 גורמים בוחרים לכל היותר (חמישה במרכז נתונים אחד וארבעה במרכז נתונים אחר) בשני מרכזי נתונים. לאחר מכן תוכלו להוסיף כמה צמתים של משקיפים לפי דרישות המערכת.

שיקולים לגבי תחזוקה

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

תחזוקה במספר מרכזי נתונים

כשעובדים עם כמה מרכזי נתונים, חשוב לזכור שהאנסמבל של ZooKeeper לא מבדיל בין מרכזי נתונים. במאגרים של ZooKeeper, כל צמתים של ZooKeeper בכל מרכזי הנתונים מוצגים כמאגר אחד.

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

השלכות על תחזוקה

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

אם הצומת שנפל הוא צומת תצפית, צפויה ירידה קלה בביצועים של קבוצת ZooKeeper עד שהצומת יוחזר. אם הצומת הוא צומת שתומך בבחירות, הוא יכול להשפיע על הכדאיות של קבוצת ZooKeeper בגלל אובדן של צומת שמשתתף בתהליך בחירת המנהיג. ללא קשר לסיבה לכך שצומת הבחירה הפסיק לפעול, חשוב לשמור על кворум של צמתים זמינים לבחירה.

תהליך התחזוקה

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

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

כחלק מתהליך התחזוקה, אפשר להשתמש בתהליך הבא כדי לקבוע את הסוג של צומת ZooKeeper (מנהיג, מצביעים או משקיף):

  1. אם הוא לא מותקן בצומת ZooKeeper, מתקינים את nc:
    > sudo yum install nc
  2. מריצים את הפקודה הבאה של nc בצומת:
    > echo stat | nc localhost 2181

    כאשר 2181 היא יציאת ZooKeeper. הפלט אמור להיראות כך:
    גרסת Zookeeper: 3.4.5-1392090, נוצרה ב-30 בספטמבר 2012 בשעה 17:52 (שעון גריניץ')
    לקוחות: /a.b.c.d:xxxx[0](queued=0,recved=1,sent=0)
    זמן אחזור מינימלי/ממוצע/מקסימלי: 0/0/0
    נתקבל: 1
    נשלח: 0
    חיבורים: 1
    בקשות פתוחות: 0
    Zxid: 0xc00000044
    מצב: עוקב
    מספר הצמתים: 653


    בשורה Mode של הפלט של הצמתים, אמור להופיע הערך observer, leader או follower (כלומר, מצומת שמצביע אבל לא מוביל), בהתאם להגדרת הצומת.

    הערה: בהתקנה עצמאית של Edge עם צומת ZooKeeper יחיד, הערך של Mode מוגדר כ-standalone.
  3. חוזרים על שלבים 1 ו-2 בכל צומת של ZooKeeper.

סיכום

הדרך הטובה ביותר לבצע פעולות תחזוקה ב-ZooKeeper ensemble היא לבצע אותן בצורה מדורגת, צומת אחרי צומת. כדאי לזכור:

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