راه‌اندازی سف

در بخش قبل مقدمات لازم برای راه‌اندازی یک کلاستر Ceph را با همدیگر بررسی کردیم. بیش‌تر گفته شد که برای راه‌اندازی کلاستر سف دو راه‌حل وجود دارد. اولی راه‌اندازی تمامی مراحل به‌شکل دستی و دومی راه‌اندازی به کمک یک ابزار ساده به نام Ceph-Deploy. ابزار Ceph-Deploy یک روش ساده برای راه‌اندازی سریع و ساده‌ی کلاستر سف است. این روش برای افرادی که قصد تمرکز روی موارد دیگری دارند (برای مثال تست Swift API) روش خوبی به شمار می‌رود. اما برای یک محیط عملیاتی استفاده از این روش به هیچ وجه توصیه نمی‌شود. هم‌چنین در بخش اول به این موضوع نیز اشاره کردیم که نود Ceph-Deploy باید بتواند به سایر نودها (OSD Nodes) به‌شکل Password less متصل (SSH) شود. در ادامه‌ی این آموزش، روش اول مورد بررسی قرار خواهد گرفت و از بخش بعدی با نگاهی دقیق‌تر روی راه‌اندازی Manual تمرکز خواهیم کرد.

نیازمندی‌ها:

همان‌طور که در بخش قبل توضیح داده شد، برای این آموزش از ۴ سرور استفاده شده است. معماری ما در این مجموعه مقالات به این شکل است که ۳ سرور از این ۴ سرور هم‌زمان و هم‌نقش Monitoring node و هم OSD node را دارند. سرور چهارم را نیز بعد از راه‌اندازی اولیه کلاستر، به‌عنوان یک OSD node جدید به کلاستر اضافه خواهیم کرد.

استفاده از Ceph-deploy:

برای راه‌اندازی یک کلاستر سف به کمک این روش (برای یادآوری؛ منظور از کلاستر، مجموعه‌ای از سرورها است که تعدادی از آن‌ها نقش مانیتورینگ و تعدادی نقش سرورهای ذخیره سازی (OSD Servers) را دارند)، مراحل زیر را پیش خواهیم گرفت:

  • نصب Ceph-deploy

برای شروع ابتدا پکیج Ceph-Deploy را نصب می‌کنیم:

pip install ceph-deploy<c/ode>

در مرحله‌ی بعدی یک کلاستر جدید ایجاد می‌کنیم. با توجه به این‌که این دستور تعدادی فایل تولید می‌کند، بهتر است ابتدا یک پوشه‌ی جدید بسازیم و تمامی دستورات را در آن پوشه اجرا کنیم.

mkdir ceph
ceph-deploy new server1 server2 server3

New Cluster

بعد از اجرای این دستور تعدادی فایل در پوشه‌ی Ceph ایجاد خواهند شد. فایل ceph.mon.keyring کلید احراز هویت سرویس مانیتورینگ است. ceph.conf نیز شامل تنظیمات کلاستر است که در این مرحله نیاز داریم تا تعدادی از این کانفیگ‌ها را تغییر دهیم. ابتدا فایل کانفیگ را باز کنید.

vim ceph.conf

و پارامترهای زیر را به آن اضافه کنید.


 osd pool default pg num = 512
 osd pool default pgp num = 512
 osd pool default size = 3
 osd pool default min size = 2
 public network = 10.11.12.0/24

دو خط اول مربوط به تعداد pgها در هر pool است که در آینده ایجاد خواهید کرد. البته هنگام ساخت یک pool می‌توانید مقادیر دل‌خواه خودتان را اعمال کنید. دو پارامتر مربوط به size و min size مربوط به تعداد کپی‌های که می خواهید از داده‌ها داشته باشید، است. برای مثال اگر بخواهید از هر دیتایی که در سف ذخیره خواهد شد، ۲ کپی تهیه شود (مجموعن ۳ نسخه از داده وجود داشته باشد: داده اصلی + دو کپی) کانفیگ را به‌شکل زیر قرار خواهید داد.

osd pool default size = 3

کانفیگ دوم:

