תכירו את ZFS

עדכון: בסוף הפוסט יש מספר הערות בעקבות ששאלו אותי מחוץ לבלוג.

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

כל מי שהשתמש בלינוקס בעבר הרחוק, הכיר את המגבלות הגדולות שהיו בכל הקשור לניהול שרתי לינוקס ודיסקים. בעבר לא היה LVM ללינוקס והיית צריך להגדיר דיסקים לאחר שבנית אותם כ-RAID בכרטיס יעודי לכך, היית צריך לפרמט אותם ולהגדיר Partitions לפי צורך מוערך שלך. בהמשך הדרך חברת Sistina Softwareכתבו את LVM ומאוחר יותר חברת Rackable Systems שדרגו את זה ל-LVM2, וה-LVM נתן לך פתרון יותר גמיש: אתה יכול ליצור Physical Volumes שמורכב מדיסק(ים) פיזי(ים) (נקרא PV ובמקומות אחרים זה נקרא גם PG) ואותם אתה יכול לחלק לווליומים לוגיים (LV), ואת ה-LV אתה יכול למפות לתיקייה כלשה. כך לדוגמא אתה יכול ליצור LV שעליו ישבו כל המשתמשים שלך, וב-LV אחר ישב הדאטהבייס שלך, וב-LV נוסף ישב ה-WEB שלך לדוגמא. כל LV אפשר להגדיל ולהקטין בצורה דינמית (אם כי יש מגבלות במיוחד בוירטואליזציה שאם יש לך דיסק יחיד ואתה מגדיל אותו, לא תמיד המערכת יודעת לזהות את הגדילה ולפעמים יש צורך ב-Reboot).

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

ב-Sun (עוד הרבה לפני שאורקל רכשו אותם, ולפיכך אני אתייחס ל-Sun כ-Sun ולא אורקל בכל הפוסט) לא כל כך אהבו את כל הבלאגן הזה, במיוחד הם, שהם מוכרים מפלצות ענקיות וכל ניהול הדיסקים וה-Volumes גורם כאב ראש לא קטן למנהלי סיסטם, ולכן צוות ב-Sun בראשות ג’ף בונוויק ומתיו ארנס החליטו ליצור מערכת קבצים חדשה, רק שהפעם המערכת לא תהיה שדרוג של משהו, אלא היא תוקם מאפס, תוך הפקת לקחם ממערכות קבצים אחרות שהיו ל-Sun ומערכות קבצים אחרות שהיו אצל המתחרים. במשך 5 שנים (מ-2001 עד 2006) היא נכתבה וב-2006 והיא שוחררה לראשונה ב-Build 27 של Open Solaris.

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

ב-ZFS סאן החליטו לעשות משהו רדיקלי ושונה מאוד. הם אמרו: בואו נזרוק את כל מה שיש לנו, את כל ענייני ה-Partitions וכל ניהולי הווליומים, ובדרך גם נזרוק את ה-RAID חומרה (כן, סאן ממש לא ממליצים לעבוד עם מערכי RAID בחומרה ומבקשים שתגדיר את הבקר למצב טיפש של JBOD) כך שאם יש לך שרת שאתה בונה שיהיה שרת קבצים, עדיף שתשים שרת 1U ותקנה JBOD שאליו תדחוף את הדיסקים – ונתחיל מאפס.

בשביל להבין את הפואנטה, נעזוב לרגע את עולם הדיסקים וכו’ ונעבור לעולם ה-RAM. אם יש לך שרת עם 16 ג’יגהבייט ואתה רוצה להרחיב ל-32 ג’יגהבייט זכרון. (אם לא ציינת בפני הספק איך אתה רוצה את הזכרונות, סביר להניח שכשתפתח את השרת, תראה שכל התושבות כבר מלאים במקלות של 1 או 2 ג’יגה, מה שמחייב אותך לרכוש מאפס זכרונות של 4 או 8 ג’יגה, תרגיש חופשי להוציא איזו קללה עסיסית). אתה תקנה זכרונות, תכניס אותם לשרת ואם לא עשית את השטות של להתקין מערכת הפעלה 32 ביט (טוב, למעט לינוקס, שם אפשר להשתמש בקרנל עם PAE אבל את הטריק הזה אי אפשר להשתמש ב-Windows לדוגמא) – המערכת תכיר ישר בזכרון הנוסף ולא תצטרך לבצע מאומה. אולי פה ושם תצטרך לשנות הגדרות של כמות זכרון מוקצית לדברים כמו JVM אבל בתכל’ס לא תצטרך לעשות כלום, והמערכת תשתמש בזכרון ותחלק אותם לאפליקציות.

