راهنمای جامع Ceph
Englishشروع کنید

زمین بازی CRUSH

در کتاب: فصل ۸، فصل ۲۸

آزمایشگاه

زمین بازی CRUSH

یک root، چند host و OSD بسازید، قاعده را انتخاب کنید و ببینید straw2 هر PG را کجا می‌گذارد؛ یک OSD را out یا down کنید یا وزنش را تغییر دهید و ببینید کدام PGها جابه‌جا می‌شوند.

۶۴ × ۳PG × نسخه
۹٫۹٪داده‌ای که تغییر آخر جابه‌جا کرد
۱۹PGهایی که مجموعهٔ upشان عوض شد
۰PGهایی با نسخه‌ای کمتر از size
۰جای خالی (NONE)

تغییر آخر: osd.4 out شد. shardهای جابه‌جاشده در فهرست برجسته شده‌اند.

osd.0: 29 (≈24)029osd.1: 14 (≈24)114osd.2: 21 (≈24)221osd.3: 0 (≈0)30osd.4: 38 (≈24)438osd.5: 26 (≈24)526osd.6: 27 (≈24)627osd.7: 14 (≈24)714osd.8: 23 (≈24)823
shardهای PG روی هر OSD (ستون) در برابر سهمی که وزنش می‌دهد (خط). قرمز: out؛ کهربایی: down.
$ ceph osd map pool1 rbd_data.10226b8b4567.0000000000000000ceph_str_hash_rjenkins → 0x87bd7b9a · ceph_stable_mod(·, 64, 63) → pg 1.1a · pps 0x8d2145b9 · up [4,2,8] p4
PG ← مجموعهٔ up (۶۴ PG؛ primary زیرخط‌دار)
  1. 1.0[0,6,5]
  2. 1.1[7,4,0]
  3. 1.2[4,7,0]
  4. 1.3[4,8,2]
  5. 1.4[1,8,5]
  6. 1.5[4,8,0]
  7. 1.6[6,4,2]
  8. 1.7[1,7,5]
  9. 1.8[6,0,4]
  10. 1.9[8,4,2]
  11. 1.a[1,5,7]
  12. 1.b[1,8,5]
  13. 1.c[6,5,2]
  14. 1.d[7,4,2]
  15. 1.e[1,8,4]
  16. 1.f[6,2,4]
  17. 1.10[5,2,8]
  18. 1.11[4,8,0]
  19. 1.12[0,6,5]
  20. 1.13[4,6,1]
  21. 1.14[5,8,1]
  22. 1.15[8,5,2]
  23. 1.16[5,0,6]
  24. 1.17[8,0,5]
  25. 1.18[6,2,4]
  26. 1.19[6,0,4]
  27. 1.1a[4,2,8]
  28. 1.1b[8,1,4]
  29. 1.1c[8,4,1]
  30. 1.1d[6,0,5]
  31. 1.1e[8,4,0]
  32. 1.1f[8,5,2]
  33. 1.20[2,6,5]
  34. 1.21[6,0,4]
  35. 1.22[2,4,6]
  36. 1.23[0,5,7]
  37. 1.24[0,4,6]
  38. 1.25[8,5,0]
  39. 1.26[1,4,6]
  40. 1.27[1,7,5]
  41. 1.28[5,7,0]
  42. 1.29[8,2,4]
  43. 1.2a[5,2,6]
  44. 1.2b[8,0,4]
  45. 1.2c[7,0,4]
  46. 1.2d[2,7,4]
  47. 1.2e[6,2,4]
  48. 1.2f[0,4,6]
  49. 1.30[6,5,0]
  50. 1.31[0,6,4]
  51. 1.32[0,6,4]
  52. 1.33[4,6,2]
  53. 1.34[8,0,5]
  54. 1.35[8,2,4]
  55. 1.36[7,0,4]
  56. 1.37[4,7,0]
  57. 1.38[6,4,2]
  58. 1.39[0,5,6]
  59. 1.3a[0,8,4]
  60. 1.3b[4,1,6]
  61. 1.3c[5,6,0]
  62. 1.3d[5,8,2]
  63. 1.3e[5,1,7]
  64. 1.3f[7,4,1]

مطابق با:

  • src/crush/mapper.c :: crush_do_rule اجرای گام‌های قاعده (take، chooseleaf، emit)
  • src/crush/mapper.c :: crush_choose_firstn, crush_choose_indep حلقه‌های انتخاب replicated (firstn) و EC (indep) با تلاش دوباره
  • src/crush/mapper.c :: bucket_straw2_choose, generate_exponential_distribution, crush_ln straw2: بزرگ‌ترین ln(hash)/weight برنده است
  • src/crush/mapper.c :: is_out بررسی reweight که OSD خارج‌شده را رد می‌کند
  • src/crush/hash.c :: crush_hash32_rjenkins1_2, _3 hash جنکینز که CRUSH به کار می‌برد
  • src/osd/osd_types.cc :: pg_pool_t::raw_pg_to_pps, hash_key بذر PG که وارد CRUSH می‌شود
  • src/include/rados.h :: ceph_stable_mod نگاشت hash شیء به PG وقتی pg_num توانی از ۲ نیست
  • src/common/ceph_hash.cc :: ceph_str_hash_rjenkins hash نام شیء
  • src/osd/OSDMap.cc :: _pg_to_raw_osds, _raw_to_up_osds از مجموعهٔ خام تا مجموعهٔ up (OSDهای down حذف یا NONE می‌شوند)
  • src/crush/CrushWrapper.cc :: add_simple_rule_at, insert_item; CrushWrapper.h :: set_tunables_jewel قاعده‌ای که ceph osd pool create می‌سازد و tunables نسخهٔ jewel
تصویری ثابت از شبیه‌ساز؛ نسخهٔ تعاملی در آزمایشگاه نسخهٔ وب است. آزمایشگاه تعاملی: زمین بازی CRUSH