osd pool default min size = 2
مربوط به زمانی است که کپی‌های داده، به دلیلی از دسترس خارج شوند (برای مثال سوختن یک دیسک) در این حالت مشخص خواهیم کرد تا زمانی که دو کپی از یک داده وجود داشته باشد، عملیات Read و Write روی آن داده انجام خواهد شد. به محض این‌که کپی دوم داده نیز به هر دلیلی از دسترس خارج شود و تنها یک کپی از داده در دسترس باشد، دسترسی به آن داده به‌شکل موقت قطع خواهد شد. (تا برای رفع مشکل اقدام کنیم)  توصیه می‌شود در محیط عملیاتی حتمن تعداد این دو پارامتر به همین ترتیب باشد. در محیط‌های تستی می‌توانید این پارامترها را با اعداد کم‌تری نیز مقداردهی کنیم.

public / cluster network:

در طراحی زیرساخت کلاسترینگ سف برای بهبود کارایی، می‌توانید دو شبکه‌ی مجزا تعریف کنید. Public Network مربوط به درخواستی‌های می‌شود که از سمت کلاینت به طرف کلاستر سف می‌آید. Cluster Network نیز مربوط به ارتباط بین دیسک‌های سرور‌های مختلف است. به این ترتیب می‌توانید ترافیک کلاستر سف را به شکل کامل از ترافیک کاربران ایزوله کنید. طبیعتن Cluster Network باید پهنای باند مناسبی داشته باشد که برای این کار سرعت 40gbps پیشنهاد می‌شود. به شکل پیش‌فرض هنگامی که Cluster Network تعریف نکنید، از Public Network برای هر دو منظور استفاده خواهد شد.

  • در این مرحله روی تمامی نودها پکیج‌های مربوط به Ceph را نصب می‌کنیم.
ceph-deploy install server1 server2 server3 

با دستور بالا روی هر سه نود تمامی پکیج‌های مربوط به سف نصب خواهد شد. اخرین مرحله فعال کردن کلاستر است.

ceph-deploy mon create-initial

به این ترتیب کلاستر شما بالا آمده است. حال می‌توانید با دستور زیر وضعیت کلاستر خود را مشاهده کنید.

ceph -s - -cluster ceph

قسمت Cluster Ceph در این موقعیت اختیاری است. Ceph نام کلاستر پیش‌فرض است. اما در مواقعی که کلاستری با نامی غیرپیش‌فرض راه‌اندازی کنیم، استفاده از این بخش الزامی خواهد بود. تصویر زیر نمونه‌ای از خروجی دستور ceph -s در محیط تست است.

cluster ceph

برای این‌که بتوانید از سایر نودها نیز این دستو را اجرا کنید، باید کلید احراز هویت ادمین را که در پوشه‌ی جاری ایجاد شده است، روی سایر نودها کپی کنید. برای مثال:

rcp ceph.client.admin.keyring root@server1:/etc/ceph

اضافه کردن دیسک:

در حال حاضر ما کلاستری از سف داریم که هیچ دیسکی در آن قرار ندارد و طبیعتن چنین کلاستری بی‌استفاده خواهد بود. مرحله‌ی آخر در این بخش اضافه کردن دیسک به کلاستر است. توجه کنید این دیسک‌ها همان دیسک‌های سخت‌افزاری هستند که روی 3 سرور قرار دارند (اگر از ماشین مجازی استفاده می‌کنید، می‌توانید به هر سرور چند دیسک جدید اضافه کنید تا این قابلیت شبیه‌سازی شود) و بنا بر این است تا به عنوان یک فضای ذخیره‌سازی اشتراکی به کلاستر سف وارد شوند.

پیش‌تر بررسی کردیم برای آماده‌سازی یک دیسک لازم است از دستورات زیر استفاده کنیم.

cfdisk /dev/sdb
mkfs.xfs -f /dev/sdb

طبیعتن برای تمامی دیسک‌ها (در این سناریو هر سرور ۲ دیسک دارد) باید روال بالا را سپری کنیم. سپس دیسک‌ها را به‌وسیله‌ی ceph-deploy آماده و اکتیو می‌کنیم تا وارد کلاستر سف شوند.

