העברת נתונים אל Cloud Storage או ממנו

אפשר לייבא נתונים אל Google Cloud Managed Lustre מ-Cloud Storage ולייצא נתונים אל Cloud Storage. העברות הנתונים הן מצטברות. המערכת מעתיקה רק קבצים שלא קיימים כבר ביעד, או קבצים שהשתנו מאז שהועברו.

קטגוריות של Cloud Storage עם מרחב שמות היררכי מופעל מספקות מהירויות העברה מהירות יותר אל Managed Lustre וממנו בהשוואה לקטגוריות רגילות.

ביצועים

העברות בין Managed Lustre לבין Cloud Storage יכולות להגיע למהירויות הבאות:

  • לקבצים שגדולים מ-32MB, עד 100GBps. מהירות ההעברה מוגבלת על ידי התפוקה המקסימלית של מופע (קיבולת המופע כפול רמת הביצועים).

שיקולים לגבי רוחב פס של תעבורת נתונים יוצאת ב-Cloud Storage

‫Cloud Storage מספק רוחב פס יוצא (egress) כברירת מחדל של עד ‎200 Gbps לכל אזור לכל פרויקט. אם יש לכם כמה מופעים של Managed Lustre באותו פרויקט ובאותו אזור, אתם יכולים לבקש להגדיל את מגבלת רוחב הפס של תעבורת הנתונים היוצאת (egress). מידע נוסף זמין במאמר בנושא מכסות רוחב פס ב-Cloud Storage.

ההרשאות הנדרשות

הרשאות להפעלת ההעברה

למשתמש או לחשבון השירות שמשמשים להפעלת ההעברה נדרשות ההרשאות הבאות:

  • lustre.instances.exportData כדי להעביר מ-Managed Lustre ל-Cloud Storage.
  • lustre.instances.importData כדי להעביר מ-Cloud Storage.

שתי ההרשאות האלה ניתנות עם התפקיד roles/lustre.admin. אתם יכולים ליצור תפקיד בהתאמה אישית כדי להעניק הרשאות באופן עצמאי.

הרשאות לסוכן השירות של Managed Lustre

‫Managed Lustre משתמש בסוכן שירות כדי לגשת לקטגוריות של Cloud Storage בשמכם. כדי לבצע העברות, צריך להעניק לסוכן השירות גישה למאגר היעד.

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

מתן הרשאות

סוכן השירות של Managed Lustre צריך אחת מההרשאות הבאות ב-Cloud Storage:

  • כדי להעביר נתונים אל Cloud Storage וממנו: roles/storage.objectUser בקטגוריה של Cloud Storage.
  • כדי להעביר רק מ-Cloud Storage: roles/storage.objectViewer בקטגוריה של Cloud Storage.

כדי להעניק אחד מהתפקידים האלה:

ייבוא וייצוא

מריצים את הפקודה הבאה gcloud:

gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
  --member=serviceAccount:SERVICE_AGENT_IDENTITY \
  --role=roles/storage.objectUser

ייבוא בלבד

מריצים את הפקודה הבאה gcloud:

gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
  --member=serviceAccount:SERVICE_AGENT_IDENTITY \
  --role=roles/storage.objectViewer

מחליפים את מה שכתוב בשדות הבאים:

  • BUCKET_NAME: שם הקטגוריה של Cloud Storage.
  • SERVICE_AGENT_IDENTITY: זהות הסוכן של שירות Managed Lustre ‏ (service-<var>PROJECT_NUMBER</var>@gcp-sa-lustre.iam.gserviceaccount.com).

ייבוא נתונים ל-Managed Lustre

אפשר לייבא נתונים מקטגוריה של Cloud Storage. הקטגוריה יכולה להיות באותו פרויקט או בפרויקט אחר. ה-bucket יכול להיות באזור או באזור זמינות אחרים ממופע Managed Lustre, אבל העברות בין אזורים
יכולות להיות איטיות יותר מהעברות בתוך אזור.

gcloud

gcloud lustre instances import-data INSTANCE_ID \
  --location=LOCATION \
  --gcs-path-uri=gs://BUCKET_NAME/ \
  --lustre-path=PS_PATH

כאשר:

  • INSTANCE_ID הוא שם המכונה שלכם ב-Managed Lustre.
  • --location הוא האזור של מכונת Managed Lustre. לדוגמה, us-central1-a.
  • --gcs-path-uri מציין את ה-URI של קטגוריה של Cloud Storage או נתיב בתוך קטגוריה, בפורמט gs://<bucket_name>/<optional_path_inside_bucket>/. אם מציינים נתיב בתוך הדלי, הוא חייב להסתיים בלוכסן (/).
  • --lustre-path מציין את נתיב תיקיית השורש למערכת הקבצים Managed Lustre. חייב להתחיל ב-/. ערך ברירת המחדל הוא /. אם מציינים ערך שונה מערך ברירת המחדל, הספרייה צריכה כבר להיות קיימת במערכת הקבצים.

