אפשרויות טעינה של NFS ב-Linux

בדף הזה מתוארות אפשרויות להרכבת Linux NFS שמשפיעות על הביצועים ועל ההתנהגות כשמרכיבים נפחי NetApp שיוצאו. אתם מגדירים את האפשרויות האלה כשמריצים את הפקודה mount או כשמוסיפים אותן ל-/etc/fstab.

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

דוגמאות לפקודות mount ולגישת ייצוא מופיעות במאמר חיבור לקוחות NFS.

לפני שמתחילים

לפני שמבצעים Mount של NetApp Volumes, צריך לעמוד בדרישות הבאות:

  • אפשר להשתמש בפקודת הטעינה מההוראות לטעינה של Google Cloud המסוף, אלא אם עומס העבודה שלכם דורש אפשרויות שונות.

  • אם אתם משנים את הגדרות הבו-זמניות באמצעות טבלת משבצות או משבצות סשן, אתם צריכים להגדיר את ההגדרות האלה לפני הטעינה. מידע נוסף מופיע במאמר בנושא בו זמניות של Linux NFS.

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

הסבר מהיר

בטבלה הבאה מפורטות אפשרויות נפוצות להרכבה בהתאם ליעדי העומס שלכם:

מטרה אפשרויות שכדאי לבדוק הערות
לשימוש כללי שימוש בהוראות להרכבה על הקיר Google Cloud כולל הגדרות ברירת מחדל שמתאימות לפרוטוקול
תפוקה או IOPS גבוהים יותר ממכונה וירטואלית אחת ‫nconnect=8 עד nconnect=16, כוונון rsize ו-wsize קודם מגדירים את טבלת המשבצות. מידע נוסף זמין במאמר בנושא מקביליות של NFS ב-Linux
זמן טעינה קצר יותר למסדי נתונים rsize=262144, wsize=262144, hard, timeo=600, vers=4.1 בדיקה של האפליקציה הספציפית
ציון גרסת NFS vers=3 או vers=4.1 מערכת Linux מפעילה כברירת מחדל את הגרסה הכי עדכנית שזמינה
‫NFSv3 בלי מנעולי ייעוץ vers=3, nolock הנחיות לגבי חומת אש ומנהל נעילה מפורטות במאמר חיבור לקוחות NFS
‫Kerberos NFSv4.1 ‫sec=krb5, ‏krb5i או krb5p לא לשימוש עם nconnect
נתונים שבעיקר קוראים אותם, עם פשרות ידועות לגבי עקביות nocto, actimeo= מתקדם; חשוב להבין קודם את התנהגות המטמון

תמיד צריך לכלול את tcp כשמפעילים NFSv3. למרות שב-Linux נעשה שימוש ב-TCP לתנועת נתונים של NFS כברירת מחדל, הוספה מפורשת של tcp עוזרת לוודא שתהליך ההרכבה משתמש ב-TCP במקום ב-UDP. כך אפשר לשפר את הביצועים כשמערכות רבות מנסות לבצע פעולת mount בו-זמנית. כדאי להוסיף noatime כדי לצמצם את פעולות המטא-נתונים.

פרופילי ההרכבה הבאים מספקים אפשרויות מומלצות על סמך דרישות הביצועים, גרסאות הפרוטוקול והיקף הלקוחות. כשמריצים את הפקודות האלה, מחליפים את VOLUME_IP ואת /export_path בערכים בפועל מההוראות להרכבה במסוף Google Cloud .

פרופיל א': ברירת מחדל (מסוף)

מריצים את פקודת ההרכבה שמופיעה במסוף Google Cloud ללא שינויים.

פרופיל ב': מכוון לביצועים (לקוח Linux יחיד)

דוגמה ל-NFSv3, בהתאם להגדרת הבדיקה של נקודות השוואה לביצועים:

 sudo mount -t nfs -o hard,tcp,vers=3,rsize=262144,wsize=262144,nconnect=16 \
 VOLUME_IP:/export_path /mnt/volume

נקודות ההשוואה משתמשות ב-nconnect=16 וב-64KiB rsize וב-wsize. עומסי עבודה רבים פועלים היטב עם nconnect=8. בודקים את שני הערכים.

פרופיל ג': NFSv4.1 עם גרסה מפורשת

 sudo mount -t nfs -o vers=4.1,hard,rsize=262144,wsize=262144 \
 VOLUME_IP:/export_path /mnt/volume

