راه اندازی یک Share Storage به کمک CEPH برای زیرساخت ابری در Ubuntu 16.04 – (بخش سوم)

۴ اردیبهشت ۱۳۹۷
سف چیست

در قسمت دوم مقدمات لازم برای راه اندازی یک کلاستر سف را با همدیگر بررسی کردیم. در آن مقاله گفته شد که برای راه اندازی کلاستر سف دو راه حل وجود دارد. اولی راه اندازی تمامی مراحل به صورت دستی و دومی راه اندازی به کمک یک ابزار ساده به نام 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

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

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 باید پهنای باند مناسبی داشته باشد که برای این کار سرعت ۴۰gbps پیشنهاد می شود. به صورت پیش فرض هنگامی که 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

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

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

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

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 و با پورت غیر پیش فرض، کلاستر غیر پیش فرض و … نیز بررسی خواهد شد.

2 ديدگاه
برچسب‌ها:
  • ایرج گفت:

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

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

  • محمدعرفان گفت:

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

  • × برای اطلاع از آخرین اخبار و مقالات آروان عضو خبرنامه ما شوید