آموزش راهاندازی Ceph با cephadm: از نصب کلاستر تا Object Storage سازگار با S3
Ceph یک سامانهی ذخیرهسازی توزیعشده و متنباز است که از یک کلاستر واحد، سه نوع ذخیرهسازی ارائه میدهد: Object Storage سازگار با S3، Block Storage برای ماشینهای مجازی و کوبرنتیز، و File System مشترک. دادهها روی چند سرور و دیسک پخش و تکثیر میشوند، پس خرابی یک دیسک یا حتی یک سرور کامل باعث از دست رفتن داده نمیشود.
در این آموزش یک کلاستر سهنودی را با ابزار رسمی cephadm راهاندازی میکنیم و در پایان یک Object Storage سازگار با S3 روی آن میسازیم.
Ceph برای چه کسانی مناسب است؟
Ceph قدرتمند است، اما ساده نیست. اگر فقط به یک فضای S3 کوچک روی یک سرور نیاز دارید، راهکارهای سبکتر کافیاند (مقایسهی آنها را در صفحهی راهاندازی Object Storage ببینید). Ceph وقتی ارزشش را دارد که:
- حجم دادهی شما زیاد است و رشد میکند (دهها ترابایت به بالا).
- به تحمل خطا در سطح سرور نیاز دارید، نه فقط در سطح دیسک.
- میخواهید از یک زیرساخت، هم S3 و هم دیسک ماشینهای مجازی یا کوبرنتیز را تأمین کنید.
پیشنیازها
- سه سرور با Ubuntu 24.04. در این آموزش نامها
ceph1،ceph2وceph3و آدرسها10.0.0.11تا10.0.0.13است. - روی هر سرور حداقل یک دیسک خالی بدون پارتیشن و فایلسیستم برای ذخیرهی داده (OSD).
- همگامسازی زمان بین سرورها. Ceph به اختلاف ساعت حساس است.
- دسترسی root و SSH بین سرورها.
- یک موتور کانتینر (Podman یا Docker). cephadm همهی سرویسهای Ceph را بهصورت کانتینر اجرا میکند.
قدم ۱: آمادهسازی همهی سرورها
روی هر سه سرور اجرا کنید:
apt update
apt install -y podman lvm2 chrony python3
systemctl enable --now chrony
نام سرورها را در /etc/hosts هر سه سرور ثبت کنید:
10.0.0.11 ceph1
10.0.0.12 ceph2
10.0.0.13 ceph3
نکتهی مهم برای سرورهای داخل ایران
cephadm ایمیجهای کانتینر Ceph را از quay.io دریافت میکند که ممکن است از ایران در دسترس نباشد. در این صورت، ایمیج را از یک Registry Mirror یا Registry خصوصی خودتان بگیرید و آدرس آن را با گزینهی --image به cephadm بدهید. روش ساخت Registry اختصاصی را در مقالهی دسترسی به Docker Hub از ایران توضیح دادهایم.
قدم ۲: نصب cephadm و ساخت کلاستر
فقط روی سرور اول (ceph1):
apt install -y cephadm
cephadm bootstrap --mon-ip 10.0.0.11
اگر از Registry خصوصی استفاده میکنید:
cephadm --image registry.your-domain.com/ceph/ceph:v19 bootstrap --mon-ip 10.0.0.11
Bootstrap چند دقیقه طول میکشد. در پایان، آدرس داشبورد وب (معمولاً https://ceph1:8443) و نام کاربری و رمز موقت آن را چاپ میکند. این خروجی را ذخیره کنید.
برای اجرای دستورات ceph روی میزبان، بستهی کلاینت را نصب کنید:
cephadm install ceph-common
ceph -s
قدم ۳: اضافه کردن سرورهای دیگر
کلید SSH کلاستر را به سرورهای دوم و سوم منتقل کنید:
ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph2
ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph3
و آنها را به کلاستر اضافه کنید:
ceph orch host add ceph2 10.0.0.12
ceph orch host add ceph3 10.0.0.13
ceph orch host ls
cephadm بهصورت خودکار سرویس Monitor را روی سرورهای جدید هم مستقر میکند تا کلاستر به سه Monitor برسد.
قدم ۴: اضافه کردن دیسکها (OSD)
دیسکهای قابل استفاده را ببینید:
ceph orch device ls
دیسکهایی که ستون AVAILABLE آنها Yes است خالی و آمادهاند. سادهترین روش، استفاده از همهی دیسکهای آزاد است:
ceph orch apply osd --all-available-devices
یا اضافه کردن دیسکها یکییکی:
ceph orch daemon add osd ceph1:/dev/sdb
چند دقیقه بعد وضعیت را بررسی کنید:
ceph osd tree
ceph -s
هدف، دیدن HEALTH_OK است.
قدم ۵: راهاندازی Object Storage سازگار با S3 (RGW)
سرویس RADOS Gateway یک API سازگار با Amazon S3 روی کلاستر Ceph ارائه میدهد. آن را روی دو سرور مستقر میکنیم تا با خرابی یکی، سرویس قطع نشود:
ceph orch apply rgw s3 --placement="2 ceph1 ceph2" --port=8080
یک کاربر S3 بسازید:
radosgw-admin user create --uid=app --display-name="Application User"
خروجی شامل access_key و secret_key است. با هر کلاینت S3، مثلاً AWS CLI، آن را تست کنید:
aws configure # access_key و secret_key را وارد کنید
aws --endpoint-url http://ceph1:8080 s3 mb s3://test-bucket
aws --endpoint-url http://ceph1:8080 s3 cp ./file.txt s3://test-bucket/
aws --endpoint-url http://ceph1:8080 s3 ls s3://test-bucket/
در محیط واقعی، یک Load Balancer (مثل HAProxy یا Nginx) با SSL جلوی سرویسهای RGW قرار دهید تا اپلیکیشنها از یک آدرس ثابت و امن استفاده کنند.
نکات محیط Production
- حداقل سه سرور: با تنظیم پیشفرض، هر داده سه نسخه دارد که روی سه سرور متفاوت قرار میگیرد.
- شبکه: حداقل ۱۰ گیگابیت، و ترجیحاً شبکهی جداگانه برای ترافیک داخلی کلاستر (Cluster Network).
- بدون RAID: دیسکها را مستقیم (HBA یا JBOD) به Ceph بدهید. افزونگی را خود Ceph مدیریت میکند.
- SSD برای متادیتا: اگر دیسکهای داده HDD هستند، قرار دادن DB/WAL روی SSD یا NVMe کارایی را بهشدت بهتر میکند.
- حافظه: هر OSD بهطور پیشفرض حدود ۴ گیگابایت RAM مصرف میکند. ظرفیت RAM را بر همین اساس حساب کنید.
- هیچوقت کلاستر را تا آخر پر نکنید: Ceph در حدود ۸۵٪ پر بودن هشدار میدهد و در ۹۵٪ نوشتن را متوقف میکند. همیشه ظرفیت کافی برای بازسازی داده بعد از خرابی یک سرور داشته باشید.
- مانیتورینگ: cephadm بهطور پیشفرض Prometheus و Grafana را هم مستقر میکند. هشدارها را به ایمیل یا پیامرسان تیم وصل کنید.
دستورات کاربردی روزمره
ceph -s # وضعیت کلی کلاستر
ceph health detail # جزئیات هشدارها
ceph df # فضای مصرفی
ceph osd df tree # مصرف هر دیسک
ceph orch ps # سرویسهای در حال اجرا
جمعبندی
با cephadm، راهاندازی اولیهی Ceph در کمتر از یک ساعت ممکن است. بخش سخت کار، طراحی درست (سختافزار، شبکه و ظرفیت) و نگهداری است: بازسازی بعد از خرابی دیسک، ارتقای نسخه و رسیدگی به هشدارها.
نمیخواهید این مسیر را خودتان بروید؟ تیم مروانت طراحی، راهاندازی و پشتیبانی کلاستر Ceph و Object Storage را روی سرورهای شما یا در دیتاسنتر مروانت انجام میدهد. صفحهی راهاندازی Object Storage اختصاصی را ببینید.