ceph-deploy osd prepare server1:/dev/sdb server1:/dev/sdc server2:/dev/sdb server2:/dev/sdc server3:/dev/sdb server3:/dev/sdc
ceph-deploy osd activate server1:/dev/sdb1 server1:/dev/sdc1 server2:/dev/sdb1 server2:/dev/sdc1 server3:/dev/sdb1 server3:/dev/sdc1

با این اقدامات دیسک‌ها فعال شده و آماده‌ی استفاده است. برای تست وضعیت دیسک‌ها می‌توانید از دستور زیر استفاده نمایید.

ceph osd tree

برای گرفتن جزییات بیش‌تر از ظرفیت هر OSD از دستور زیر استفاده کنید.

ceph osd df tree

OSD

نکته: اگر به دلیلی نتوانستید دیسک را آماده و فعال کنید (Prepare and Active)، می‌توانید ابتدا از دستور زیر استفاده کنید و سپس دیسک را آماده و فعال کنید.

ceph-deploy disk zap server1:/dev/sdb server1:/dev/sdc server2:/dev/sdb server2:/dev/sdc server3:/dev/sdb server3:/dev/sdc

دستور بالا جداول پارتیشن را از روی دیسک ها پاک می‌کند. در نهایت از دستور زیر هم برای مشاهده‌ی وضعیت سلامتی کلاستر استفاده کنید.

ceph health
ceph health detail

جمع بندی

در این قسمت ما یک کلاستر سف را با ابزار ceph-deploy راه‌اندازی کردیم و چند دیسک را به‌عنوان OSD به آن اضافه کردیم تا قابلیت استفاده داشته باشد. هم‌چنین با ابزارهایی برای مانیتورینگ وضعیت سف نیز آشنا شدیم. در مقالات آینده، مواردی مانند ساختن Pool، راه‌اندازی به‌شکل Manual و با پورت غیر‌پیش‌فرض، کلاستر غیرپیش‌فرض و … نیز بررسی خواهد شد.

6 پاسخ در “راه‌اندازی یک Share Storage به کمک CEPH برای زیرساخت ابری در Ubuntu 16.04 – بخش دوم”

  • ایرج
    ۲۵ تیر ۱۳۹۷ در۱۲:۰۳ ب٫ظ

    با سلام و احترام

    مرسی از مطالب خوبتون دو تا مورد هستش خواستم بگم:
    یکی اینکه ادامه مبحث کی آماده میشه ؟
    و دوم اینکه اگه میشه در مورد erasure coding هم صحبت کنید توی scale بالا به نظر بسیار مقرون به صرفه میاد درسته؟
    با تشکر فراوان

  • محمدعرفان
    ۲۰ مرداد ۱۳۹۷ در۷:۱۷ ب٫ظ

    سلام دوست عزیز
    ان شا الله در اولین فرصتی که ایجاد بشه ادامه میدم مطالب رو
    در مورد erasure coding ملاحظاتی هستش. درسته که در خصوص فضا ممکنه صرفه جویی کنه اما لود سیستم رو هم بالا میبره و ممکنه باعث تاخیر بشود. در واقع بر اساس سناریو نیازمند یک بررسی برای مزایا معایب هستیم تا بهترین راه حل انتخاب بشه

  • حامد
    ۱ خرداد ۱۳۹۸ در۱۰:۱۳ ق٫ظ

    سلام،
    میزان Block Size درون Ceph چجور تعیین میشه؟

  • محمد
    ۲۱ خرداد ۱۳۹۸ در۵:۴۰ ب٫ظ

    سلام
    اول اینکه کامند ها درست نشون داده نمیشه لطفا سایتو درست کنید !‌
    بعد اینکه ممنون بابت اینکه اطلاعات تخصصی اینجوری رو به اشتراک میذارید
    و اینکه آیا آموزش هم میدید ؟

  • محمدرضا صابری
    ۲۷ آذر ۱۳۹۹ در۱۱:۴۷ ب٫ظ

    سلام خدا قوت
    لینک
    https://www.arvancloud.com/blog/ceph-for-cloud-storage-p3/
    در حال حاضر در دسترس نیست؟

  • علی
    ۱۸ بهمن ۱۳۹۹ در۴:۳۳ ب٫ظ

    ممنونم بابت آموزش، خدا قوت

نظرات بسته شده است.