כדי למנוע את ההרכבה האוטומטית של NFSv4.2 כשהיא מופעלת בווליום, צריך לציין vers=4.1. מידע נוסף זמין במאמר חיבור של לקוחות NFS.

פרופיל ד': NFSv3 לחוות מחשוב

אם מחברים מספר גדול של לקוחות לנפח אחסון (לדוגמה, מאות), לא משתמשים ב-nconnect כדי למנוע מיצוי של סשני ה-TCP הזמינים בנפח האחסון.

 sudo mount -t nfs -o vers=3,nolock,hard,tcp,rsize=262144,wsize=262144 \
 VOLUME_IP:/export_path /mnt/volume

המשך הפעולה ב-‎ /etc/fstab

בדוגמה הבאה מוצגת שורה בקובץ ‎ /etc/fstab עבור NFSv4.1:

 VOLUME_IP:/export_path  /mnt/volume  nfs  vers=4.1,hard,tcp,rsize=262144,wsize=262144,timeo=600,_netdev  0  0

משתמשים באפשרות _netdev כדי שהמערכת תחכה לחיבור לרשת לפני ההרכבה.

nconnect

אפשרות ההרכבה nconnect מאפשרת לשלוט במספר חיבורי ה-TCP שמופעלים על ידי לקוח ה-NFS לאותה נקודת קצה של אחסון, שהיא כתובת ה-IP של הנפח. כל חיבור מטפל בכמה פעולות NFS בו-זמנית, עד למגבלה מוגדרת. הגדלת מספר החיבורים משפרת את מקביליות הקלט/פלט ואת קצב העברת הנתונים מלקוח יחיד.

המלצות

כדאי לפעול לפי ההמלצות הבאות כשמגדירים את אפשרות ההרכבה nconnect:

  • בודקים את nconnect=8 ואת nconnect=16. המערכת תומכת בערכים עד 16.

  • מומלץ להשתמש ב-nconnect רק עבור לקוחות ייעודיים עם ביצועים גבוהים. אם הרבה לקוחות, למשל חוות מחשוב, מתחברים לאותו אחסון, מומלץ להימנע משימוש ב-nconnect.

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

  • שימו לב: הגדרת nconnect לכתובת IP של נפח אחד לא משפיעה על נקודות הגישה לכתובת IP של נפח אחר.

  • לפני שמשתמשים ב-nconnect, צריך לוודא שהפצת ה-Linux שלכם תומכת בו.

מידע נוסף על מגבלות המשבצות לכל חיבור זמין במאמר בנושא בו זמניות של NFS ב-Linux.

rsize ו-wsize

אפשרויות ההרכבה rsize ו-wsize מגדירות את גודל ההעברה המקסימלי לפעולות קריאה וכתיבה של NFS. אם לא מציינים אותם, הלקוח והשרת מנהלים משא ומתן על הגודל הגדול ביותר ששניהם תומכים בו, שהוא עד 1MiB בלקוחות Linux וב-NetApp Volumes.

המלצות

כשמגדירים את אפשרויות ההרכבה rsize ו-wsize, כדאי להביא בחשבון את ההמלצות הבאות:

  • כדאי לבדוק את rsize=262144 ואת wsize=262144 (‎256 KiB) כדי לשפר את קצב העברת הנתונים ואת זמן האחזור באפליקציות שרגישות לזמן האחזור.

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

  • משתמשים בערכים rsize=65536 ו-wsize=65536 (64KiB) לבדיקות NFSv3, כי הערכים האלה שימשו בנקודות השוואה של ביצועים.

שימו לב שההגדרות האלה משפיעות באופן מינימלי על עומסי עבודה אקראיים, שבדרך כלל משתמשים בגדלים קטנים יותר של פעולות מאשר rsize ו-wsize, בעוד שקלט/פלט רציף דרך מטמון הדפים משתמש לעיתים קרובות בגדלים של פעולות עד rsize ו-wsize.

אפשרות הטעינה rsize משפיעה על התנהגות הקריאה מראש. מידע נוסף זמין במאמר בנושא קריאה מראש ב-Linux NFS.

גרסת הפרוטוקול

בטבלה הבאה מפורטים ערכי האפשרויות vers וגרסאות הפרוטוקול התואמות שלהם:

אפשרות שימוש
vers=3 NFSv3
vers=4.1 NFSv4.1
vers=4.2 NFSv4.2