הפרמטרים הבאים הם אופציונליים:

  • --request-id מאפשר להקצות מזהה ייחודי לבקשה הזו. אם תנסו לשלוח את הבקשה הזו שוב באמצעות אותו מזהה בקשה, השרת יתעלם מהבקשה אם היא כבר הושלמה. חייב להיות UUID תקין שלא מורכב מאפסים בלבד.
  • --async מחזירה תגובה באופן מיידי, בלי להמתין לסיום הפעולה.

מידע נוסף מופיע במאמרי העזרה בנושא Cloud SDK.

REST

POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:importData
Authorization: Bearer [YOUR_ACCESS_TOKEN]

{
  "gcsPath" : {
    "uri" : "gs://BUCKET_NAME/"
  },
  "lustrePath" : {
    "path" : "/PATH"
  }
}

כאשר:

  • PROJECT_ID הוא Google Cloud שם הפרויקט.
  • LOCATION הוא האזור של מכונת Managed Lustre. לדוגמה, us-central1-a.
  • INSTANCE_ID הוא שם המכונה שלכם ב-Managed Lustre.
  • gcsPath מכיל מפתח uri שהערך שלו מציין את ה-URI של קטגוריה של Cloud Storage, או נתיב בתוך קטגוריה, בפורמט gs://<bucket_name>/<optional_path_inside_bucket>/. אם מציינים נתיב בתוך הדלי, הוא חייב להסתיים בלוכסן (/).
  • lustrePath מכיל מפתח path שהערך שלו מציין את הנתיב של ספריית הבסיס למערכת הקבצים של Managed Lustre. חייב להתחיל ב-/. ברירת המחדל היא /. אם מציינים ערך שונה מערך ברירת המחדל, הספרייה צריכה כבר להיות קיימת במערכת הקבצים.

כדי להשתמש בחשבון שירות משלכם במקום בסוכן שירות בניהול Google, הבקשה תומכת בשדה serviceAccount באובייקט JSON:

"serviceAccount" : "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_ID"

פקודת curl לדוגמה נראית כך:

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:importData \
  -d '{"gcsPath": {"uri":"gs://BUCKET_NAME/"}, "lustrePath": {"path":"/"}}'

מאפייני קובץ

כשמייבאים נתונים מקטגוריה של Cloud Storage למכונה ב-Managed Lustre, מאפייני הקובץ במכונה ב-Managed Lustre מוגדרים באחת משתי דרכים:

  • אם לאובייקט ב-Cloud Storage יש מטא-נתונים מותאמים אישית כמו שמתואר בייצוא נתונים, אז:
    • ה-UID, ה-GID, המצב ו-mtime של הקובץ מוגדרים על סמך המטא-נתונים המותאמים אישית של האובייקט.
    • הערך של atime בקובץ זהה לערך של mtime.
  • אם לאובייקט ב-Cloud Storage אין מטא-נתונים מותאמים אישית, אז:
    • מזהה המשתמש (UID) ומזהה הקבוצה (GID) של הקובץ מוגדרים ל-0 (root).
    • המצב של הקובץ מוגדר ל-rwxr-xr-x (755).
    • הערכים של atime ו-mtime בקובץ מוגדרים לזמן היצירה של האובייקט ב-Cloud Storage.

בכל מקרה:

  • הערך ctime של קובץ מוגדר לזמן שבו הקובץ נכתב במופע.
  • הערכים atime, ‏ctime ו-mtime של ספרייה מוגדרים לזמן שבו הספרייה נוצרה במופע.

ייצוא נתונים

אתם יכולים לייצא נתונים ממופע Managed Lustre לקטגוריה של Cloud Storage באותו פרויקט או בפרויקט אחר. ה-bucket יכול להיות באזור או באזור זמינות שונים מהמופע של Managed Lustre, אבל העברות בין אזורים עשויות להיות איטיות יותר מהעברות בתוך אזור.

gcloud

gcloud lustre instances export-data \
  INSTANCE_ID \
  --location=LOCATION \
  --gcs-path-uri="gs://BUCKET_NAME/" \
  --lustre-path="/"

כאשר:

  • INSTANCE_ID הוא השם של מכונת Managed Lustre.
  • --location הוא האזור של מכונת Managed Lustre. לדוגמה, us-central1-a.
  • --gcs-path-uri מציין את ה-URI לקטגוריה של Cloud Storage, או נתיב בתוך קטגוריה, בפורמט gs://<bucket_name>/<optional_path_inside_bucket>/. אם מציינים נתיב בתוך הדלי, הוא חייב להסתיים בלוכסן (/).
  • --lustre-path מציין את הנתיב של ספריית הבסיס למערכת הקבצים של Managed Lustre. חייב להתחיל ב-/. ערך ברירת המחדל הוא /.

