הקמת אשכול Ceph (עצמאי) לאחסון מבוזר

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

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

משתמשים מתלוננים על כתיבה איטית ל-S3, ומכונות וירטואליות קופאות מעת לעת במהלך פעולות I/O. הסיבה היא Ceph שהוגדר בצורה לא נכונה: OSD על HDD ללא מטמון NVMe, CRUSH ללא הפרדת racks, ו-'cluster network' לא מוגדר. הגדרה מוצלחת של אשכול Ceph כוללת תכנון חומרה, פריסה וכיוונון. לפי ויקיפדיה, Ceph היא מערכת אחסון מבוזרת המשלבת אחסון בלוקים (RBD), קבצים (CephFS) ואובייקטים (RGW/S3) באשכול אחד. אשכול אחד מכסה את הצרכים של מכונות וירטואליות, Kubernetes, גיבויים ויישומים שעובדים עם S3. המחיר של אוניברסליות זו הוא מורכבות: Ceph שהוגדר לא נכון פועל לאט ומאבד נתונים בדרכים חריגות במהלך תקלות. הניסיון שלנו (10+ שנים בייצור, 50+ אשכולות Ceph שנפרסו) מבטיח ארכיטקטורה עמידה לתקלות. החיסכון ברישיונות אחסון מסחריים יכול להגיע ל-$15,000 בשנה, ו-Ceph שהוגדר נכון עובד פי 3-5 מהר יותר מתצורה סטנדרטית. לדוגמה, אשכול של 5 צמתים עם NVMe עולה כ-$12,000. עלויות פריסת אשכול טיפוסיות נעות בין $8,000 ל-$15,000 בהתאם למורכבות.

איך להגדיר אשכול Ceph?

הגדרת אשכול Ceph כוללת תכנון חומרה, פריסת cephadm, הגדרת טופולוגיית CRUSH, כיוונון Bluestore ושילוב ניטור. כל שלב משפיע על ביצועים ועמידות לתקלות. אשכול ממוצע של שלושה צמתים עם ניטור נפרס תוך 5-7 ימים. העלות נקבעת באופן אישי לאחר ביקורת של התשתית שלך.

יתרונות של Ceph עצמאי

עצמאי פירושו Ceph ללא orchestrator של צד שלישי (ללא Proxmox, ללא Rook עבור Kubernetes, ללא OpenStack). הוא מנוהל דרך cephadm — ה-orchestrator הרשמי שפורס שירותים בקונטיינרים. כל מה שקשור לטופולוגיה, דיסקים ורשת נקבע על ידינו. זה נותן שליטה מקסימלית ודורש הבנה מקסימלית של הארכיטקטורה.

פתרון בעיות נפוצות של Ceph

Ceph שהוגדר לא נכון הוא מקור לכאבי ראש כרוניים: כתיבה איטית (חביון עד 50 אלפיות השנייה על RBD), אובדן נתונים כאשר צומת בודד נופל, backfill בלתי נשלט בשעות שיא (עומס רשת עד 10 Gbit/s). אנו פותרים בעיות אלה באמצעות:

  • תכנון חומרה מדויק עם הפרדת רשת ודיסקים;
  • טופולוגיית CRUSH שמבודדת תקלות ברמת המארח או ה-rack;
  • כיוונון עדין של Bluestore ופרמטרי שחזור.

Ceph עם כיוונון Bluestore נכון מציג חביון נמוך ב-70% מהתצורה הסטנדרטית, ומהירות הכתיבה עולה פי 3-5. זה מאושר על ידי מקרי הבוחן שלנו: לאחר כיוונון, מהירות כתיבת RBD עלתה פי 3-5.

איך לבחור טופולוגיית דיסקים נכונה?

מינימום לייצור: 3 צמתים. עם 3 צמתים, אנו מאבדים אחד ללא אובדן נתונים ב-size=3, min_size=2. עם 5 צמתים, אנו סובלים שתי תקלות בו-זמנית ב-size=3 עם כללי CRUSH על צמתים שונים. דיסקים: אל תערבבו OSD ממחלקות שונות (NVMe ו-HDD) באותו pool ללא הפרדה מפורשת באמצעות מחלקות התקנים. Ceph מאזן נתונים באופן שווה לפי משקל OSD, ו-HDD איטי יקבע את המהירות של כל ה-pool.

