Ceph چیست؟ راهنمای جامع معماری و کاربردها

Ceph چیست؟ راهنمای جامع معماری و کاربردها

در زیرساخت‌های مدرن Cloud و Data Center، Storage دیگر صرفاً محلی برای ذخیره فایل‌ها نیست. با افزایش تعداد سرورها، Virtual Machineها، Containerها و Applicationهای Distributed، سازمان‌ها به یک Storage Platform نیاز دارند که بتواند همزمان Scalability، High Availability، Fault Tolerance و Performance مناسبی ارائه دهد.

یکی از شناخته‌شده‌ترین راهکارهای Open Source برای پاسخ به این نیاز، Ceph است؛ یک Distributed Storage Platform که می‌تواند از روی مجموعه‌ای از سرورهای معمولی، یک Storage Cluster قدرتمند و مقیاس‌پذیر ایجاد کند.

Ceph می‌تواند یک زیرساخت واحد برای ارائه Block Storage، Object Storage و File Storage فراهم کند و به همین دلیل در معماری‌هایی مانند OpenStack، Kubernetes، Proxmox، Private Cloud و Data Centerهای بزرگ کاربرد گسترده‌ای دارد.

در این مقاله به صورت جامع بررسی می‌کنیم که Ceph چیست، چگونه کار می‌کند، چه اجزایی دارد، تفاوت آن با SAN و NAS چیست، چگونه در OpenStack و Kubernetes استفاده می‌شود و چه زمانی انتخاب Ceph تصمیم درستی است.

Ceph چیست؟

Ceph یک سیستم ذخیره‌سازی Distributed و Open Source است که برای ارائه استوریج در مقیاس بزرگ طراحی شده است.

برخلاف بسیاری از Storageهای سنتی، Ceph برای ساخت Storage Cluster به یک Storage Appliance اختصاصی وابسته نیست. در عوض می‌توان چندین سرور را در کنار یکدیگر قرار داد و با استفاده از Diskهای موجود در آن‌ها یک Storage Pool توزیع‌شده ایجاد کرد.


        Ceph Storage Cluster

 ┌────────────┐  ┌────────────┐  ┌────────────┐
 │   Server 1 │  │   Server 2 │  │   Server 3 │
 │            │  │            │  │            │
 │ OSD  OSD   │  │ OSD  OSD   │  │ OSD  OSD   │
 │  Disk Disk │  │  Disk Disk │  │  Disk Disk │
 └──────┬─────┘  └──────┬─────┘  └──────┬─────┘
        │               │               │
        └───────────────┼───────────────┘
                        │
                        ▼
                 Ceph Storage

از دید Application، این مجموعه سرورها می‌تواند مانند یک Storage Platform واحد عمل کند؛ در حالی که داده‌ها در پشت صحنه بین Nodeهای مختلف توزیع می‌شوند.

یکی از ویژگی‌های مهم Ceph این است که با اضافه کردن Server و Disk جدید می‌توان ظرفیت و در بسیاری از معماری‌ها Performance را نیز افزایش داد.

Ceph چه مشکلی را حل می‌کند؟

فرض کنید یک سازمان چندین Server دارد و می‌خواهد Storage مرکزی خود را در اختیار Virtual Machineها، Kubernetes و Applicationهای مختلف قرار دهد.

در معماری سنتی ممکن است یک SAN یا NAS خریداری شود:


Servers
   │
   │
   ▼
┌─────────────────────┐
│      SAN / NAS      │
│                     │
│   Shared Storage    │
└─────────────────────┘

این معماری می‌تواند بسیار قدرتمند باشد، اما معمولاً Storage Appliance، Controller، Licensing و Hardware اختصاصی خودش را دارد.

Ceph تلاش می‌کند Storage را به شکل Software-Defined ارائه کند:


        Commodity Servers

 ┌────────┐ ┌────────┐ ┌────────┐
 │Server 1│ │Server 2│ │Server 3│
 │  Disk  │ │  Disk  │ │  Disk  │
 └───┬────┘ └───┬────┘ └───┬────┘
     │          │          │
     └──────────┼──────────┘
                ▼
         Ceph Distributed
             Storage

به همین دلیل Ceph یکی از گزینه‌های مهم برای ساخت Software-Defined Storage محسوب می‌شود.

مهم‌ترین ویژگی‌های Ceph

  • Open Source
  • Distributed Architecture
  • Horizontal Scalability
  • High Availability
  • Fault Tolerance
  • Self-Healing
  • Replication
  • Erasure Coding
  • Block Storage
  • Object Storage
  • File Storage
  • پشتیبانی مناسب برای Cloud و Virtualization

این ویژگی‌ها باعث شده‌اند Ceph در بسیاری از زیرساخت‌های بزرگ به عنوان Storage Backend مورد استفاده قرار بگیرد.

Ceph چگونه کار می‌کند؟

برای درک Ceph باید ابتدا با مفهوم Distributed Storage آشنا شویم.

در Storage سنتی، ممکن است یک سیستم مرکزی مسئول مدیریت Diskها و ارائه Storage باشد.

اما در Ceph، Storage بین چندین Node توزیع می‌شود.


                  Client
                     │
                     ▼
              Ceph Storage
                     │
        ┌────────────┼────────────┐
        ▼            ▼            ▼
      OSD 1        OSD 2        OSD 3
        │            │            │
       Disk         Disk         Disk

Ceph داده‌ها را به صورت هوشمند بین OSDهای مختلف توزیع می‌کند و با استفاده از مکانیزم‌هایی مانند CRUSH مشخص می‌کند هر داده باید روی کدام OSD قرار بگیرد.