הפרמטרים הבאים הם אופציונליים:

  • --request-id מאפשר להקצות מזהה ייחודי לבקשה הזו. אם תנסו לשלוח את הבקשה הזו שוב באמצעות אותו מזהה בקשה, השרת יתעלם מהבקשה אם היא כבר הושלמה. חייב להיות UUID תקין שלא מורכב מאפסים בלבד.
  • --async מחזירה תגובה באופן מיידי, בלי להמתין לסיום הפעולה.

REST

POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:exportData
Authorization: Bearer [YOUR_ACCESS_TOKEN]

{
  "lustrePath" : {
    "path" : "/"
  },
  "gcsPath" : {
    "uri" : "gs://BUCKET_NAME/"
  }
}

כאשר:

  • PROJECT_ID הוא שם הפרויקט. Google Cloud
  • INSTANCE_ID הוא שם המכונה שלכם ב-Managed Lustre.
  • LOCATION הוא האזור של מכונת Managed Lustre. לדוגמה, us-central1-a.
  • lustrePath מכיל מפתח path שהערך שלו מציין את הנתיב של ספריית הבסיס למערכת הקבצים של Managed Lustre. חייב להתחיל ב-/. ברירת המחדל היא /.
  • gcsPath מכיל מפתח uri שהערך שלו מציין את ה-URI של קטגוריה של Cloud Storage, או נתיב בתוך קטגוריה, בפורמט gs://<bucket_name>/<optional_path_inside_bucket>/. אם מציינים נתיב בתוך הדלי, הוא חייב להסתיים בלוכסן (/).

כדי להשתמש בחשבון שירות משלכם במקום בסוכן שירות בניהול Google, הבקשה תומכת בשדה serviceAccount באובייקט JSON:

"serviceAccount" : "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_ID"

פקודת curl לדוגמה נראית כך:

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json"
  https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:exportData \
  -d '{"lustrePath": {"path":"/"}, "gcsPath": {"uri":"gs://BUCKET_NAME/"}}'

מאפייני קובץ

כשמייצאים נתונים ממופע Managed Lustre לקטגוריה של Cloud Storage, מאפייני הקובץ הבאים נשמרים כמטא-נתונים בהתאמה אישית ב-Cloud Storage:

  • ה-UID של הקובץ מאוחסן עם המפתח goog-reserved-posix-uid.
  • מזהה הקובץ (GID) מאוחסן עם המפתח goog-reserved-posix-gid.
  • המספר של מצב הקובץ מאוחסן עם המפתח goog-reserved-posix-mode.
  • ה-mtime של הקובץ מאוחסן עם המפתח goog-reserved-file-mtime.

שמות המפתחות של המטא-נתונים המותאמים אישית זהים לאלה שמשמשים את Storage Transfer Service להעברות עם מערכות קבצים של POSIX.

מאפייני הקובץ הבאים לא נשמרים:

  • קישורי סמליים לא נשמרים.
  • קישורים קשיחים מיוצאים כאובייקטים נפרדים ב-Cloud Storage, ולכן נוצרים כמה עותקים.
  • הגדרת פסי ברק באופן מפורש באמצעות lfs setstripe או lfs setdirstripe לא נשמרת.
  • השמות atime ו-ctime של הקבצים לא נשמרים.
  • הסדרmtime של הספריות לא נשמר.
  • ספריות ריקות לא נשמרות.

קבלת פעולה

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

  • operation-1234567890123-6127783ad26ea-88913969-02748053

gcloud

gcloud lustre operations describe OPERATION_ID \
  --location=LOCATION

REST

GET https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID
Authorization: Bearer [YOUR_ACCESS_TOKEN]

פקודת curl לדוגמה נראית כך:

curl -X GET \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID

ביטול פעולה

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

  • operation-1234567890123-6127783ad26ea-88913969-02748053

gcloud

gcloud lustre operations cancel OPERATION_ID \
  --location=LOCATION

REST

POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID:cancel
Authorization: Bearer [YOUR_ACCESS_TOKEN]

פקודת curl לדוגמה נראית כך:

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID:cancel

מגבלות

ההגבלות הבאות חלות:

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

    ERROR: (gcloud.lustre.instances.export-data) ABORTED: unable to queue the operation
    

פתרון בעיות

