PracticU

Swarm Cluster - Failover

בלי כתוביותעם כתוביות
PracticU › קורס Docker - עם Swarm Cluster › Swarm Cluster - Failover
מילון מושגים:
קלאסטר - קבוצת מחשבים או שרתים שעובדים יחד כמערכת אחת, לשם זמינות גבוהה, ביצועים או חלוקת עומס.
אחסון - שמירת נתונים באופן קבוע על התקנים כמו דיסקים או שירותי ענן, כך שיישמרו גם לאחר כיבוי.
תיקייה - מכל במערכת הקבצים שמשמש לארגון קבצים ותיקיות אחרות בתוך מבנה היררכי.
רפליקציה - העתקה ושמירה של אותם נתונים ביותר ממקום אחד, לשם זמינות, גיבוי או ביצועים.
Docker - פלטפורמה להרצת אפליקציות בתוך קונטיינרים מבודדים וקלים, כדי שירוצו באופן אחיד בכל סביבה.
מסד נתונים - אוסף מאורגן של נתונים המאוחסן כך שאפשר לשמור, לחפש, לעדכן ולשלוף אותו ביעילות, לרוב באמצעות שפת שאילתות.
נתיב - מחרוזת שמתארת את מיקומו של קובץ או תיקייה במערכת הקבצים, או כתובת של משאב בתוך אתר.
שיתוף - תיקייה או משאב שהועמדו לרשת כדי שמשתמשים אחרים יוכלו לגשת אליהם לפי הרשאות.

Swarm Cluster - Failover
הרצאה על חיבור השירותים לאחסון משותף בקלאסטר, על התקלות שעלו בדרך, ועל ניסוי מפורט של נפילת נוד ושל שירות מסד הנתונים.
השלבים העיקריים
1. אחסון משותף: תיקייה /mnt פרוסה על כל הנודים באמצעות רפליקציה. קובץ שנכתב בנוד אחד מופיע בנודים האחרים, ולכן מסד הנתונים והווורדפרס לא תלויים במחשב מסוים.
2. החזרת נוד לפעילות: נוד במצב drain לא מקבל משימות חדשות. docker node update --availability active מחזיר אותו לפעילות.
3. שירות מסד נתונים עם bind mount: מוסיפים --mount type=bind עם תיקייה באחסון המשותף. התיקייה לא הייתה קיימת, והקלאסטר ניסה שוב ושוב להקים משימה שנכשלה עם השגיאה bind source path does not exist. אחרי יצירת התיקייה השירות עלה.
4. שירות וורדפרס: גם הוא מחובר לתיקייה משותפת, כך שכל נוד קורא את קבצי האתר מאותו מקום. docker service ps מראה את מצב כל משימה, ו-docker service inspect מציג את הפרטים הטכניים שלה.
5. ניתוב בין הנודים בעזרת DNS: לשם www יש שלוש כתובות IP. בכל שאילתה הסדר מתחלף, וכל לקוח מקבל כתובת ראשונה אחרת. זה ראונד רובין שמפזר עומס, אבל אין בו בדיקת תקינות, ולכן לקוחות ממשיכים להתחבר לשרת שנפל.
פקודות והגדרות
docker node update --availability active ubuntu1, docker service create --mount type=bind,..., docker service ps, docker service inspect. ההרצאה השתמשה גם ב-watch על docker service ls כדי לעקוב אחרי השינויים בזמן אמת.
שימו לב
ניתוק כרטיס הרשת בנוד הראשון הפיל את הגישה לאחסון באותו נוד. כשמיעוט הנודים מתנתק מהרוב, הוא מוריד את עצמו כדי למנוע מצב של שני מקורות כתיבה נפרדים (split brain). הרוב ממשיך לעבוד והקלאסטר מפזר מחדש את המשימות. הלקוחות חוו השהיה עד שהמעבר הסתיים.
נפילת שירות מסד הנתונים הייתה הניסוי הקשה ביותר. ההמתנה נבעה מכך שמשימה חדשה לא מתחילה לפני שהמשימה הישנה הגיעה למצב shutdown, ורק אז הוורדפרס התחבר שוב למסד.
בסיום רואים איך קלאסטר שומר על שירות גם כשנוד נופל, ומהו משך ההשבתה בפועל.
השיעור הבא בקורס: Swarm - Label Constraint

פרקי ההרצאה: Swarm Cluster - Failover

  1. 00:00

    חיבור הדאטאבייס לאחסון משותף

  2. 00:41

    בדיקת רפליקציה של תיקיית האחסון

  3. 02:19

    הפעלת נוד שנמצא במצב Drain

  4. 03:56

    הרצת כלי ויזואליזציה בקלאסטר

  5. 05:15

    הגדרת שירות MySQL עם משתני סביבה

  6. 06:30

    שגיאת Bind Path כשהתיקייה לא קיימת

  7. 08:53

    בדיקת המשימות של השירות עם inspect

  8. 13:54

    יצירת התיקייה ושמירת הקבצים באחסון

