آنچه در مورد آن صحبت خواهیم کرد:
نحوه استقرار سریع ذخیره سازی مشترک برای دو سرور بر اساس راه حل های 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
modprobe drbd
drbdadm up drbd0
cat /proc/drbd
موارد زیر را دریافت می کنیم:
می توانید همگام سازی را شروع کنید. در اولین گره باید اجرا کنید:
drbdadm primary --force drbd0
بیایید به وضعیت نگاه کنیم:
cat /proc/drbd
عالی است، همگام سازی شروع شده است. تا آخر صبر می کنیم و عکس را می بینیم:
مرحله 3. همگام سازی را در گره دوم شروع کنید:
drbdadm primary --force drbd0
موارد زیر را دریافت می کنیم:
اکنون می توانیم از دو سرور در 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 با استفاده از پارامترهای پیش فرض ایجاد کردیم.
در /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