Edge for Private Cloud גרסה 4.16.09
מערכי ZooKeeper מתוכננים להמשיך לפעול ללא אובדן נתונים, גם אם צומת אחד או יותר של ZooKeeper אובד. אפשר להשתמש ביכולת הזו כדי לבצע תחזוקה בצומתי ZooKeeper בלי להשבית את המערכת.
מידע על ZooKeeper ו-Edge
ב-Edge, צומתי ZooKeeper מכילים נתוני הגדרות אישיות לגבי המיקום וההגדרות האישיות של רכיבי Edge השונים, ומודיעים לרכיבים השונים על שינויים בהגדרות האישיות. בכל הטופולוגיות של Edge שנתמכות במערכת ייצור, צריך להשתמש בשלושה צומתי ZooKeeper לפחות.
משתמשים במאפיינים ZK_HOSTS ו-ZK_CLIENT_HOSTS בקובץ התצורה של Edge כדי לציין את צומתי ZooKeeper. לבחינה
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 במרכז הנתונים.
בהתקנה של מרכז נתונים יחיד, אלה אותם צמתים שצוינו על ידי ZK_HOSTS. בסביבה עם כמה מרכזי נתונים, קובץ התצורה של Edge לכל מרכז נתונים צריך לכלול רק את צומתי ZooKeeper של אותו מרכז נתונים.
כברירת מחדל, כל צומתי ZooKeeper מוגדרים כצומתי voter. כלומר, כל הצמתים משתתפים בבחירת המוביל של 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, אבל כל בקשות הכתיבה מועברות ל-leader. לדוגמה, מעבד בקשות חדש נוסף ל-Edge. המידע הזה נכתב ל-ZooKeeper leader. כל העוקבים ואז משכפלים את הנתונים.
בזמן ההתקנה של Edge, אתם מגדירים כל צומת ZooKeeper כמצביע או כצופה. לאחר מכן, המנהיג נבחר על ידי כל צומתי הבוחרים של ZooKeeper. הדרישה היחידה לבחירת מנהיג היא שיהיה קוורום של צומתי הצבעה פעילים של ZooKeeper. קוורום פירושו שיותר ממחצית מכל צמתי ZooKeeper המצביעים, בכל מרכזי הנתונים, פועלים.
אם אין קוורום של צומתי הצבעה זמינים, אי אפשר לבחור מנהיג. במקרה כזה, Zookeeper לא יכול לטפל בבקשות. כלומר, לא תוכלו לשלוח בקשת API לשרת הניהול של Edge, לעבד בקשות של Management API או להתחבר לממשק המשתמש של Edge עד שהקוורום ישוחזר.
לדוגמה, בהתקנה של מרכז נתונים אחד:
- התקנתם שלושה צומתי ZooKeeper
- כל הצמתים של ZooKeeper הם מצביעים
- הקוורום הוא שני צומתי הצבעה פעילים
- אם רק צומת הצבעה אחד זמין, אז אנסמבל ZooKeeper לא יכול לפעול
בהתקנה עם שני מרכזי נתונים:
- התקנתם שלושה צומתי ZooKeeper בכל מרכז נתונים, ובסך הכול שישה צמתים
- במרכז נתונים 1 יש שלושה צומתי הצבעה
- במרכז נתונים 2 יש שני צומתי הצבעה וצומת צופה אחד
- הקוורום מבוסס על חמשת המצביעים בשני מרכזי הנתונים, ולכן הוא שלושה צומתי הצבעה פעילים
- אם רק שני צומתי הצבעה או פחות זמינים, אנסמבל ZooKeeper לא יכול לפעול
הוספת צמתים כמצביעים או כצופים
יכול להיות שדרישות המערכת שלכם יחייבו אתכם להוסיף עוד צומתי ZooKeeper להתקנת Edge. במסמך הוספת צומתי ZooKeeper מוסבר איך להוסיף עוד צומתי ZooKeeper ל-Edge. כשמוסיפים צומתי ZooKeeper, צריך להביא בחשבון את סוג הצמתים שמוסיפים: מצביע או צופה.
חשוב לוודא שיש מספיק צומתי הצבעה, כדי שאם אחד או יותר מהם מושבתים, מערך ZooKeeper עדיין יוכל לפעול. כלומר, עדיין יש קוורום של צומתי הצבעה זמינים. הוספת צומתי הצבעה מגדילה את גודל הקוורום, ולכן אפשר לסבול יותר צומתי הצבעה מושבתים.
עם זאת, הוספת צומתי הצבעה נוספים יכולה להשפיע לרעה על ביצועי הכתיבה, כי פעולות כתיבה דורשות הסכמה של הקוורום על המנהיג. הזמן שלוקח לקבוע את ה-leader תלוי במספר צומתי ההצבעה, והוא גדל ככל שמוסיפים עוד צומתי הצבעה. לכן, לא כדאי להגדיר את כל הצמתים כמצביעים.
במקום להוסיף צומתי הצבעה, אפשר להוסיף צומתי צפייה. הוספת צומתי צפייה משפרת את ביצועי הקריאה הכוללים של המערכת בלי להוסיף לתקורה של בחירת מנהיג, כי צומתי צפייה לא מצביעים ולא משפיעים על גודל הקוורום. לכן, אם צומת צופה מושבת, זה לא משפיע על היכולת של האנסמבל לבחור מנהיג. עם זאת, אובדן של צומתי צפייה עלול לגרום לירידה בביצועי הקריאה של אנסמבל ZooKeeper, כי יש פחות צמתים זמינים לטיפול בבקשות נתונים.
במרכז נתונים אחד, מומלץ שיהיו ב-Apigee עד חמישה מצביעים, בלי קשר למספר צומתי הצופים. אם יש שני מרכזי נתונים, ההמלצה של Apigee היא שיהיו עד תשעה מצביעים (חמישה במרכז נתונים אחד וארבעה במרכז הנתונים השני). אחר כך אפשר להוסיף כמה צומתי צפייה שצריך בהתאם לדרישות המערכת.
שיקולים לגבי תחזוקה
אפשר לבצע תחזוקה של ZooKeeper באנסמבל שפועל באופן מלא ללא זמן השבתה, אם מבצעים אותה בצומת אחד בכל פעם. כדי לוודא שתמיד יהיה קוורום של צומתי הצבעה זמינים לבחירת מנהיג, צריך לוודא שרק צומת ZooKeeper אחד מושבת בכל פעם.
תחזוקה במספר מרכזי נתונים
כשעובדים עם כמה מרכזי נתונים, חשוב לזכור שהאנסמבל של ZooKeeper לא מבדיל בין מרכזי נתונים. מכלולי ZooKeeper מציגים את כל צומתי ZooKeeper בכל מרכזי הנתונים כאנסמבל אחד.
המיקום של צומתי ההצבעה במרכז נתונים נתון לא משפיע על החישובים של ZooKeeper לגבי הקוורום. צמתים בודדים יכולים לרדת במרכזי נתונים, אבל כל עוד נשמר קוורום בכל האנסמבל, ZooKeeper ממשיך לפעול.
השלכות על התחזוקה
מדי פעם תצטרכו להשבית צומת ZooKeeper לצורך תחזוקה, בין אם זה צומת מצביע או צומת צופה. לדוגמה, יכול להיות שתצטרכו לשדרג את גרסת Edge בצומת, המכונה שמארחת את ZooKeeper עלולה להיכשל או שהצומת לא יהיה זמין מסיבה אחרת, כמו שגיאה בחיבור לרשת.
אם הצומת שמושבת הוא צומת צופה, צפויה ירידה קלה בביצועים של אנסמבל ZooKeeper עד שהצומת ישוחזר. אם הצומת הוא צומת מצביע, הוא יכול להשפיע על הכדאיות של אנסמבל ZooKeeper בגלל אובדן של צומת שמשתתף בתהליך בחירת המנהיג. לא משנה מה הסיבה לכך שצומת ההצבעה לא זמין, חשוב לשמור על קוורום של צומתי הצבעה זמינים.
תהליך התחזוקה
מומלץ לבצע הליך תחזוקה רק אחרי שמוודאים שאנסמבל ZooKeeper פועל. ההנחה היא שצומתי הצופים פועלים, ושיש מספיק צומתי מצביעים זמינים במהלך התחזוקה כדי לשמור על קוורום.
כשהתנאים האלה מתקיימים, אנסמבל ZooKeeper בכל גודל יכול לסבול אובדן של צומת אחד בכל שלב, בלי לאבד נתונים או לפגוע בביצועים. זה אומר שאפשר לבצע פעולות תחזוקה בכל צומת באנסמבל, כל עוד מבצעים אותן בצומת אחד בכל פעם.
כחלק מביצוע פעולות תחזוקה, משתמשים בהליך הבא כדי לקבוע את הסוג של צומת ZooKeeper (מנהיג, מצביע או צופה):
- אם הוא לא מותקן בצומת ZooKeeper, מתקינים את nc:
> sudo yum install nc - מריצים את הפקודה הבאה של nc בצומת:
> echo stat | nc localhost 2181
כאשר 2181 היא היציאה של ZooKeeper. הפלט אמור להיראות כך:
Zookeeper version: 3.4.5-1392090, built on 09/30/2012 17:52 GMT
Clients: /a.b.c.d:xxxx[0](queued=0,recved=1,sent=0)
Latency min/avg/max: 0/0/0
Received: 1
Sent: 0
Connections: 1
Outstanding: 0
Zxid: 0xc00000044
Mode: follower
Node count: 653
בשורת Mode של הפלט לצמתים, אמור להופיע observer, leader או follower (כלומר, מצביע שהוא לא ה-leader), בהתאם להגדרת הצומת.
הערה: בהתקנה עצמאית של Edge עם צומת ZooKeeper יחיד, הערך של Mode מוגדר ל-standalone. - חוזרים על שלבים 1 ו-2 בכל צומת ZooKeeper.
סיכום
הדרך הכי טובה לבצע תחזוקה באנסמבל של ZooKeeper היא לבצע אותה בצומת אחד בכל פעם. זכרו:
- כדי להבטיח שקבוצת ZooKeeper תמשיך לפעול, צריך לשמור על קוורום של צומתי הצבעה במהלך התחזוקה.
- הסרה של צומת צופה לא משפיעה על הקוורום או על היכולת לבחור מנהיג
- הקוורום מחושב בכל צומתי ZooKeeper בכל מרכזי הנתונים
- ממשיכים בתחזוקה של השרת הבא אחרי שהשרת הקודם פועל
- משתמשים בפקודה nc כדי לבדוק את צומת ZooKeeper