راهاندازی کلاستر Ceph با Cephadm روی سرور اختصاصی
Ceph یک سامانه ذخیرهسازی توزیعشده است که میتواند فضای ذخیرهسازی بلوکی، فایل و آبجکت را روی مجموعهای از سرورها فراهم کند. برای ذخیرهسازی آبجکت بهتنهایی MinIO گزینهای سبکتر و سازگار با S3 است، اما Ceph سه نوع ذخیرهسازی را در یک کلاستر پوشش میدهد. در نسخههای جدید Ceph، ابزار cephadm روش رسمی استقرار و مدیریت سرویسهای کلاستر است. این ابزار سرویسهایی مانند Monitor، Manager و OSD را داخل کانتینر اجرا میکند و هماهنگی میان نودها را به عهده میگیرد.
در این راهنما، نصب Ceph با cephadm را روی سه سرور اختصاصی بررسی میکنیم. هر سرور یک دیسک برای سیستمعامل و حداقل یک دیسک خالی برای OSD دارد. فرمانها برای توزیعهای مبتنی بر Ubuntu نوشته شدهاند، اما ساختار کلی در Debian، Rocky Linux و AlmaLinux نیز مشابه است.

معماری کلاستر نمونه
کلاستر این آموزش از سه نود تشکیل میشود:
- ceph-node01: نود اولیه، Monitor، Manager و OSD
- ceph-node02: Monitor و OSD
- ceph-node03: Monitor و OSD
برای محیط عملیاتی بهتر است حداقل سه Monitor داشته باشید تا کلاستر در صورت از دسترس خارج شدن یک نود همچنان quorum داشته باشد. تعداد و ظرفیت OSDها به حجم داده، سطح افزونگی و عملکرد مورد انتظار بستگی دارد.
در نمونه زیر دو شبکه مجزا در نظر گرفته شده است:
- شبکه عمومی 10.20.0.0/24 برای ارتباط کلاینتها با کلاستر و ترافیک مدیریتی
- شبکه کلاستر 10.30.0.0/24 برای replication، recovery و ارتباط داخلی OSDها
جداسازی این دو شبکه الزامی نیست، اما در کلاسترهایی با ترافیک بالا مانع رقابت ترافیک کلاینت و عملیات بازیابی روی یک رابط شبکه میشود.
| نود | IP شبکه عمومی | IP شبکه کلاستر | دیسک سیستمعامل | دیسک OSD |
|---|---|---|---|---|
| ceph-node01 | 10.20.0.11 | 10.30.0.11 | /dev/sda | /dev/sdb |
| ceph-node02 | 10.20.0.12 | 10.30.0.12 | /dev/sda | /dev/sdb |
| ceph-node03 | 10.20.0.13 | 10.30.0.13 | /dev/sda | /dev/sdb |
نام دیسکها را از این جدول کپی نکنید. پیش از ساخت OSD، نام و وضعیت واقعی دیسک هر سرور را با lsblk بررسی کنید.
پیشنیازهای نصب Ceph با cephadm
هر سه سرور باید زمان هماهنگ، نام میزبان یکتا و ارتباط شبکه پایدار داشته باشند. بهتر است نسخه سیستمعامل، تنظیمات شبکه و ظرفیت دیسکهای OSD میان نودها یکسان یا دستکم قابل پیشبینی باشد. روی هر نود نام میزبان را تنظیم کنید:
sudo hostnamectl set-hostname ceph-node01
نام را در نودهای دیگر بهترتیب به ceph-node02 و ceph-node03 تغییر دهید. اگر DNS داخلی ندارید، رکوردهای شبکه عمومی را در فایل /etc/hosts هر سه سرور قرار دهید:
10.20.0.11 ceph-node01
10.20.0.12 ceph-node02
10.20.0.13 ceph-node03
سپس بستههای پایه را نصب کنید:
sudo apt update
sudo apt install -y chrony lvm2 curl
sudo systemctl enable --now chrony
Cephadm برای اجرای daemonها به Podman یا Docker نیاز دارد. در Ubuntu میتوان Podman را نصب کرد:
sudo apt install -y podman
podman --version
مطمئن شوید پورتهای مورد نیاز بین نودها مسدود نیستند. مهمترین موارد شامل پورتهای Monitor یعنی 3300 و 6789 و محدوده پیشفرض daemonهای Ceph یعنی 6800:7568 است. داشبورد نیز بهطور معمول از پورت 8443 استفاده میکند. این پورتها نباید بدون محدودیت در اینترنت عمومی باز باشند؛ دسترسی را با یک فایروال به شبکه مدیریتی و نودهای کلاستر محدود کنید.
بررسی دیسکهای OSD
دیسک OSD باید خالی و فاقد فایلسیستم، پارتیشن یا امضای LVM قبلی باشد. روی هر نود وضعیت دیسکها را بررسی کنید:
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS
sudo blkid
اگر /dev/sdb حاوی داده یا متعلق به سرویس دیگری است، ادامه ندهید. ساخت OSD میتواند محتوای دیسک انتخابشده را پاک کند.
برای سختافزار تولیدی، دیسک سیستمعامل را از دیسکهای OSD جدا نگه دارید. استفاده از چند دیسک مستقل بهجای یک RAID سختافزاری بزرگ نیز معمولاً کنترل بیشتری به الگوریتم CRUSH میدهد؛ البته انتخاب نهایی باید با محدودیتهای کنترلر، نوع دیسک و سیاست نگهداری مجموعه هماهنگ باشد.
نصب cephadm روی نود اول
فرمانهای این بخش را فقط روی ceph-node01 اجرا کنید. ابتدا اسکریپت cephadm را از مخزن رسمی نسخه مورد نظر دریافت کنید. در این مثال از متغیر برای مشخص کردن نسخه استفاده میشود تا ارتقا یا بازتولید نصب سادهتر باشد:
CEPH_RELEASE="squid"
curl --silent --remote-name --location \
"https://download.ceph.com/rpm-${CEPH_RELEASE}/el9/noarch/cephadm"
chmod +x cephadm
sudo mv cephadm /usr/local/sbin/cephadm
پیش از ادامه، روش نصب و نام release را با مستندات نسخهای که برای محیط خود انتخاب کردهاید تطبیق دهید. سپس repository و ابزار خط فرمان Ceph را اضافه کنید:
sudo cephadm add-repo --release squid
sudo cephadm install ceph-common
ceph --version
بوتاسترپ کلاستر
برای آغاز کلاستر، IP شبکه عمومی نود اول را به cephadm بدهید. گزینه --cluster-network نیز شبکه اختصاصی تبادل داده میان OSDها را مشخص میکند:
sudo cephadm bootstrap \
--mon-ip 10.20.0.11 \
--cluster-network 10.30.0.0/24 \
--initial-dashboard-user admin \
--initial-dashboard-password 'CHANGE-THIS-STRONG-PASSWORD'
رمز نمونه را با یک رمز قوی جایگزین کنید و آن را در history شل یا فایلهای عمومی باقی نگذارید. در محیط عملیاتی میتوان از فایل ورودی امن یا سازوکار مدیریت secrets استفاده کرد.
پس از پایان bootstrap، cephadm سرویسهای اولیه Monitor و Manager را ایجاد میکند، فایل تنظیمات را در /etc/ceph قرار میدهد و کلید عمومی SSH کلاستر را میسازد.
وضعیت کلاستر را بررسی کنید:
sudo cephadm shell -- ceph status
sudo cephadm shell -- ceph orch ps
ممکن است در این مرحله وضعیت HEALTH_WARN ببینید، زیرا هنوز OSD کافی به کلاستر اضافه نشده است. جزئیات هشدار را با فرمان زیر بخوانید:
sudo cephadm shell -- ceph health detail
افزودن نودهای دیگر
Cephadm برای استقرار سرویسها روی نودهای دیگر از SSH استفاده میکند. کلید عمومی ساختهشده را از نود اول دریافت کنید:
sudo ceph cephadm get-pub-key > ~/ceph.pub
این کلید را در حساب root نودهای دوم و سوم قرار دهید. برای مثال:
ssh-copy-id -f -i ~/ceph.pub root@ceph-node02
ssh-copy-id -f -i ~/ceph.pub root@ceph-node03
اگر ورود مستقیم root در سیاست امنیتی شما غیرفعال است، ابتدا حساب و تنظیمات SSH سازگار با cephadm را طبق سیاست سازمان آماده کنید. باز کردن موقت SSH بدون محدودیت روش مناسبی برای حل این مرحله نیست. اکنون نودها را به inventory ارکستریتور اضافه کنید:
sudo ceph orch host add ceph-node02 10.20.0.12
sudo ceph orch host add ceph-node03 10.20.0.13
sudo ceph orch host ls
نامی که در فرمان host add وارد میشود باید با خروجی hostname همان سرور سازگار باشد. اختلاف میان DNS، /etc/hosts و hostname یکی از علتهای رایج خطا هنگام افزودن نود است.
برای توزیع Monitorها روی هر سه سرور، ابتدا شبکه عمومی را ثبت و سپس placement را مشخص کنید:
sudo ceph config set mon public_network 10.20.0.0/24
sudo ceph orch apply mon --placement="ceph-node01,ceph-node02,ceph-node03"
وضعیت سرویسها را دوباره بررسی کنید:
sudo ceph orch ps --daemon-type mon
sudo ceph quorum_status --format json-pretty
ساخت OSD روی دیسکهای خالی
Ceph میتواند تمام دیسکهای آزاد و قابل استفاده را به OSD تبدیل کند، اما این روش در سروری که دیسکهای متنوع دارد نیازمند دقت بیشتری است. ابتدا فهرست دستگاههایی را که ارکستریتور میبیند بررسی کنید:
sudo ceph orch device ls --wide --refresh
ستون AVAILABLE باید برای دیسک مورد نظر مقدار Yes داشته باشد. اگر مقدار No است، ستونهای دلیل رد شدن دستگاه را بررسی کنید.
برای افزودن مشخص /dev/sdb روی هر نود:
sudo ceph orch daemon add osd ceph-node01:/dev/sdb
sudo ceph orch daemon add osd ceph-node02:/dev/sdb
sudo ceph orch daemon add osd ceph-node03:/dev/sdb
Cephadm گزینه خودکار زیر را نیز دارد:
sudo ceph orch apply osd --all-available-devices
این فرمان هر دیسک آزادی را که معیارهای Ceph را داشته باشد مصرف میکند. در محیطی که دیسک رزرو، دیسک backup یا دستگاهی برای کاربرد آینده وجود دارد، انتخاب صریح دستگاه یا استفاده از DriveGroup امنتر و قابلردیابیتر است. پس از ساخت OSDها، وضعیت آنها را کنترل کنید:
sudo ceph osd tree
sudo ceph osd stat
sudo ceph -s
سه OSD باید در وضعیت up و in دیده شوند. اگر OSD ساخته نشد، خروجی ceph orch device ls --wide و لاگ daemon مربوط را بررسی کنید:
sudo cephadm logs --name osd.<OSD_ID>
ساخت pool آزمایشی
برای اطمینان از عملکرد ذخیرهسازی، یک pool آزمایشی بسازید:
sudo ceph osd pool create test-pool 32
sudo ceph osd pool application enable test-pool rados
sudo rados -p test-pool put test-object /etc/hosts
sudo rados -p test-pool ls
sudo rados -p test-pool get test-object /tmp/test-object
مقدار PG را نباید برای کلاستر تولیدی صرفاً از این مثال برداشت کرد. تعداد OSD، شمار poolها، replication size و الگوی مصرف روی انتخاب آن اثر دارند. قابلیت autoscaler میتواند پیشنهاد مناسبتری ارائه دهد:
sudo ceph osd pool autoscale-status
پس از پایان آزمایش، داده و pool موقت را حذف کنید:
sudo rados -p test-pool rm test-object
sudo ceph osd pool delete test-pool test-pool --yes-i-really-really-mean-it
تنظیم replication و بررسی تحمل خرابی
مقدار رایج replication برای یک کلاستر سهنودی size=3 و min_size=2 است. در این حالت هر آبجکت سه نسخه دارد و تا زمانی که دستکم دو نسخه در دسترس باشند، عملیات نوشتن ادامه پیدا میکند.
تنظیم را برای pool مورد نظر بهصورت صریح اعمال کنید:
sudo ceph osd pool set <pool-name> size 3
sudo ceph osd pool set <pool-name> min_size 2
کاهش size فضای قابل استفاده را بیشتر میکند، اما تحمل خرابی و حاشیه امن هنگام recovery را کاهش میدهد. ظرفیت خام نیز با ظرفیت قابل استفاده یکسان نیست.
| روش حفاظت | فضای تقریبی مورد نیاز برای ۱ ترابایت داده | ویژگی اصلی |
|---|---|---|
| Replication با size=3 | ۳ ترابایت | بازیابی سادهتر و مناسب کلاستر کوچک |
| Replication با size=2 | ۲ ترابایت | مصرف کمتر، تحمل خرابی محدودتر |
| Erasure Coding | وابسته به پروفایل | بهرهوری ظرفیت بیشتر، پیچیدگی و سربار پردازشی بالاتر |
برای سه سرور، replication سهنسخهای معمولاً نقطه شروع قابلفهمتری است. Erasure Coding بیشتر زمانی مطرح میشود که تعداد failure domain و ظرفیت کلاستر برای پروفایل انتخابی کافی باشد.
مشاهده داشبورد و پایش کلاستر
آدرس داشبورد را با این فرمان دریافت کنید:
sudo ceph mgr services
بهطور پیشفرض داشبورد از HTTPS استفاده میکند. اگر گواهی خودامضا باشد، مرورگر هشدار میدهد. برای محیط عملیاتی بهتر است گواهی معتبر یا reverse proxy کنترلشده در نظر بگیرید.
چند فرمان روزمره برای پایش کلاستر عبارتاند از:
sudo ceph -s
sudo ceph health detail
sudo ceph orch ps
sudo ceph osd tree
sudo ceph df
هشدارهای Ceph را بدون بررسی خاموش نکنید. پیامهایی مانند کمبود replication، پر شدن OSD، کندی عملیات یا خارج شدن یک daemon از quorum معمولاً نشانه مسئلهای هستند که باید علت آن مشخص شود.
خطاهای رایج هنگام راهاندازی
نود به ارکستریتور اضافه نمیشود
نام میزبان، دسترسی SSH، وجود Python و container runtime را بررسی کنید. فرمان زیر میتواند پیشنیازهای میزبان را آزمایش کند:
sudo cephadm check-host ceph-node02
دیسک برای OSD قابل استفاده نیست
وجود پارتیشن، فایلسیستم، mount یا metadata قدیمی LVM باعث رد شدن دیسک میشود. ابتدا با lsblk و blkid مطمئن شوید دیسک درست را انتخاب کردهاید. پاکسازی دیسک عملیاتی مخرب است و باید تنها پس از تأیید شناسه و محتوای دستگاه انجام شود.
سرویسها از شبکه اشتباه استفاده میکنند
آدرسهای public_network و cluster_network را بررسی کنید:
sudo ceph config get mon public_network
sudo ceph config get osd cluster_network
همچنین routing، MTU و firewall باید در تمام نودها هماهنگ باشند. اگر از jumbo frame استفاده میکنید، MTU باید در کل مسیر شبکه پشتیبانی شود؛ تنظیم آن فقط روی کارت شبکه سرور کافی نیست.
کلاستر پس از افزودن OSD همچنان HEALTH_WARN است
جزئیات سلامت را بخوانید و صبر کنید تا placement groupها به حالت active+clean برسند:
sudo ceph health detail
sudo ceph pg stat
مدت recovery به ظرفیت دیسک، سرعت شبکه و حجم داده بستگی دارد. restart کردن پیاپی سرویسها در زمان recovery معمولاً تشخیص مشکل را دشوارتر میکند.
نکات مهم پیش از استفاده در محیط تولید
پیش از سپردن داده واقعی به کلاستر، خرابی کنترلشده یک نود، قطع یک رابط شبکه و بازگشت OSD را در بازه نگهداری آزمایش کنید. علاوه بر سلامت Ceph، وضعیت SMART دیسکها، مصرف شبکه، تأخیر OSD و ظرفیت آزاد را پایش کنید. از فایلهای تنظیمات و کلیدهای مدیریتی نسخه پشتیبان امن داشته باشید. خود Ceph جایگزین backup نیست؛ replication از دسترسپذیری در برابر خرابی سختافزار محافظت میکند، اما حذف اشتباه، خرابی نرمافزاری یا دسترسی غیرمجاز میتواند روی همه نسخهها اثر بگذارد. اگر برای اجرای کلاستر به سختافزار مستقل، دیسکهای متعدد و شبکه اختصاصی نیاز دارید، صفحه سرور اختصاصی آریاسرویس نقطه شروع مناسبی برای بررسی گزینههای زیرساخت است. پیش از سفارش، ظرفیت خام مورد نیاز، replication، تعداد رابطهای شبکه و امکان افزودن دیسک در آینده را محاسبه کنید.
جمعبندی
نصب Ceph با cephadm از یک نود اولیه آغاز میشود، سپس نودهای دیگر از طریق SSH به ارکستریتور اضافه میشوند و دیسکهای خالی به OSD تبدیل میشوند. برای کلاستر سهنودی، داشتن سه Monitor، شبکه پایدار و replication متناسب با failure domain پایهای مناسب ایجاد میکند.
پس از راهاندازی، مهمترین کار بررسی مداوم ceph health detail، ظرفیت OSDها و رفتار کلاستر هنگام خرابی است. کلاستری که فقط در وضعیت عادی آزمایش شده باشد، هنوز برای نگهداری داده مهم آماده نیست.




