بلاگ/راه‌اندازی کلاستر Ceph با Cephadm روی سرور اختصاصی
به‌روز شده

راه‌اندازی کلاستر Ceph با Cephadm روی سرور اختصاصی

1405/06/030 بازدید
راه‌اندازی کلاستر Ceph با Cephadm روی سرور اختصاصی

راه‌اندازی کلاستر Ceph با Cephadm روی سرور اختصاصی

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

معماری کلاستر نمونه

کلاستر این آموزش از سه نود تشکیل می‌شود: - 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-node0110.20.0.1110.30.0.11/dev/sda/dev/sdb
ceph-node0210.20.0.1210.30.0.12/dev/sda/dev/sdb
ceph-node0310.20.0.1310.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 کنترل‌شده در نظر بگیرید. داشبورد وب Ceph با وضعیت سلامت Monitorها و OSDهای کلاستر چند فرمان روزمره برای پایش کلاستر عبارت‌اند از:

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ها و رفتار کلاستر هنگام خرابی است. کلاستری که فقط در وضعیت عادی آزمایش شده باشد، هنوز برای نگهداری داده مهم آماده نیست.