בחזרה לעולם הדיסקים – וזה העקרון הראשי של ZFS. אתה לא צריך יותר Partitions ואתה לא צריך יותר LVM. הדבר הראשון שאתה מגדיר עם ZFS זה Pool או מה שנקרא Storage Pools ואליו אתה משייך את הדיסקים הקשיחים שלך ואת המערך שאתה רוצה (זוכרים? אין RAID חומרה). מערך הדיסקים יכול להיות בתצורות (אני אציין את הפופולריים, למרות שיש עוד):

  • RAIDZ – לנו זה יותר מוכר כ-RAID-5, כלומר 3 דיסקים או יותר עם בלוקים בתוכם ששומרים את מערך ה-RAID. אחד היתרונות הגדולים של RAIDZ על RAID-5 רגיל הוא שעם ZFS אין בעיה שיכולה לקרות במקרה של הפסקת חשמל/קריסת בקר RAID ושהמערכת לא הספיקה לכתוב את הנתונים על כל הדיסקים. RAIDZ יודע להתמודד יפה מאוד עם הפסקות חשמל וברגע שיחזור החשמל המערכת תדע בדיוק מה נשאר לכתוב וכל כתיבה/קריאה כוללת Checksum כך שבלוק נכתב/נקרא, הוא עובר בדיקה. לא הצליח? המערכת תקרא ממקום אחר ותדע גם לטפל אוטומטית בתקלה. בחלק ממימושי ZFS מחוץ לסולאריס (אני אגיע לכך בהמשך הפוסט) זה נקרא גם raidz1
  • RAIDZ2 – כמו RAIDZ, אבל עם עוד דיסק. זוכרים RAID-6? אותו דבר רק ששוב עניין ה-Checksum יודע למנוע בעיות במקרים של תקלות חשמל/בקר/דיסק וכו’.
  • Mirror – אותו דבר כמו RAID-1, וכפי שציינתי לעיל, יודע לטפל בתקלות.

לאחר שאתה מגדיר Pool אתה מגדיר file system, רק שעם ZFS הקמת ה-file-system היא כזו קלה ופשוטה, והיא כמו הקמת תיקיה חדשה (mkdir) רק ברמת file system, כלומר אתה יכול להקים מיד file system ללא צורך הגדרות גודל, מדוע? כי הכל נמצא ב-Storage pool. זה כמובן לא אומר שאי אפשר להגדיל גדלים, בשביל זה יש לך פרמטר כמו Quota (לעשות thick provisioning) או reservation לבצע Thin Provisioning. כך אתה יכול להגדיר file system עבור המשתמשים עם Thin provisioning או Quota (איך שתרצה) ומכיוון שהכל דינמי ואין צורך בשום מצב לעשות reboot, תוכל להגדיל ולהקטין כמות מקום חופשי כרצונך.

מבחינת הוספת והסרת דיסקים, המערכת ידידותית מאוד. הגדרת דיסק מסויים לעבודה ועכשיו אתה רוצה שהוא יהיה ב-miror? פקודה אחת והמערכת תבצע את השאר. צריך להחליף דיסק? פקודה אחת מורידה את הדיסק למצב Offline כדי שתחליף. רוצה להגדיל את מערך ה-RAIDZ? שוב, פקודה אחת ונגמר העניין.

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

אחד הדברים הנחמדים מאוד במערכת ZFS היא ששום דבר לא נמחק. כל המערכת מבוססת לוגים וכשאתה מוחק או משנה קובץ, המערכת רושמת הכל, כך שאם יצרת מסמך לדוגמא, שינית ושמרת מחדש, המערכת לא מוחקת את הקובץ המקורי אלא היא שומרת את השינויים במקום אחר ואז כשאתה קורא לקובץ, היא קוראת למקור ולשינויים ואתה מקבל קובץ מעודכן. מחקת קובץ? ניתן לשחזר בקלות כי הוא לא נמחק מהדיסק (למרות שהיא מדווחת על כך שהוא נמחק ומפנה מקום בתיאוריה). למה כל זה טוב? כדי שתוכל ליצור snapshots אמינים ותוכל “לנסוע בזמן” כרצונך.

עוד נקודה מאוד חשובה לשרתי פרודקשן היא שהמערכת חכמה לא רק לקבל דיסקים, אלא גם להבין מה הם הדיסקים. יש הבדל ענק בין כונן SSD לכונן SATA פשוט ב-600 שקל ו-ZFS יודע לנצל את סוג הכונן והאחסון כדי לתת את הביצועים הכי טובים בהתחשב במערכת. בתוך ZFS יש פרמטר כמו Cache כך שאתה יכול להוסיף ל-File system דיסק SSD שישמש כ-Cache לקריאה או 2 דיסקים שישמשו Cache לקריאה וכתיבה.

