פריסת CephFS סוהר למערכות קבצים מבוזרות
דמיינו מאה שרתים שכותבים וקוראים קבצים בו-זמנית ממערכת אחסון אחת עם עקביות נתונים מיידית. RBD לא יעבוד כאן: הוא מספק התקן בלוק רק ללקוח אחד. אתם צריכים מערכת קבצים POSIX על גבי Ceph, והיא קיימת — CephFS. מאמר זה חולק את ניסיון הפריסה הסוהר שלנו: מהגדרת MDS ועד אינטגרציה עם Kubernetes וניטור. עם 5+ שנים בייצור, השלמנו 30+ פרויקטים, ו-70% מהלקוחות בוחרים ב-CephFS לאחסון משותף. אנו מפנים לתיעוד הרשמי של Ceph (תיעוד CephFS) למושגי יסוד.
תרחישים אופייניים: אחסון משותף ל-Kubernetes (ReadWriteMany PVC), אחסון משותף למטמוני CI/CD, נכסי מדיה למספר שרתי יישומים, ספריות בית למאות מארחים. לכל תרחיש דרישות משלו למכסות, ביצועים וסבילות לתקלות.
איך CephFS עובד ולמה עקביות חשובה
CephFS דורש MDS (MetaData Server) — שירות שמנהל מטא-דאטה (ספריות, הרשאות, inodes). נתוני קבצים חיים ב-RADOS; רק מטא-דאטה עובר דרך MDS. כפי שנכתב ב-תיעוד CephFS הרשמי, MDS מנהל מטא-דאטה. MDS פעיל מטפל בבקשות, בעוד ש-standby ממתינים לכשל. לייצור, נדרש מינימום של 1 פעיל + 1 standby.
# Разворачиваем MDS через cephadm ceph orch apply mds cephfs --placement="3 ceph-node1 ceph-node2 ceph-node3" # Разворачиваем MDS через cephadm ceph orch apply mds cephfs --placement="3 ceph-node1 ceph-node2 ceph-node3" יוצר pools לנתונים ומטא-דאטה ומתחיל MDS בפקודה אחת. אבל פרט קריטי: pool המטא-דאטה חייב להיות על הדיסקים המהירים ביותר. MDS שומר מטא-דאטה ב-RAM, אבל ב-cache miss הוא שואל את ה-pool. pool מטא-דאטה איטי פירושו ceph fs volume create cephfs איטי בספריות עם אלפי קבצים. השתמשו ב-device class למיקום על NVMe: ls.
פריסה מעשית: מיצירת pool ידנית לאוטומציה
לשליטה מלאה בפרמטרי pool, אנו יוצרים אותם ידנית עם השלבים הבאים: שלב 1: יצירת Pool מטא-דאטה — קטן, קריטי לביצועים.
# Пул для метаданных — небольшой, критичен по производительности
ceph osd pool create cephfs_metadata 32 32
ceph osd pool set cephfs_metadata size 3
ceph osd pool set cephfs_metadata pg_autoscale_mode on
# Пул для данных — основной объём
ceph osd pool create cephfs_data 0 0 replicated
ceph osd pool set cephfs_data size 3
ceph osd pool set cephfs_data pg_autoscale_mode on
# Создаём файловую систему
ceph fs new cephfs cephfs_metadata cephfs_dataשלב 2: יצירת Pool נתונים — הנפח הראשי.
ceph auth get-or-create client.cephfs-ro mon 'allow r' mds 'allow r' osd 'allow r pool=cephfs_data' -o /etc/ceph/ceph.client.cephfs-ro.keyring שלב 3: יצירת מערכת הקבצים.
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: shared-cache
spec:
accessModes:
- ReadWriteMany
storageClassName: ceph-cephfs
resources:
requests:
storage: 100Gi
שלב 4: התקנה על לקוחות. לאוטומציה, אנו משתמשים ב-Ansible או Terraform. לקוח ה-kernel (מהיר יותר): ציינו כתובות MON ו-secret ב-ceph osd pool set cephfs_metadata crush_rule nvme_replicated. לגישה מבוקרת, צרו משתמש עם הרשאות מינימליות:
# Создаём subvolumegroup
ceph fs subvolumegroup create cephfs kubernetes
# Subvolume с квотой
ceph fs subvolume create cephfs pvc-build-cache kubernetes --size 50GiB מה כלול בשירות הסוהר שלנו
פריסת CephFS הסוהר שלנו כוללת:
- ביקורת תשתית קיימת ועיצוב אשכול
- פריסת MDS עם multi-active אם נדרש
- הגדרת pools נתונים ומטא-דאטה עם מודעות ל-device class
- אינטגרציה עם Kubernetes דרך ceph-csi-cephfs (ReadWriteMany PVC)
- יצירת subvolumes ומכסות לפרויקטים
- כוונון ביצועי MDS ואופטימיזציה של pool מטא-דאטה
- ניטור דרך Prometheus/Grafana עם dashboards והתראות מוכנים
- תיעוד ברור ומפגשי העברת ידע
- תמיכה טכנית במהלך הייצור הראשוני
אינטגרציה של CephFS עם Kubernetes: ReadWriteMany PVC דרך ceph-csi-cephfs
עבור ReadWriteMany PVC, אנו משתמשים ב-ceph-csi-cephfs. Helm chart יוצר StorageClass, secret ו-CSI driver. PVC עם # Пул для метаданных — небольшой, критичен по производительности ceph osd pool create cephfs_metadata 32 32 ceph osd pool set cephfs_metadata size 3 ceph osd pool set cephfs_metadata pg_autoscale_mode on # Пул для данных — основной объём ceph osd pool create cephfs_data 0 0 replicated ceph osd pool set cephfs_data size 3 ceph osd pool set cephfs_data pg_autoscale_mode on # Создаём файловую систему ceph fs new cephfs cephfs_metadata cephfs_data בלתי אפשריים עם RBD:
[mds]
mds_cache_memory_limit = 8589934592 # 8 GB
mds_log_max_segments = 128
mds_tick_interval = 5
mds_dir_max_commit_size = 10485760 # 10 MB
mds_session_timeout = 60ה-CSI driver יוצר subvolume — מרחב מבודד עם מכסה.
Subvolumes ומכסות: בידוד פרויקטים ובקרת משאבים
CephFS תומך במכסות ברמת ספרייה. לפרויקטים מבודדים, subvolumes נוחים:
# Create a subvolumegroup
ceph fs subvolumegroup create cephfs kubernetes
# Subvolume with a quota
ceph fs subvolume create cephfs pvc-build-cache kubernetes --size 50GiBמכסות עובדות דרך התכונות /etc/fstab ו-ceph auth get-or-create client.cephfs-ro mon 'allow r' mds 'allow r' osd 'allow r pool=cephfs_data' -o /etc/ceph/ceph.client.cephfs-ro.keyring . עבור Kubernetes PVC, מכסות מוגדרות ב-StorageClass דרך פרמטרים.
ביצועים וכוונון MDS: הימנעות מצווארי בקבוק
הגדרת מטמון MDS קריטית עם מספר גדול של קבצים. הגדרה אופיינית לעומסי קבצים קטנים:
[mds]
mds_cache_memory_limit = 8589934592 # 8 GB
mds_log_max_segments = 128
mds_tick_interval = 5
mds_dir_max_commit_size = 10485760 # 10 MB
mds_session_timeout = 60
MDS multi-active (2 או יותר) מפצל את מרחב השמות לפי ספרייה — עוזר עם נקודות חמות אבל לא מתקפל לינארית. נטרו את ה-latency: accessModes: ReadWriteMany — אם >100 ms, הרחיבו MDS או אופטימיזציה של pool המטא-דאטה. בבenchmarks הפנימיים שלנו, לקוח ה-kernel עולה על ceph-fuse עד פי 3 בקריאות רציפות. בהשוואה ל-NFS, CephFS מספק עד פי 5 throughput גבוה יותר לכתיבה במקביל בתרחיש רב-לקוחות.
ניטור CephFS: מדדים מרכזיים ו-Dashboards
לפעילות ייצור, אנו משתמשים ב-Prometheus + Grafana. מדדים מרכזיים:
| מדד | תיאור | סף התראה |
|---|---|---|
| ceph_mds_request_latency_sum | Latency של פעולות מטא-דאטה | >100 ms |
| ceph_mds_server_handle_client_request | בקשות בשנייה | >10000 req/s |
| ceph_pool_used_bytes | שטח בשימוש ב-pool הנתונים | <80% קיבולת |
אנו מגדירים התראות ב-Alertmanager ויוצרים dashboards עם SLO/SLI.
מקרה אמיתי: פריסה בחברת מדיה
בפרויקט אחד לחברת מדיה (הלקוח שלנו), פרסנו CephFS על 50 שרתים. בתחילה, latency המטא-דאטה היה 150ms בגלל pool מטא-דאטה מבוסס HDD. לאחר מעבר ל-NVMe וכוונון מטמון MDS, ה-latency ירד ל-30ms. הלקוח מריץ כעת מעל 1000 עבודות CI/CD במקביל ללא צווארי בקבוק. האשכול מטפל כעת במעל 10,000 פעולות מטא-דאטה בשנייה עם latency מתחת ל-30ms. פרויקט זה הדגים את ההשפעה של מיקום מטא-דאטה נכון וגודל MDS מתאים. מקרה זה הוא מהפרקטיקה שלנו, המדגים את המומחיות המעשית שלנו.
בעיות אופייניות ופתרונותיהן (Postmortem)
-
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: shared-cache spec: accessModes: - ReadWriteMany storageClassName: ceph-cephfs resources: requests: storage: 100Giמציג שטח פנוי שגוי? CephFS מדווח על קיבולת אשכול כוללת. השתמשו בתכונות# Создаём subvolumegroup ceph fs subvolumegroup create cephfs kubernetes # Subvolume с квотой ceph fs subvolume create cephfs pvc-build-cache kubernetes --size 50GiBעם מכסות לשימוש מדויק לכל ספרייה. - לקוח NFS לא רואה שינויים? השביתו שמירת ספריות במטמון עם
ceph.quota.max_bytesבזמן ההתקנה, אבל צפו לירידת ביצועים של 15–20%. - MDS לא עובר ל-standby? בדקו את
ceph.quota.max_files— לעתים קרובות ה-standby לא יכול להגיע ל-MON. ודאו גישת רשת והגדרת rank.
לוחות זמנים ועלות משוערים
| תרחיש | לוח זמנים |
|---|---|
| CephFS על אשכול קיים (MDS, pools, לקוחות) | 2–3 ימים |
| + Kubernetes CSI, subvolumes, מכסות | 3–5 ימים |
| + MDS multi-active, כוונון, ניטור | 5–7 ימים |
העלות מחושבת באופן אישי לאחר ביקורת. עלויות פרויקט אופייניות נעות בין $5,000 ל-$20,000, תלוי בהיקף ובמורכבות. צרו קשר לייעוץ והערכת פרויקט. הזמינו פריסת CephFS סוהר לתשתית שלכם. המהנדסים שלנו עם 5+ שנות ניסיון יעזרו לכם ליישם מערכת אחסון סובלנית לתקלות עם אחריות.







