ذخیره سازی خوشه ای برای خوشه های وب کوچک مبتنی بر drbd+ocfs2

آنچه در مورد آن صحبت خواهیم کرد:
نحوه استقرار سریع ذخیره سازی مشترک برای دو سرور بر اساس راه حل های drbd+ocfs2.

این برای چه کسانی مفید خواهد بود:
این آموزش برای مدیران سیستم و هر کسی که روش اجرای ذخیره سازی را انتخاب می کند یا می خواهد راه حل را امتحان کند مفید خواهد بود.

چه تصمیماتی را رد کردیم و چرا؟

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

  • Glusterfs ما را از عملکرد خواندن و نوشتن راضی نکرد؛ در خواندن همزمان تعداد زیادی فایل مشکلاتی وجود داشت و بار زیادی روی CPU وجود داشت. مشکل خواندن فایل ها را می توان با دسترسی مستقیم به آنها از طریق آجر حل کرد، اما این همیشه قابل اجرا نیست و به طور کلی نادرست است.

  • Ceph پیچیدگی بیش از حد را دوست نداشت، که می تواند برای پروژه هایی با 2-4 سرور مضر باشد، به خصوص اگر پروژه متعاقباً حفظ شود. باز هم، محدودیت‌های عملکردی جدی وجود دارد که ما را مجبور می‌کند تا خوشه‌های ذخیره‌سازی جداگانه بسازیم، مانند glusterfs.

  • استفاده از یک سرور NFS برای پیاده سازی فضای ذخیره سازی مشترک سوالاتی را در زمینه تحمل خطا ایجاد می کند.

  • s3 یک راه حل محبوب عالی برای طیف خاصی از وظایف است، اما یک سیستم فایل نیست که دامنه آن را محدود کند.

  • lsyncd. اگر قبلاً صحبت در مورد "سیستم های غیر فایل" را شروع کرده ایم، ارزش آن را دارد که این راه حل محبوب را مرور کنیم. نه تنها برای تبادل دو طرفه مناسب نیست (بلکه اگر واقعاً می خواهید، پس می توانید)، همچنین روی تعداد زیادی فایل به طور پایدار کار نمی کند. یک نکته خوب به کل این است که تک رشته است. دلیل آن در معماری برنامه است: از inotify برای نظارت بر اشیاء کاری استفاده می کند که در هنگام راه اندازی و در حین اسکن مجدد آنها را اختصاص می دهد. rsync به عنوان رسانه انتقال استفاده می شود.

آموزش: نحوه استقرار حافظه مشترک بر اساس drbd+ocfs2

یکی از راحت ترین راه حل ها برای ما لینک بود ocfs2+drbd. اکنون به شما خواهیم گفت که چگونه می توانید به سرعت فضای ذخیره سازی مشترک را برای دو سرور بر اساس پایگاه داده راه حل مستقر کنید. اما ابتدا کمی در مورد اجزای سازنده:

DRBD - یک سیستم ذخیره سازی از توزیع استاندارد لینوکس که به شما امکان می دهد داده ها را بین سرورها در بلوک ها تکرار کنید. کاربرد اصلی ساخت حافظه مقاوم در برابر خطا است.

OCFS2 - یک سیستم فایل که استفاده مشترک از یک فضای ذخیره سازی را توسط چندین سیستم فراهم می کند. در توزیع لینوکس گنجانده شده است و یک ماژول هسته و ابزار فضای کاربر برای کار با FS است. OCFS2 را می توان نه تنها از طریق DRBD، بلکه از طریق iSCSI با چندین اتصال استفاده کرد. در مثال ما از DRBD استفاده می کنیم.

تمام اقدامات در سرور اوبونتو 18.04 با حداقل پیکربندی انجام می شود.

مرحله 1. پیکربندی DRBD:

در فایل /etc/drbd.d/drbd0.res دستگاه بلوک مجازی خود را /dev/drbd0 شرح می دهیم:

resource drbd0 {
    syncer { rate 1000M; }
    net {
        allow-two-primaries;
        after-sb-0pri discard-zero-changes;
        after-sb-1pri discard-secondary;
        after-sb-2pri disconnect;
    }
    startup { become-primary-on both; }
    on drbd1 {
        meta-disk internal;
        device /dev/drbd0;
        disk /dev/vdb1;
        address 10.10.10.192:7789;
}
    on drbd2 {
        meta-disk internal;
        device /dev/drbd0;
        disk /dev/vdb1;
        address 10.10.10.193:7789;
}
}