RADOS؛ قلب Ceph

در معماری Ceph، یکی از مهم‌ترین مفاهیم RADOS یا Reliable Autonomic Distributed Object Store است.

RADOS لایه اصلی Distributed Storage در Ceph است.

سرویس‌های مختلف Ceph در نهایت روی RADOS قرار می‌گیرند.


             Ceph Services
                  │
       ┌──────────┼──────────┐
       ▼          ▼          ▼
      RBD       CephFS      RGW
       │          │          │
       └──────────┼──────────┘
                  ▼
                RADOS
                  │
       ┌──────────┼──────────┐
       ▼          ▼          ▼
      OSD        OSD        OSD

به زبان ساده، می‌توان RADOS را موتور اصلی ذخیره‌سازی Ceph دانست و RBD، CephFS و RGW را Interfaceهای مختلفی در نظر گرفت که Storage را برای کاربردهای متفاوت ارائه می‌کنند.

معماری Ceph

یک Ceph Cluster از چندین Component اصلی تشکیل شده است.


                    Clients
                       │
          ┌────────────┼────────────┐
          ▼            ▼            ▼
         RBD          CephFS        RGW
          │            │            │
          └────────────┼────────────┘
                       ▼
                     RADOS
                       │
        ┌──────────────┼──────────────┐
        ▼              ▼              ▼
      OSDs            MONs            MGR
        │
        ▼
      Disks

مهم‌ترین اجزای Ceph عبارت‌اند از:

  • Ceph OSD
  • Ceph MON
  • Ceph Manager
  • Ceph MDS
  • RADOS
  • CRUSH
  • Pool

البته همه این Componentها در تمام Use Caseها الزاماً مورد استفاده قرار نمی‌گیرند.

Ceph OSD چیست؟

OSD مخفف Object Storage Daemon است و یکی از مهم‌ترین اجزای Ceph محسوب می‌شود.

OSD مسئول ذخیره‌سازی واقعی داده‌ها روی Storage Device و مدیریت بسیاری از عملیات مربوط به آن است.


OSD
 │
 ├── Store Data
 ├── Replication
 ├── Recovery
 ├── Rebalancing
 └── Health Reporting
      │
      ▼
     Disk

در یک Cluster واقعی معمولاً تعداد زیادی OSD وجود دارد.

برای مثال:


Server 1
 ├── OSD.0
 ├── OSD.1
 └── OSD.2

Server 2
 ├── OSD.3
 ├── OSD.4
 └── OSD.5

Server 3
 ├── OSD.6
 ├── OSD.7
 └── OSD.8

هر OSD معمولاً با یک Storage Device یا ساختار مشخصی از Storage مرتبط است.

چرا OSD مهم است؟

در بسیاری از معماری‌های Ceph، افزایش تعداد OSDها به افزایش ظرفیت Storage و در شرایط مناسب به افزایش Parallelism و Performance کمک می‌کند.

به همین دلیل Ceph بیشتر از اینکه روی یک Storage Controller قدرتمند متکی باشد، از تعداد زیادی Storage Node و OSD برای ساخت یک سیستم Distributed استفاده می‌کند.

Ceph MON چیست؟

MON یا Monitor مسئول نگهداری اطلاعات مربوط به وضعیت و Membership کلاستر است.

MONها اطلاعات مهمی درباره وضعیت Cluster و Mapهای مختلف Ceph نگهداری می‌کنند.

در یک Cluster Production معمولاً چند MON استفاده می‌شود تا در صورت از دست رفتن یک Node، سرویس Management همچنان در دسترس باشد.


             Ceph Cluster
                  │
        ┌─────────┼─────────┐
        ▼         ▼         ▼
      MON.1     MON.2     MON.3
        │         │         │
        └─────────┼─────────┘
                  ▼
             Cluster State

برای داشتن Quorum، تعداد فردی MONها در بسیاری از طراحی‌ها انتخاب می‌شود؛ برای مثال ۳ یا ۵ Monitor.

Ceph Manager چیست؟

Ceph Manager یا MGR مسئول ارائه سرویس‌های مدیریتی و Monitoring-related functionality در Ceph است.

MGR می‌تواند اطلاعات مربوط به Performance و وضعیت Cluster را در اختیار ابزارهای مدیریتی و Monitoring قرار دهد.


             Ceph Cluster
                  │
                  ▼
                MGR
             ┌────┼────┐
             ▼    ▼    ▼
          Metrics CLI Dashboard

Ceph Metadata Server چیست؟

Metadata Server یا MDS عمدتاً در زمانی مورد استفاده قرار می‌گیرد که از CephFS استفاده می‌کنیم.

MDS مسئول مدیریت Metadata مربوط به File System است.


             CephFS Client
                   │
          ┌────────┴────────┐
          ▼                 ▼
        MDS               RADOS
          │                 │
     Metadata             Data

در CephFS، داده‌های فایل و Metadata فایل دو مفهوم متفاوت هستند و MDS نقش مهمی در مدیریت Metadata دارد.

CRUSH در Ceph چیست؟

یکی از مهم‌ترین تکنولوژی‌های Ceph، الگوریتم CRUSH است.

CRUSH مخفف Controlled Replication Under Scalable Hashing است.

وظیفه اصلی CRUSH این است که مشخص کند داده‌ها در کدام OSDها قرار بگیرند، بدون اینکه برای هر Object نیاز باشد یک Lookup Table عظیم روی یک Controller مرکزی نگهداری شود.


Object
  │
  ▼
CRUSH Algorithm
  │
  ├──────────────┐
  ▼              ▼
OSD.12         OSD.37
  │              │
  ▼