ב-Google Cloud Managed Lustre אפשר לייבא נתונים מ-Cloud Storage ולייצא אליו נתונים. העברות הנתונים הן מצטברות. המערכת מעתיקה רק קבצים שלא קיימים כבר ביעד, או קבצים שהשתנו מאז שהועברו.
קטגוריות של Cloud Storage עם מרחב שמות היררכי מופעל מספקות מהירויות העברה מהירות יותר אל Managed Lustre וממנו בהשוואה לקטגוריות רגילות.
ביצועים
העברות בין Managed Lustre לבין Cloud Storage יכולות להגיע למהירויות הבאות:
- לקבצים שגדולים מ-32MB, עד 100GBps. מהירות ההעברה מוגבלת על ידי התפוקה המקסימלית של מופע (קיבולת המופע כפול רמת הביצועים).
שיקולים לגבי רוחב פס של תעבורת נתונים יוצאת ב-Cloud Storage
Cloud Storage מספק רוחב פס יוצא (egress) כברירת מחדל של עד 200 Gbps לכל אזור לכל פרויקט. אם יש לכם כמה מופעים של Managed Lustre באותו פרויקט ובאותו אזור, אתם יכולים לבקש להגדיל את מגבלת רוחב הפס של התעבורה היוצאת. מידע נוסף זמין במאמר בנושא מכסות רוחב פס ב-Cloud Storage.
ההרשאות הנדרשות
הרשאות להפעלת ההעברה
למשתמש או לחשבון השירות שמשמשים להפעלת ההעברה נדרשות ההרשאות הבאות:
-
lustre.instances.exportDataכדי להעביר מ-Managed Lustre ל-Cloud Storage. -
lustre.instances.importDataכדי להעביר מ-Cloud Storage.
שתי ההרשאות האלה ניתנות עם התפקיד roles/lustre.admin. אתם יכולים ליצור תפקיד בהתאמה אישית כדי להעניק הרשאות באופן עצמאי.
הרשאות לסוכן השירות של Managed Lustre
איך מוצאים את סוכן השירות של Managed Lustre
סוכן שירות של Managed Lustre נוצר בפעם הראשונה שיוצרים מכונה של Managed Lustre בפרויקט. הזהות של הסוכן של השירות היא בתבנית service-PROJECT_NUMBER@gcp-sa-lustre.iam.gserviceaccount.com.
אם עדיין אין לכם סוכן שירות של Managed Lustre
מריצים את הפקודה
services identity create:gcloud beta services identity create \ --service=lustre.googleapis.com \ --project=PROJECT_NUMBER_OR_IDמחליפים את PROJECT_NUMBER_OR_ID במספר הפרויקט או במזהה הפרויקט שבו רוצים ליצור את מופע Managed Lustre. הפלט אמור להיראות כך:
Service identity created: service-1234567890@gcp-sa-lustre.iam.gserviceaccount.comמעתיקים את הערך של זהות סוכן השירות כדי להשתמש בו בשלב הבא.
אם כבר יצרתם מכונה של Managed Lustre
כדי ליצור את הזהות של סוכן השירות, צריך לקבל את מספר הפרויקט. PROJECT_NUMBER הוא לא אותו דבר כמו מזהה פרויקט:
- מזהה פרויקט הוא מחרוזת ייחודית שיכולה להיות שילוב של אותיות, מספרים ומקפים. כשיוצרים פרויקט, מציינים מזהה פרויקט. לדוגמה,
example-project-123. - מספר פרויקט הוא מזהה ייחודי שנוצר באופן אוטומטי לפרויקט ומורכב רק ממספרים. לדוגמה,
1234567890.
כדי לקבל את PROJECT_NUMBER של מזהה פרויקט מסוים, משתמשים בפקודה
gcloud projects describe:gcloud projects describe PROJECT_ID --format="value(projectNumber)"- מזהה פרויקט הוא מחרוזת ייחודית שיכולה להיות שילוב של אותיות, מספרים ומקפים. כשיוצרים פרויקט, מציינים מזהה פרויקט. לדוגמה,
מעתיקים את מספר הפרויקט שמוחזר אל זהות סוכן השירות:
service-PROJECT_NUMBER@gcp-sa-lustre.iam.gserviceaccount.comמעתיקים את הזהות של סוכן השירות כדי להשתמש בה בשלב הבא.
מתן הרשאות
סוכן השירות של 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.objectViewer_OR_objectUser
SERVICE_AGENT_IDENTITY הוא סוכן הזהויות של שירות Managed Lustre מהשלב הקודם.
ייבוא נתונים ל-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מציין את נתיב ספריית הבסיס (root) למערכת הקבצים המנוהלת של 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שהערך שלו מציין את הנתיב של ספריית הבסיס למערכת הקבצים המנוהלת של 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.
- ה-UID, ה-GID, המצב ו
- אם לאובייקט ב-Cloud Storage אין מטא-נתונים מותאמים אישית, אז:
- מזהה המשתמש (UID) ומזהה הקבוצה (GID) של הקובץ מוגדרים ל-0 (
root). - המצב של הקובץ מוגדר ל-
rwxr-xr-x(755). - הערכים של
atimeו-mtimeבקובץ מוגדרים לזמן היצירה של האובייקט ב-Cloud Storage.
- מזהה המשתמש (UID) ומזהה הקבוצה (GID) של הקובץ מוגדרים ל-0 (
בכל מקרה:
- הערך
ctimeשל קובץ מוגדר לזמן שבו הקובץ נכתב במופע. - הערכים
atime, ctimeו-mtimeשל ספרייה מוגדרים לזמן שבו הספרייה נוצרה במופע.
ייצוא נתונים
אתם יכולים לייצא נתונים ממופע מנוהל של 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שהערך שלו מציין את הנתיב של ספריית הבסיס למערכת הקבצים המנוהלת של 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/"}}'
מאפייני קובץ
כשמייצאים נתונים ממופע מנוהל של 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.
מאפייני הקובץ הבאים לא נשמרים:
- קישורי Symlink לא נשמרים.
- קישורים קשיחים מיוצאים כאובייקטים נפרדים ב-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 של היעד. הוראות מפורטות להגדרה מופיעות במאמר בנושא הענקת הרשאות לסוכן השירות.
קבצים שדילגתם עליהם או מאפיינים חסרים
העברות נתונים מנוהלות של Lustre הן מצטברות. הן מעתיקות רק קבצים שלא קיימים ביעד או שהשתנו מאז ההעברה האחרונה.
- אם נראה שהמערכת דילגה על קבצים, צריך לוודא שהם כבר הועברו בהצלחה בעבר ולא בוצעו בהם שינויים.
- כשמייצאים נתונים ל-Cloud Storage, המטא-נתונים של POSIX (UID, GID, mode, mtime) נשמרים באמצעות מפתחות מטא-נתונים מותאמים אישית (לדוגמה,
goog-reserved-posix-uid). שימו לב שקישורים סמליים, ספריות ריקות ופריסות מפורשות של PFL striping לא נשמרים במהלך הייצוא. פרטים מלאים מופיעים במאמר בנושא העברת מאפיינים של קובצי נתונים.
בדיקת פעולות העברה שנכשלו
אם פעולת העברה נכשלת, אפשר לאחזר את הודעת השגיאה המפורטת ואת סיבת הכישלון באמצעות מזהה הפעולה:
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.