متا دیسک داخلی - از همان دستگاه های بلوک برای ذخیره متادیتا استفاده کنید
دستگاه /dev/drbd0 - از /dev/drbd0 به عنوان مسیر رسیدن به حجم drbd استفاده کنید.
دیسک /dev/vdb1 - از /dev/vdb1 استفاده کنید
همگام سازی { نرخ 1000M; } - از پهنای باند کانال گیگابیت استفاده کنید
اجازه - دو - مقدماتی - یک گزینه مهم که اجازه می دهد تغییرات در دو سرور اصلی پذیرفته شود
after-sb-0pri، after-sb-1pri، after-sb-2pri - گزینه‌هایی که مسئول اعمال گره در هنگام شناسایی splitbrain هستند. جزئیات بیشتر را می توان در مستندات یافت.
تبدیل شدن به-اولیه-در هر دو - هر دو گره را روی اولیه قرار می دهد.

در مورد ما، ما دو ماشین مجازی کاملاً یکسان با یک شبکه مجازی اختصاصی با توان عملیاتی 10 گیگابیت داریم.

در مثال ما، نام شبکه دو گره خوشه drbd1 و drbd2 است. برای عملکرد صحیح، باید نام و آدرس IP هاست ها را در /etc/hosts مطابقت دهید.

10.10.10.192 drbd1
10.10.10.193 drbd2

مرحله 2. تنظیم گره ها:

در هر دو سرور ما اجرا می کنیم:

drbdadm create-md drbd0

ذخیره سازی خوشه ای برای خوشه های وب کوچک مبتنی بر drbd+ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

موارد زیر را دریافت می کنیم:

ذخیره سازی خوشه ای برای خوشه های وب کوچک مبتنی بر drbd+ocfs2

می توانید همگام سازی را شروع کنید. در اولین گره باید اجرا کنید:

drbdadm primary --force drbd0

بیایید به وضعیت نگاه کنیم:

cat /proc/drbd

ذخیره سازی خوشه ای برای خوشه های وب کوچک مبتنی بر drbd+ocfs2

عالی است، همگام سازی شروع شده است. تا آخر صبر می کنیم و عکس را می بینیم:

ذخیره سازی خوشه ای برای خوشه های وب کوچک مبتنی بر drbd+ocfs2

مرحله 3. همگام سازی را در گره دوم شروع کنید:

drbdadm primary --force drbd0

موارد زیر را دریافت می کنیم:

ذخیره سازی خوشه ای برای خوشه های وب کوچک مبتنی بر drbd+ocfs2

اکنون می توانیم از دو سرور در drbd بنویسیم.

مرحله 4. ocfs2 را نصب و پیکربندی کنید.

ما از یک پیکربندی نسبتاً بی اهمیت استفاده خواهیم کرد:

cluster:
     node_count = 2
     name = ocfs2cluster

node:
     number = 1
     cluster = ocfs2cluster
     ip_port = 7777
     ip_address = 10.10.10.192
     name = drbd1

node:
     number = 2
     cluster = ocfs2cluster
     ip_port = 7777
     ip_address = 10.10.10.193
     name = drbd2

باید در آن نوشته شود /etc/ocfs2/cluster.conf در هر دو گره

ما یک FS روی drbd0 در هر گره ایجاد می کنیم:

mkfs.ocfs2 -L "testVol" /dev/drbd0

در اینجا ما یک فایل سیستم با برچسب testVol در drbd0 با استفاده از پارامترهای پیش فرض ایجاد کردیم.

ذخیره سازی خوشه ای برای خوشه های وب کوچک مبتنی بر drbd+ocfs2

در /etc/default/o2cb باید تنظیم کنید (مانند فایل پیکربندی ما)

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

و روی هر گره اجرا کنید:

o2cb register-cluster ocfs2cluster

سپس تمام واحدهایی که برای اجرای خودکار نیاز داریم را روشن کرده و اضافه می کنیم:

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

برخی از این موارد از قبل در طول فرآیند راه اندازی اجرا می شوند.

مرحله 5. نقاط اتصال را به fstab در هر دو گره اضافه کنید:

/dev/drbd0 /media/shared ocfs2 defaults,noauto,heartbeat=local 0 0

فهرست راهنما /رسانه/به اشتراک گذاشته شده باید از قبل ایجاد شود.

در اینجا از گزینه‌های noauto استفاده می‌کنیم، به این معنی که فایل در هنگام راه‌اندازی مونت نمی‌شود (من ترجیح می‌دهم فایل‌های شبکه را از طریق systemd مونت کنم) و heartbeat=local که به معنای استفاده از سرویس ضربان قلب در هر گره است. ضربان قلب جهانی نیز وجود دارد که بیشتر برای خوشه های بزرگ مناسب است.

بعد می توانید سوار شوید /رسانه/به اشتراک گذاشته شده و همگام سازی محتوا را بررسی کنید.

انجام شده است در نتیجه، ذخیره‌سازی کم و بیش مقاوم در برابر خطا با مقیاس‌پذیری و عملکرد مناسب را دریافت می‌کنیم.

منبع: www.habr.com

اضافه کردن نظر