אם לא מגדירים את vers, הפקודה mount ב-Linux משתמשת בגרסת ה-NFS הגבוהה ביותר שהלקוח והנפח תומכים בה. נפחים מסוג Flex Unified,‏ Standard,‏ Premium ו-Extreme עם NFSv4.1 מופעל תומכים גם ב-NFSv4.2. אפשר לטעון NFSv4.2 אלא אם מציינים vers=4.1.

מידע נוסף על מיפוי זהויות ב-NFSv4.1, על Kerberos ועל מזהים מספריים זמין במאמר חיבור לקוחות NFS.

hard, timeo, and retrans

אפשרויות ההרכבה hard, timeo ו-retrans מנהלות את התנהגות הלקוח ואת הלוגיקה של ניסיון חוזר להפעלה כשמתרחשות בעיות בחיבור:

  • ‫hard: מנסה שוב לשלוח בקשות NFS עד שהן מצליחות. האפשרות הזו טיפוסית לתקינות נתונים בעומסי עבודה של ייצור.

  • ‫timeo: מציין את הזמן הקצוב לתפוגה בעשיריות של שנייה לפני שמנסים שוב לשלוח בקשה. עומסי עבודה שמתמקדים במסדי נתונים משתמשים לעיתים קרובות בערך timeo=600 (60 שניות).

  • ‫retrans: מציין את מספר הניסיונות החוזרים. Google Cloud ברירות המחדל של המסוף בדרך כלל מספיקות, אלא אם צוין אחרת בחוברות ההפעלה.

האפשרות NFSv3 nolock

נעילה מייעצת ב-NFSv3 משתמשת ב-Network Lock Manager (NLM) ודורשת rpc.statd בצד הלקוח וכללי חומת אש ליציאות של קריאה חוזרת. אם לא משתמשים בנעילות מייעצות, צריך להשתמש באפשרות nolock בהרכבה כדי להימנע מתנועה של מנהל הנעילה.

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

מידע נוסף על שימוש בנעילה מייעצת עם NFSv3 ועל כללים של חומת אש לגישה לנפחי NFS זמין במאמר חיבור לקוחות NFS.

מטמון ועקביות באמצעות nocto ו-actimeo

לקוח NFS משתמש במודל עקביות רופף. הטיימרים של מטמון המאפיינים קובעים כמה זמן הלקוח סומך על המטא-נתונים של הקובץ והספרייה לפני שהוא יוצר קשר עם השרת. ההגדרה של עקביות בין סגירה לפתיחה (cto) מרעננת את נתוני הקובץ כשפותחים אותו.

  • ‫nocto: הלקוח לא כופה עקביות של השרת בפתיחה. כך מצמצמים את מספר הקריאות ל-getattr, אבל מגדילים את הסיכון לנתונים לא עדכניים.

  • ‫actimeo=N: מגדיר את כל טיימרים של מטמון המאפיינים ל-N שניות (acregmin, ‏acregmax, ‏acdirmin ו-acdirmax).

כדאי להשתמש בערכים של nocto ומעלה actimeo בתרחישים הבאים:

  • כותב יחיד או צרכנים לקריאה בלבד שמקבלים עדכונים דרך נתיב אחר.

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

ברוב המקרים, כדאי להשתמש בברירות המחדל המומלצות של Linux לזיכרון מטמון של מאפיינים:

  • קבצים רגילים – מינימום ומקסימום: acregmin=3 שניות ו-acregmax=60 שניות

  • המינימום והמקסימום של ספריות: acdirmin=30 שניות ו-acdirmax=60 שניות

הורדת הערכים האלה מגדילה את העומס על שרת ה-NFS ועלולה לפגוע בביצועים. כדאי להימנע משימוש ב-actimeo=0 אלא אם מדובר בתרחישי שימוש ספציפיים מאוד שבהם אתם מבינים את ההשפעה.

אפשרויות נפוצות אחרות

אלו אפשרויות נפוצות אחרות להעלאה שזמינות ללקוחות NFS:

  • ‫rw או ro: טעינה לקריאה וכתיבה או לקריאה בלבד.

  • ‫noatime: לא לעדכן את זמן הגישה בקריאה, כי זה מצמצם את פעולות המטא-נתונים ומומלץ לעשות את זה.

  • ‫sec=sys: AUTH_SYS, שהוא ברירת המחדל לייצוא שאינו Kerberos.

  • ‫_netdev: משתמשים בערך הזה ב-fstab כדי לבצע mount אחרי שהרשת זמינה.

המאמרים הבאים