תמלול ההרצאה: Swarm Cluster - Failover

הטקסט המלא של הדקות הראשונות בהרצאה «Swarm Cluster - Failover» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

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

  2. 00:22

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

  3. 00:33

    אני מזכיר לכם שה- storage שלנו נמצא תחת mnt ובואו נעשה דבר כזה, קודם כל אני מדגים לכם שהוא נמצא ברפליקציה אם נעשה echo a1 b2 c3 שלושה סימני קריאה שלושה שטרודלים וכל זה לתוך קובץ test.txt מה הוא לא מצא event not found הוא פירש את זה כסימנים מיוחדים בואו נעשה לזה טעם כזה דבר ונעשה עכשיו cut ונראה שזה באמת נשמר שמה.

  4. 01:33

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

  5. 01:56

    cut ל-MNT טסט. אנחנו רואים שהכל עובר והכל עובד כמו שצריך, ואם נעשה aaa לתוך mnt-test אנחנו נראה שזה באמת עובר ברפליקציה לכל שאר התחנות. יפה מאוד, עכשיו כשהסטורייץ שלנו עובד אנחנו יכולים להתחיל להגדיר קלאסטר ואני שם לב שיש לי פה מההרצאה הקודמת אובונטו 1 נמצא ב-drain, נורד 1 נמצא במצב של דריין, מה זה דריין? שהוא לא

  6. 02:32

    מוכן לקבל משימות חדשות, שהוא לא מוכן לקבל טאסקים חדשים וכל מה שיש עליו צריך להעיף ממנו הולכים להוריד אותו עוד מעט בניגוד ל-Active, Active אומר שהוא מוכן לקבל משימות חדשות ולהריץ קונטיינרים חדשים שאפשר לתזמן עליו משימות חדשות Taskים שהופכים לקונטיינרים אז ה-Drain הזה לא מקובל עליי

  7. 02:57

    כי אני רוצה להריץ עליו קונטיינרים אז אנחנו עושים docker node update == help == ורואים פה availability availability active, אוקיי? availability active, אתם או active או pause או drain.

  8. 03:16

    pause, דרך אגב, אומר שהוא ממשיך להריץ את מה שיש, אבל לא מקבל משימות חדשות, קונטיינרים חדשים להרצה. ועל מי אנחנו רוצים?

  9. 03:26

    על איזה נוד אנחנו רוצים? אנחנו רוצים על נוד בשם Ubuntu 1. בואו נראה שזה באמת עבד לנו. הנה, זה הפך ל-active. מצוין.

  10. 03:41

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

  11. 03:58

    דבר ראשון, אני שם ויז'ואליז'טור שיהיה לנו כלי גרפי, מה שראינו לפני כן, docker service create יוצר סרוויס בשם viz בפורט 8080 שעובד רק constraint, זה אומר מגבלה, הוא מוגבל רק למנאג'ר, נוד רול מנאג'ר, אני יכול לעשות מגבלות לפי תוויות ותכף נראה את זה.

  12. 04:24

    ו-Mount Type ומחבר לו Volume Storage מסוג Bind, זה אומר שהוא קיים. Source VAR Docker SOC, שזה כל המידע על ה-Docker הלוקאלי אצלי במנג'ר, לתוך VAR RAN Docker SOC בתוך הקונטיינר הווירטואלי, וזה מה שראינו כבר בהרצאות קודמות, יש לנו סרוויס ראשון.

  13. 04:49

    עכשיו אנחנו רוצים באותה שיטה גם לחבר את ה-Database נכון? הסרוויס של הדאטאבייס נו לוקח לו קצת זמן אנחנו רוצים לחבר את המיי sql יופי עם זה סיימנו עכשיו רוצים את הדאטאבייס שימו לב לגבי דאטאבייס אנחנו עושים פקודת docker service create זה כאילו הכל רשום

  14. 05:24

    באותה שורה השם של הסרוויס יהיה db service השם של הנטוורק יהיה מיי נטוורק עשינו לפני כן רשת מסוג overlay שפורסה על כל אלו כל אלו ראינו משתני סביבה עם איזה פסוורד אנחנו מריצים דרך אגב מה sql 5.7 וזה הטריק שרציתי להראות לכם תעשה מעונד לתיקייה אוי שכחתי ליצור אותה צריך ליצור אותה ודיסטנשן כזה וכזה אני מחבר אצלי בהרדיסק בתוך mnt

  15. 05:59

    מה sql ואצלי בהרדיסק mnt מה sql ירוץ ברפליקציה לכולם אתם רואים זה ירוץ ברפליקציה לכולם שכחתי ליצור את התיקייה הזאת בוא נעשה לזה קופי וואר לי מה sql זה בפנים שמה ב read only false זה אומר שיהיה read-write.

  16. 06:20

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

  17. 06:35

    שימו לב, אני בא להריץ את זה. בגלל שאין לי את התיקייה הזאת, הוא לא יצליח. תראו, הוא לא יצליח. invalid mount config bind. bind לא יודע ליצור תיקייה שלא קיימת.

  18. 06:49

    bind path does not exist. והנה הוא תקוע, מנסה שוב ותקוע ומנסה שוב ותקוע זו דוגמה מצוינת אתם רואים הוא אומר docker הוא אומר operation continuing in background זה רץ ברקע אתה רוצה להתעדכן תעשה docker service ps לפי הזה אז בוא נעשה docker service ls אנחנו נראה שהוא עשה לנו את הservice של db service אבל הוא לא הצליח להקים אף אחד 0 קונטיינרים

  19. 07:22

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

  20. 07:38

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

  21. 07:48

    הוא מקים עוד משימה, היא עוד פעם נכשלת. כל פעם הוא מקים טאסק, הוראות ביצוע, וכל פעם זה נכשל. אתם רואים? לפני 23 שניות, 18 שניות. אבל הוא מקים טאסקים שונים עד שהוא לא יצליח אוקיי ואתם רואים כמה שמה המצב של כל טאסק זה הוראה לביצוע ויש פה הודעת שגיאה invalid mount config type וכולי וכולי וזה היסטוריה בוא נראה מה יש לנו פה no trunk אנחנו יכולים לעשות ולראות את כל הפירוש של

  22. 08:26

    הסיפור הזה no trunk אנחנו רואים פה invalid mount bind bind source path does not exist mnt msql אתם רואים הוא לא מצליח והוא מנסה לעשות את זה שימו לב כבר חמש פעמים ניסה בוא נעשה mkdir ניצור לו תיקייה לפני שאני עוצר את זה אתם יודעים מה אני רוצה לנצל את ההזדמנות הזאת ולעשות docker inspect כדי להראות לכם מה זה המשימות אז נניח ניקח את המשימה לא יודע

  23. 09:04

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

  24. 09:33

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

  25. 09:42

    דוקר אינספקט, מה קרה לו? דוקר אינספקט, בואו ניקח את המשימה הזאת. הנה, זה דוקר אינספקט של המשימה, אנחנו רואים מה המשימה הזאת שהוטלה עליו.

  26. 10:11

    אנחנו רואים קודם כל זה מספר סידורי של כל עדכון שמתבצע בקלאסטר המספר עולה ב-1 ככה תחנות בין הקלאסטר כאילו נודים יודעים מה הדבר האחרון שקרה זו גרסה גלובלית אחרונה רואים אימג' איזה אימג' איזה משתנה סביבה זה משימה להקים את הקונטיינר שלא בוצע init mounts שימו לב פה כתוב

  27. 10:41

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

  28. 11:15

    אז אומרים רק להריץ על נוד מסוג לינוקס ו-DesireState שלה, שימו לב, בגלל שזה נכשל, הוא רוצה שעכשיו זה יהיה כבוי, שהקונטיינר יהיה כבוי.

  29. 11:35

    הוא החליט שהסטטוס שלה Rejected, כאילו הנוד דחה אותה, הסטטוס Rejected, ועכשיו ה-DesireState, המצב הרצוי של הקונטיינר שאמור להיות צמוד אליו, זה ShutDown.

  30. 11:49

    כאילו הוא הפך את ה-DesireState למצב של ShutDown, ויש פה עוד כל מיני הגדרות, כמו להתחבר לרשת זאת ואיזה IP שימו לב המנאג'ר נתן לנו הקציב לו IP אתם רואים 3.131 אתם רואים דרך אגב הוא לכל משימה מקציב IP שזה גם מאוד מאוד חשוב איזה משימה עשינו OD 5 סתם נתפוס עכשיו משימה אחרת שימו לב הוא

  31. 12:25

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

  32. 13:14

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

  33. 13:45

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

  34. 14:18

    בואו תראו, הנה, ראיתם? הוא התחיל לשים לשם את הקבצים. הנה הוא שם, אתם רואים? הנה הוא שם קבצים. יפה מאוד, ממש הקונטיינר עולה ושם את הקבצים בסטורייץ' שלנו.

  35. 14:31

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

לקורס המלא: קורס Docker עם Swarm Cluster

ההרצאה הקודמת: התקנת Wordpress בתוך Swarm Cluster

ההרצאה הבאה: Swarm - Label Constraint

הרצאות קשורות מקורסים אחרים

  • הגדרת Failover Cluster ISCSI
  • סיכום ב-3 דקות - Cluster NLB + Failover
  • הרצאה על FortiGate HA Cluster
  • מעבר לאתר DR - Veeam Failover

קורסים נוספים במסלול

  • קורס AWS - ניהול מכונה וירטואלית בענן
  • קורס Terraform - DevOps - Azure & AWS
  • קורס קוברנטיקס - Kubernetes
  • קורס DevOps - Ansible
  • קורס PowerShell
  • קורס Git ו-GitHub עם Visual Studio