תצורה מומלצת ל-3 צמתים:

  • דיסק מערכת: SATA SSD 240GB;
  • 2-4 x NVMe עבור OSD (קיבולת);
  • NVMe ייעודי עבור WAL/DB (bluestore_block_wal, bluestore_block_db);
  • 2 x 25GbE: רשת ציבורית + רשת אשכול.

הפרדת רשתות ציבוריות ואשכול אינה אופציונלית. שכפול בין OSDs מייצר תעבורה של עד 25 Gbit/s, שכאשר מתערבבת עם תעבורת לקוחות פוגעת בחביון ב-30-50%.

השוואת תצורות דיסקים — הגדרת אשכול Ceph

סוג תצורה חביון כתיבה קיבולת המלצה
כל OSD על NVMe < 2 אלפיות השנייה ממוצע עבור RBD בעומס גבוה
NVMe + HDD (באמצעות מחלקת התקנים) < 5 אלפיות השנייה (NVMe), > 20 אלפיות השנייה (HDD) גבוה עבור אחסון מדורג
HDD בלבד (ללא NVMe) > 30 אלפיות השנייה גבוה מאוד רק עבור נתונים קרים

פריסה באמצעות cephadm

  1. התקן cephadm על צומת ה-bootstrap באמצעות curl.
  2. הפעל bootstrap תוך ציון כתובת MON ורשת האשכול.
  3. העתק את מפתח ה-SSH לצמתים הנותרים.
  4. הוסף מארחים לאשכול.
  5. החל את מפרט ceph-init.yaml.
curl -s --remote-name https://download.ceph.com/rpm-latest/el9/noarch/cephadm && chmod +x cephadm && ./cephadm install cephadm bootstrap --mon-ip 192.168.10.1 --cluster-network 192.168.20.0/24 --apply-spec /tmp/ceph-init.yaml
ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-node2
ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-node3
ceph orch host add ceph-node2 192.168.10.2
ceph orch host add ceph-node3 192.168.10.3
ceph orch apply -i /tmp/ceph-init.yaml

קובץ curl -s --remote-name https://download.ceph.com/rpm-latest/el9/noarch/cephadm && chmod +x cephadm && ./cephadm install cephadm bootstrap --mon-ip 192.168.10.1 --cluster-network 192.168.20.0/24 --apply-spec /tmp/ceph-init.yaml ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-node2 ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-node3 ceph orch host add ceph-node2 192.168.10.2 ceph orch host add ceph-node3 192.168.10.3 ceph orch apply -i /tmp/ceph-init.yaml :

---
service_type: host
hostname: ceph-node1
addr: 192.168.10.1
---
service_type: host
hostname: ceph-node2
addr: 192.168.10.2
---
service_type: host
hostname: ceph-node3
addr: 192.168.10.3
---
service_type: mon
placement:
  hosts:
    - ceph-node1
    - ceph-node2
    - ceph-node3
---
service_type: mgr
placement:
  count: 2
---
service_type: osd
service_id: default_drive_group
placement:
  hosts:
    - ceph-node1
    - ceph-node2
    - ceph-node3
data_devices:
  paths:
    - /dev/nvme1n1
    - /dev/nvme2n1
db_devices:
  paths:
    - /dev/nvme0n1

הגדרת מפת CRUSH לעמידות בתקלות

CRUSH (שכפול מבוקר תחת גיבוב ניתן להרחבה) קובע כיצד Ceph מפיץ נתונים. הכלל ברירת המחדל הוא /tmp/ceph-init.yaml עם רמת service_type: host hostname: ceph-node1 addr: 192.168.10.1 --- service_type: host hostname: ceph-node2 addr: 192.168.10.2 --- service_type: host hostname: ceph-node3 addr: 192.168.10.3 --- service_type: mon placement: hosts: - ceph-node1 - ceph-node2 - ceph-node3 --- service_type: mgr placement: count: 2 --- service_type: osd service_id: default_drive_group placement: hosts: - ceph-node1 - ceph-node2 - ceph-node3 data_devices: paths: - /dev/nvme1n1 - /dev/nvme2n1 db_devices: paths: - /dev/nvme0n1 . זה אומר שעותקים של אותם נתונים לעולם לא יהיו על אותו מארח. עבור טופולוגיות מורכבות יותר (racks, מרכזי נתונים), צור כלל עם שכפול ברמת ה-rack. דוגמה: 3 racks, צומת אחד לכל rack — אובדן rack אינו בעיה.

