מערכי 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. קוורום פירושו שיותר ממחצית מכל צמתי 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 היא לבצע אותה בצומת אחד בכל פעם. זכרו:
- כדי להבטיח שקבוצת ZooKeeper תמשיך לפעול, צריך לשמור על קוורום של צומתי הצבעה במהלך התחזוקה.
- הסרה של צומת צופה לא משפיעה על הקוורום או על היכולת לבחור מנהיג.
- הקוורום מחושב בכל צומתי ZooKeeper בכל מרכזי הנתונים.
- אחרי שהשרת הקודם פועל, ממשיכים בתחזוקה של השרת הבא.
- משתמשים בפקודה
ncכדי לבדוק את צומת ZooKeeper.