כשמייבאים נתונים מ-Cloud Storage או מייצאים נתונים ל-Cloud Storage, יכול להיות שתיתקלו בהפסקות בהעברה, בבעיות הרשאה או בקבצים שדילגו עליהם. כדי לאבחן ולפתור בעיות נפוצות בהעברת נתונים, מבצעים את השלבים הבאים.

העברה נתקעת או מהירויות תעבורת נתונים יוצאת איטיות

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

  • מגבלות רוחב פס של תעבורת נתונים יוצאת (egress) ב-Cloud Storage: ב-Cloud Storage יש מכסת ברירת מחדל של רוחב פס לתעבורת נתונים יוצאת (egress) של עד ‎200 Gbps לכל אזור לכל פרויקט. אם כמה מקרים או עומסי עבודה עם תפוקה גבוהה מעבירים נתונים בו-זמנית, יכול להיות שתגיעו למצב של צוואר בקבוק בגלל המכסה הזו. כדי לבקש הגדלה של המכסה, אפשר לעיין במאמר בנושא מכסות רוחב פס ב-Cloud Storage.
  • מגבלות התפוקה של המכונה: מהירויות ההעברה מוגבלות על ידי קיבולת התפוקה המקסימלית של המכונה (הקיבולת של המכונה כפול רמת הביצועים שלה). כדאי לבדוק את רמת הביצועים של המופע כדי לוודא שהיא תואמת לציפיות שלכם לגבי הביצועים.

שגיאות הרשאה במהלך הפעלת ההעברה

אם התחלת ההעברה נכשלת בגלל שגיאת הרשאה או שגיאת אימות, צריך לבדוק את תפקידי ה-IAM הבאים:

  • הרשאות של משתמשים וחשבונות שירות: לזהות שמפעילה את פקודת ההעברה צריכות להיות ההרשאות lustre.instances.importData (לייבוא) או lustre.instances.exportData (לייצוא). ההרשאות האלה כלולות בתפקיד roles/lustre.admin.
  • הרשאות של סוכן שירות: לסוכן השירות של Managed Lustre בניהול Google‏ (service-<PROJECT_NUMBER>@gcp-sa-lustre...) צריכות להיות הרשאות roles/storage.objectViewer (לייבוא) או roles/storage.objectUser (לייצוא) בקטגוריית Cloud Storage של היעד. הוראות מפורטות להגדרה מופיעות במאמר בנושא הענקת הרשאות לסוכן השירות.

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

העברות נתונים של Managed Lustre הן מצטברות. הן מעתיקות רק קבצים שלא קיימים ביעד או שהשתנו מאז ההעברה האחרונה.

  • אם נראה שהמערכת דילגה על קבצים, צריך לוודא שהם כבר הועברו בהצלחה בעבר ולא בוצעו בהם שינויים.
  • כשמייצאים נתונים ל-Cloud Storage, המטא-נתונים של POSIX (UID,‏ GID,‏ mode,‏ mtime) נשמרים באמצעות מפתחות מטא-נתונים מותאמים אישית (לדוגמה, goog-reserved-posix-uid). שימו לב שקישורים סמליים, ספריות ריקות ופריסות מפורשות של חלוקת PFL לא נשמרים במהלך הייצוא. פרטים מלאים מופיעים במאמר בנושא העברת מאפיינים של קובצי נתונים.

בדיקת פעולות העברה שנכשלו

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

gcloud lustre operations describe OPERATION_ID \
  --location=LOCATION

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

אי אפשר להוסיף את הפעולה לתור

אם מופיעה שגיאה דומה לאחת מהשגיאות הבאות כשמנסים להתחיל פעולה:

ERROR: (gcloud.lustre.instances.import-data) ABORTED: unable to queue the operation
ERROR: (gcloud.lustre.instances.export-data) ABORTED: unable to queue the operation
ERROR: (gcloud.lustre.instances.update) ABORTED: unable to queue the operation

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

  • ייבוא/ייצוא: ב-Managed Lustre אפשר להפעיל רק פעולת העברה אחת בכל מכונה בכל פעם. אין תמיכה בהוספה לתור של פעולות העברה.
  • עדכון מכונה: ב-Managed Lustre אפשר לבצע עדכון פעיל אחד לכל מכונה בכל פעם, ואפשר להוסיף עוד פעולת עדכון לתור.

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

FILESYSTEM_NO_SPACE_ON_DEVICE שגיאות

אם ההעברה מחזירה שגיאה FILESYSTEM_NO_SPACE_ON_DEVICE, למרות שכלי המעקב מציינים שיש עדיין מקום פנוי כולל, יכול להיות שאתם נתקלים בחוסר איזון ב-OST, במענקי מקום ללקוח או במיצוי של inode. מידע נוסף ופתרונות אפשריים מופיעים במאמר בנושא שגיאות No space left on device.