והשאלה גדולה שרבים שואלים: היא יציבה? התשובה היא כן, אחרי 6 ומשהו שנים שחברות רבות משתמשות בה, היא הגיעה לגירסה 33 ב-Solaris נכון להיום, והיא בהחלט מומלצת.

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

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

  • אם אתם רוצים להתנסות אצלכם בבית על המחשב שלכם מבלי לחפור יותר מדי ולשנות דברים, או אם אתם משתמשים בלינוקס וירטואלי, אפשר להתחיל עם ZFS-FUSE. אל תצפו לביצועים מדהימים כי זה ברמה של User ולא ברמה של Kernel, אבל זה מספיק טוב כדי להכיר את המערכת.
  • אם יש לכם מכונה עם מספר דיסקים ואתם רוצים שהיא תשמש כשרת קבצים בבית, אתם מוזמנים לנסות את ZFSOnLinux. כאן מדובר על גירסה שהועברה ישירות מסולאריס ויש גם DEB ו-RPMS והמערכת משתמשת בטריקים כדי להשתמש בתאימות בינארית לסולאריס (על X86) כדי שהקוד ירוץ ברמת Kernel. המערכת גם תומכת ב-DKMS כך שאם אתה חובב גירסאות שונות של Kernel לפי מצב מזג האויר, המערכת תדע לקמפל מודולים אוטומטית בזמן ה-Boot. רבים מדווחים על המערכת הזו כיציבה מאוד.
  • אם בא לכם ללמוד על מערכת הפעלה אחרת שקרובה ללינוקס וגם להתנסות עם ZFS מאוד יציב, כדאי שתכירו את FreeBSD 9.1 או אם אתם רוצים להכיר Solaris אז תכירו את Illumos ותורידו הפצת סולאריס שמתאימה לכם.
  • לחובבי ממשקי GUI/WEB אפשר להוריד ולנסות את Nexenta (בחרו את ה-Community Edition – היא חינמית ומוגבלת בכמה דברים, אבל היא מספיקה בהחלט לשימוש ביתי או מעבדה).

לסיכום: ZFS היא מערכת שונה לחלוטין מכל מה שאתם מכירים. אין לה ממש תחרות (BTRFS רחוקה ממנה מאוד), והיא נותנת המון ויכולה לשמש אתכם ולחסוך כספים רבים.

עדכון: בעקבות מספר שאלות שנשאלתי רציתי להוסיף את הנקודות הבאות:

  1. ZFS אינו מתאים למחשב נייד או למחשב בעל דיסק אחד. ZFS בנוי עבור שרתים ושם רואים את הגדולה שלו. אפשר לבצע כל מיני הגדרות על מנת לעבוד עם ZFS במחשב רגיל עם דיסק יחיד, אבל בסופו של יום, EXT4 יתן תוצאות טובות גם כך.
  2. שימוש ב-ZFS מחוץ ועם Solaris: אורקל לצערי חזרה לסגור את קוד הסולאריס לפני מספר חודשים (מי אמר טמטום מהדהד?) והגירסה האחרונה שקיימת בקוד פתוח היא גירסה 28 בשעה שבאורקל 11 זו גירסה 33. אם אתם משתמשים בסולאריס 11, לא תוכלו לייבא pools מסולאריס 11 למערכות לינוקס עם ZFS או Nexenta או כל גירסת ZFS אחרת, לכן עדיף לעבוד עם ZFS גירסה 28 כדי לקבל תאימות מלאה ולא עם סולאריס 11 (אלא אם אתם משתמשים שרכשתם סולאריס לציודים שלכם).
  3. אם החלטתם לממש ZFS ולהקים שרת קבצים עצבני, ודאו כי אתם עוברים על הלינק הבא כדי לבצע אופטימיזציה. ללא האופטימיזציה, הקריאה תהיה מהירה, הכתיבה תהיה איטית.

Comments

comments

6 תגובות בנושא “תכירו את ZFS

    • קראתי את הפוסט שם ואת המדידות שהוא עשה, אולם כפי שהובהר לבחור מספר פעמים בתגובות, הוא לא הגדיר שום דבר מבחינת מה שהיה צריך להגדיר, והוא השתמש בדיסק יחיד. אפשר להוציא מ-ZFS תוצאות לא רעות על דיסק יחיד עם מגדירים נכון את הדברים, אבל הוא בנוי למערכת מרובת דיסקים, וה-Benchmarks הנ"ל רצים על דיסק יחיד בלי הגדרות, אז זה מה שמקבלים 🙂

  1. שתי הערות :

    1. Rackable System  כבר לא קיימת, היא רכשה את SGI לפני כמה שנים ושינתה את שמה ל SGI

    2. PAE, קיים בווינדוס עוד מ SP2 לווינדוס XP

סגור לתגובות.