ceph osd crush add-bucket rack01 rack
ceph osd crush add-bucket rack02 rack
ceph osd crush add-bucket rack03 rack
ceph osd crush move rack01 root=default
ceph osd crush move rack02 root=default
ceph osd crush move rack03 root=default
ceph osd crush move ceph-node1 rack=rack01
ceph osd crush move ceph-node2 rack=rack02
ceph osd crush move ceph-node3 rack=rack03
ceph osd crush rule create-replicated rack_replicated default rack
# Создание пулов
ceph osd pool create vm-data 0 0 replicated rack_replicated
ceph osd pool set vm-data size 3
ceph osd pool set vm-data min_size 2
ceph osd pool application enable vm-data rbd
rbd pool init vm-data
ceph osd pool create .rgw.root 32 32
ceph osd pool create default.rgw.log 32 32
ceph osd pool create default.rgw.control 32 32
ceph osd pool create default.rgw.meta 32 32
ceph osd pool application enable .rgw.root rgw
ceph mgr module enable pg_autoscaler
ceph osd pool set vm-data pg_autoscale_mode on

פרמטרי Bluestore ב-replicated_rule:

[global]
osd_pool_default_size = 3
osd_pool_default_min_size = 2
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

[osd]
bluestore_block_db_size = 107374182400 # 100GB
bluestore_block_wal_size = 10737418240 # 10GB
bluestore_cache_size_hdd = 1073741824 # 1GB
bluestore_cache_size_ssd = 3221225472 # 3GB
osd_op_num_threads_per_shard = 2
osd_op_num_shards = 8
osd_recovery_max_active_hdd = 3
osd_recovery_max_active_ssd = 10
osd_max_backfills = 1

[mon]
mon_osd_down_out_interval = 300 # 5 мин перед out

ניטור ושחזור

לניטור, השתמש במודול Prometheus המובנה דרך MGR:

ceph mgr module enable prometheus 

כאשר צומת נופל, סמן את ה-OSDs שנפלו כ-out (host), המתן לסיום ה-backfill (מצב active+clean), ולאחר מכן הסר אותם (ceph osd crush add-bucket rack01 rack ceph osd crush add-bucket rack02 rack ceph osd crush add-bucket rack03 rack ceph osd crush move rack01 root=default ceph osd crush move rack02 root=default ceph osd crush move rack03 root=default ceph osd crush move ceph-node1 rack=rack01 ceph osd crush move ceph-node2 rack=rack02 ceph osd crush move ceph-node3 rack=rack03 ceph osd crush rule create-replicated rack_replicated default rack # Создание пулов ceph osd pool create vm-data 0 0 replicated rack_replicated ceph osd pool set vm-data size 3 ceph osd pool set vm-data min_size 2 ceph osd pool application enable vm-data rbd rbd pool init vm-data ceph osd pool create .rgw.root 32 32 ceph osd pool create default.rgw.log 32 32 ceph osd pool create default.rgw.control 32 32 ceph osd pool create default.rgw.meta 32 32 ceph osd pool application enable .rgw.root rgw ceph mgr module enable pg_autoscaler ceph osd pool set vm-data pg_autoscale_mode on ).

תוצרים ומה כלול

  • ביקורת של התשתית הנוכחית ובחירת תצורה;
  • פריסת אשכול (3+ צמתים) עם cephadm;
  • טופולוגיית CRUSH עבור תוכנית העמידות לתקלות שלך;
  • כיוונון פרמטרי Bluestore ושחזור;
  • שילוב עם Prometheus/Grafana;
  • תיעוד ו-runbook לתחזוקה;
  • הדרכת צוות על פעולות בסיסיות.

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

לוחות זמנים ועלות

תרחיש זמן
3 צמתים, cephadm, pools בסיסיים 3-4 ימים
+מפת CRUSH לפי racks, כיוונון 5 ימים
+ניטור, תיעוד, runbook +1-2 ימים

העלות מחושבת באופן אישי לאחר ביקורת של התשתית שלך. עלויות פריסה טיפוסיות נעות בין $8,000 ל-$15,000 בהתאם למורכבות. הגדרת אשכול Ceph עצמאי דורשת תכנון קפדני. בקש ייעוץ — נראה כמה יעיל Ceph יכול להיות כשהוא מוגדר נכון.