מערכות 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"
ובמרכז נתונים 2:
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. קוורום (quorum) פירושו שיותר ממחצית מכל צמתי ה-ZooKeeper של המצביעים, בכל מרכזי הנתונים, פועלים.
אם אין מספיק צמתים להצבעה, אי אפשר לבחור צומת ראשי. בתרחיש הזה, ZooKeeper לא יכול לטפל בבקשות. כלומר, לא תוכלו לשלוח בקשה לשרת הניהול של Edge, לעבד בקשות API או להתחבר לממשק המשתמש החדש של Edge עד שהקוורום ישוחזר.
לדוגמה, בהתקנה של מרכז נתונים יחיד:
- התקנת שלושה צמתים של ZooKeeper
- כל צומתי ZooKeeper הם מצביעים
- הקוורום הוא שני צומתי הצבעה פעילים
- אם רק צומת הצבעה אחד זמין, אז אנסמבל ZooKeeper לא יכול לפעול
בהתקנה עם שני מרכזי נתונים:
- התקנתם שלושה צומתי ZooKeeper בכל מרכז נתונים, ובסך הכול שישה צמתים
- במרכז הנתונים 1 יש שלושה צמתים להצבעה
- במרכז נתונים 2 יש שני צומתי הצבעה וצומת צופה אחד
- הקוורום מבוסס על חמשת המצביעים בשני מרכזי הנתונים, ולכן הוא שלושה צומתי הצבעה פעילים
- אם יש רק שני צמתים או פחות עם זכות הצבעה, קבוצת השרתים של ZooKeeper לא יכולה לפעול.
שיקולים להוספת צמתים כמצביעים או כמשקיפים
יכול להיות שדרישות המערכת שלכם יחייבו אתכם להוסיף עוד צומתי ZooKeeper להתקנת Edge. במסמך הוספת צומתי ZooKeeper מוסבר איך מוסיפים עוד צומתי ZooKeeper ל-Edge. כשמוסיפים צמתים של ZooKeeper, צריך לקחת בחשבון את סוג הצמתים שרוצים להוסיף: צומת מצביע או צומת צופה.
חשוב לוודא שיש מספיק צומתי הצבעה כדי שאם אחד או יותר מהם מושבתים, מערך ZooKeeper עדיין יוכל לפעול, כלומר עדיין יש קוורום של צומתי הצבעה זמינים. הוספה של צמתים להצבעה מגדילה את גודל הקוורום, ולכן אפשר לסבול יותר צמתים להצבעה שהושבתו.
עם זאת, הוספת צומתי הצבעה נוספים יכולה להשפיע לרעה על ביצועי הכתיבה, כי פעולות כתיבה דורשות הסכמה של הקוורום על המנהיג. הזמן שלוקח לקבוע את ה-leader תלוי במספר צומתי ההצבעה, והוא גדל ככל שמוסיפים עוד צומתי הצבעה. לכן, לא כדאי להגדיר את כל הצמתים כמצביעים.
במקום להוסיף צמתים להצבעה, אפשר להוסיף צמתים לצפייה. הוספת צומתי צפייה משפרת את ביצועי הקריאה הכוללים של המערכת בלי להוסיף לתקורה של בחירת מנהיג, כי צומתי צפייה לא מצביעים ולא משפיעים על גודל הקוורום. לכן, אם צומת של צופה מושבת, זה לא משפיע על היכולת של האנסמבל לבחור מנהיג. עם זאת, אובדן של צומתי צפייה עלול לגרום לירידה בביצועי הקריאה של אנסמבל ZooKeeper, כי יש פחות צמתים זמינים לטיפול בבקשות נתונים.
במרכז נתונים יחיד, מומלץ להגדיר עד חמישה מצביעים ב-Apigee, בלי קשר למספר צמתי הצפייה. אם יש שני מרכזי נתונים, ההמלצה של Apigee היא שיהיו עד תשעה מצביעים (חמישה במרכז נתונים אחד וארבעה במרכז הנתונים השני). אחר כך אפשר להוסיף כמה צומתי צפייה שצריך בהתאם לדרישות המערכת.
הסרת צומת Zookeeper
יש הרבה סיבות להסיר צומת Zookeeper. לדוגמה, צומת נפגם או נוסף לסביבה הלא נכונה.
בקטע הזה מוסבר איך להסיר צומת Zookeeper כשהצומת מושבת ולא ניתן להגיע אליו.
כדי להסיר צומת ZooKeeper:
- עורכים את קובץ ההגדרה השקט ומסירים את כתובת ה-IP של צומת Zookeeper שרוצים להסיר.
- מריצים מחדש את הפקודה
setupעבור Zookeeper כדי להגדיר מחדש את הצמתים הנותרים של ZooKeeper:/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper setup -f updated_config_file
- מפעילים מחדש את כל צומתי Zookeeper:
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
- מגדירים מחדש את צומת שרת הניהול:
/opt/apigee/apigee-service/bin/apigee-service edge-management-server setup -f updated_config_file
/opt/apigee/apigee-service/bin/apigee-service edge-management-server restart - מגדירים מחדש את כל הנתבים:
/opt/apigee/apigee-service/bin/apigee-service edge-router setup -f updated_config_file
/opt/apigee/apigee-service/bin/apigee-service edge-router restart - מגדירים מחדש את כל מעבדי ההודעות:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor setup -f updated_config_file
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart - מגדירים מחדש את כל צמתי Qpid:
/opt/apigee/apigee-service/bin/apigee-service edge-qpid-server setup -f updated_config_file
/opt/apigee/apigee-service/bin/apigee-service edge-qpid-server restart - מגדירים מחדש את כל צמתי Postgres:
/opt/apigee/apigee-service/bin/apigee-service edge-postgres-server setup -f updated_config_file
/opt/apigee/apigee-service/bin/apigee-service edge-postgres-server restart
שיקולי תחזוקה
אפשר לבצע תחזוקה של ZooKeeper באנסמבל שפועל באופן מלא ללא השבתה, אם מבצעים אותה בכל פעם בצומת אחד. כדי לוודא שתמיד יהיה קוורום של צומתי הצבעה זמינים לבחירת מנהיג, צריך לוודא שרק צומת ZooKeeper אחד מושבת בכל פעם.
תחזוקה בכמה מרכזי נתונים
כשעובדים עם כמה מרכזי נתונים, חשוב לזכור שקבוצת השרתים של ZooKeeper לא מבחינה בין מרכזי נתונים. ההגדרות של ZooKeeper מציגות את כל הצמתים של ZooKeeper בכל מרכזי הנתונים כקבוצה אחת.
המיקום של צמתי ההצבעה במרכז נתונים נתון לא משפיע על חישובי הקוורום שמבצעת מערכת ZooKeeper. צמתים בודדים יכולים לרדת במרכזי נתונים, אבל כל עוד נשמר קוורום בכל האנסמבל, ZooKeeper ממשיך לפעול.
השלכות על תחזוקה
בזמנים שונים, תצטרכו להשבית צומת של ZooKeeper לצורך תחזוקה, בין אם מדובר בצומת מצביע או בצומת צופה. לדוגמה, יכול להיות שתצטרכו לשדרג את גרסת Edge בצומת, המכונה שמארחת את ZooKeeper עלולה להיכשל או שהצומת לא יהיה זמין מסיבה אחרת, כמו שגיאה בחיבור לרשת.
אם הצומת שמושבת הוא צומת צופה, יכול להיות שתהיה ירידה קלה בביצועים של אנסמבל ZooKeeper עד שהצומת ישוחזר. אם הצומת הוא צומת מצביע, הוא יכול להשפיע על הכדאיות של אנסמבל ZooKeeper בגלל אובדן של צומת שמשתתף בתהליך בחירת המנהיג. לא משנה למה צומת ההצבעה מושבת, חשוב לשמור על קוורום של צמתי הצבעה זמינים.
תהליך התחזוקה
מבצעים הליכי תחזוקה רק אחרי שמוודאים שאנסמבל ZooKeeper פועל. ההנחה היא שצומתי הצופים פועלים, ושיש מספיק צומתי מצביעים זמינים במהלך התחזוקה כדי לשמור על קוורום.
כשמתקיימים התנאים האלה, קבוצת שרתים של ZooKeeper בכל גודל יכולה לעמוד באובדן של צומת יחיד בכל נקודה, בלי לאבד נתונים או להשפיע באופן משמעותי על הביצועים. כלומר, אתם יכולים לבצע תחזוקה בכל צומת בקבוצה, כל עוד התחזוקה מתבצעת בצומת אחד בכל פעם.
כחלק מביצוע פעולות תחזוקה, משתמשים בהליך הבא כדי לקבוע את הסוג של צומת ZooKeeper (מנהיג, מצביע או צופה):
- אם הוא לא מותקן בצומת ZooKeeper, מתקינים את
nc:sudo yum install nc
- מריצים את הפקודה
ncהבאה בצומת, כאשר 2181 היא יציאת ZooKeeper:echo stat | nc localhost 2181
הפלט אמור להופיע בטופס:
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(כלומר, מצביע שאינו המוביל), בהתאם להגדרת הצומת. - חוזרים על שלבים 1 ו-2 בכל צומת ZooKeeper.
סיכום
הדרך הכי טובה לבצע תחזוקה ב-ZooKeeper ensemble היא לבצע אותה בכל צומת בנפרד. זכרו:
- כדי להבטיח שקבוצת ZooKeeper תמשיך לפעול, צריך לשמור על קוורום של צומתי הצבעה במהלך התחזוקה.
- הסרה של צומת צופה לא משפיעה על הקוורום או על היכולת לבחור מנהיג.
- הקוורום מחושב בכל צומתי ZooKeeper בכל מרכזי הנתונים.
- אחרי שהשרת הקודם פועל, ממשיכים בתחזוקה של השרת הבא.
- משתמשים בפקודה
ncכדי לבדוק את צומת ZooKeeper.