Ceph از طریق iSCSI - یا اسکی در حالی که در یک بانوج ایستاده اید

آیا در میان ما کسانی هستند (تسفوفودوف) که "افراطی حرفه ای" را دوست ندارند؟

بعید است - در غیر این صورت ما با این محصول بسیار جالب و خنده دار سر در نمی آوریم.

بسیاری از کسانی که در عملیات Ceph دخیل بودند با یکی از موارد نه چندان مکرر (یا حتی بسیار نادر) اما گاهی اوقات در موارد تقاضا روبرو شده اند - اتصال Ceph از طریق iSCSI یا FC. برای چی؟ خوب، به عنوان مثال، یک تصویر از Ceph به سرور ویندوز یا سولاریس ارسال کنید که به دلایلی هنوز مجازی سازی نشده است. یا مجازی شده، اما با استفاده از هایپروایزر که نمی تواند Ceph را انجام دهد - و همانطور که می دانیم، تعداد زیادی از آنها وجود دارد. مثلا؟ خوب، به عنوان مثال، HyperV یا ESXi، که به طور فعال استفاده می شود. و اگر وظیفه ارائه یک تصویر از Ceph به یک ماشین مهمان باشد، این به یک کار بسیار هیجان انگیز تبدیل می شود.

بنابراین داده شده است:

  1. یک خوشه Ceph که قبلاً در حال اجرا است
  2. یک تصویر از قبل موجود که باید از طریق iSCSI ارائه شود
  3. نام استخر mypool، نام تصویر تصویربرداری

شروع؟

اول از همه، وقتی در مورد FC یا iSCSI صحبت می کنیم، موجودیت هایی به عنوان آغازگر و هدف داریم. Target در واقع یک سرور است، آغازگر یک مشتری است. وظیفه ما ارائه تصویر Ceph به آغازگر با حداقل تلاش است. این بدان معناست که ما باید هدف را گسترش دهیم. اما کجا، روی چه کامپیوتری؟

خوشبختانه در یک کلاستر Ceph حداقل یک کامپوننت داریم که آدرس IP آن ثابت است و یکی از مهمترین اجزای Ceph روی آن پیکربندی شده است و آن کامپوننت مانیتور است. بر این اساس، ما یک هدف iSCSI را روی مانیتور نصب می کنیم (و یک آغازگر در همان زمان، حداقل برای آزمایش). من این کار را در CentOS انجام دادم، اما راه حل برای هر توزیع دیگری نیز مناسب است - فقط باید بسته ها را به روشی که در توزیع شما قابل قبول است نصب کنید.

# yum -y install iscsi-initiator-utils targetcli

هدف از بسته های نصب شده چیست؟

  • targetcli - ابزاری برای مدیریت هدف SCSI که در هسته لینوکس تعبیه شده است
  • iscsi-initiator-utils - بسته ای با ابزارهای کاربردی که برای مدیریت آغازگر iSCSI ساخته شده در هسته لینوکس استفاده می شود

به منظور ارسال یک تصویر از طریق iSCSI به آغازگر، دو گزینه برای توسعه رویدادها وجود دارد - استفاده از backend فضای کاربر هدف یا اتصال تصویر به عنوان یک دستگاه بلوک قابل مشاهده برای سیستم عامل و صادرات آن از طریق iSCSI. ما به راه دوم خواهیم رفت - پس زمینه فضای کاربران هنوز در حالت "تجربی" است و کمی برای استفاده سازنده آماده نیست. علاوه بر این، دام هایی در آن وجود دارد که می توانید در مورد آنها زیاد صحبت کنید و (اوه وحشتناک!) بحث کنید.

اگر حتی از یک توزیع تا حدی پایدار با چرخه پشتیبانی طولانی استفاده کنیم، آنگاه هسته ای که داریم نسخه قدیمی و قدیمی است. به عنوان مثال، در CentOS7 3.10.*، در CentOS8 4.19 است. و ما علاقه مند به هسته ای با حداقل 5.3 (یا بهتر است بگوییم 5.4) و جدیدتر هستیم. چرا؟ زیرا به طور پیش فرض تصاویر Ceph دارای مجموعه ای از گزینه ها هستند که با هسته های قدیمی سازگار نیستند. این بدان معنی است که ما یک مخزن را با یک هسته جدید برای توزیع خود متصل می کنیم (به عنوان مثال، برای CentOS این elrepo است)، هسته جدید را نصب می کنیم و سیستم را برای کار با هسته جدید راه اندازی مجدد می کنیم:

  • به مانیتور انتخاب شده برای آزمایش وصل شوید
  • ما مخازن elrepo را طبق دستورالعمل به هم متصل می کنیم - elrepo.org/tiki/tiki-index.php
  • هسته را نصب کنید: yum -y —enablerepo=elrepo-kernel install kernel-ml
  • سرور را با مانیتور راه اندازی مجدد کنید (ما سه مانیتور داریم، درست است؟)

اتصال تصویر به عنوان یک دستگاه بلوک

# rbd map mypool/myimage
/dev/rbd0

تنها چیزی که باقی می ماند پیکربندی هدف است. در این مثال، من هدف را به اصطلاح پیکربندی می کنم. حالت دمو - بدون احراز هویت، قابل مشاهده و در دسترس برای همه. در یک محیط تولید، احتمالاً می خواهید احراز هویت را پیکربندی کنید - اما این برای تمرین سرگرم کننده امروزی کمی خارج از محدوده است.

یک Backend به نام disk1 ایجاد کنید که با فایل /dev/rbd/mypool/myimage مرتبط است. فایل مشخص شده یک پیوند نمادین است که به طور خودکار توسط udev daemon به /dev/rbd0 ایجاد می شود. ما از یک پیوند نمادین استفاده می کنیم زیرا نام دستگاه rbd بسته به ترتیب اتصال تصاویر Ceph به میزبان می تواند تغییر کند.

ایجاد یک Backend:

# targetcli /backstores/block create disk1 /dev/rbd/mypool/myimage

یک هدف iSCSI ایجاد کنید:

# targetcli /iscsi create iqn.2020-01.demo.ceph:mypool

ما backend را به عنوان یک LUN به هدف متصل می کنیم:

# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/luns create /backstores/block/disk1

بیایید هدف را برای حالت نمایشی پیکربندی کنیم:

# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set
> attribute demo_mode_write_protect=0
# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set
> attribute generate_node_acls=1
# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set
> attribute cache_dynamic_acls=1

تنظیمات را ذخیره کنید:

# targetcli saveconfig

بررسی حضور هدف:

# iscsiadm -m discovery -t st -p 127.0.0.1:3260
127.0.0.1:3260,1 iqn.2020-01.demo.ceph:mypool

ما هدف را وصل می کنیم:

# iscsiadm -m node --login
Logging in to [iface: default, target: iqn.2020-01.demo.ceph:mypool, portal: 127.0.0.1,3260] (multiple)
Login to [iface: default, target: iqn.2020-01.demo.ceph:mypool, portal: 127.0.0.1,3260] successful.

اگر همه کارها را به درستی انجام داده باشید، یک دیسک جدید روی سرور ظاهر می شود که شبیه یک دستگاه SCSI است، اما در واقع تصویری از Ceph است که از طریق یک هدف iSCSI قابل دسترسی است. برای جلوگیری از مشکلات بوت، بهتر است دیسک متصل و هدف شناسایی شده را از آغازگر محلی حذف کنید:

# iscsiadm -m node --logout
# iscsiadm -m discoverydb -o delete -t st -p 127.0.0.1:3260

تنها چیزی که باقی می ماند این است که پیکربندی را ادامه دهید تا تصویر به طور خودکار متصل شود و پس از اتصال، هدف طبقه بندی شود. پرتاب یک هدف شامل دو مرحله است - اتصال RBD و در واقع پرتاب هدف.

ابتدا اجازه دهید اتصال خودکار تصاویر RBD به هاست را پیکربندی کنیم. این کار با افزودن خطوط زیر به فایل /etc/ceph/rbdmap انجام می شود:

# cat /etc/ceph/rbdmap
# RbdDevice Parameters
mypool/myimage id=admin
# systemctl enable rbdmap

بازیابی پیکربندی هدف کمی پیچیده تر است - ما باید یک واحد برای systemd بنویسیم که پیکربندی را بازیابی کند:

# cat /usr/lib/systemd/system/scsi-target.service
[Unit] Description=Start iSCSI target

After=network-online.target rbdmap.service
Before=remote-fs-pre.target
Wants=network-online.target remote-fs-pre.target

[Service] Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/targetcli restoreconfig

[Install] WantedBy=multi-user.target

# systemctl daemon-reload
# systemctl enable scsi-target

آزمایش نهایی این است که مانیتور خود را دوباره راه اندازی کنیم (اکنون یک هدف iSCSI است). لازم به ذکر است که اگر پایگاه داده آغازگر را با دستور پاک نکرده بودیم iscsiadm -n discoverydb -o حذف ... شما می توانید با سروری مواجه شوید که بارگیری نمی شود یا زمان زیادی برای بارگذاری طول می کشد.

چی چیز باقی مانده است؟

آغازگر را روی سروری که می خواهیم هدف را به آنجا ارسال کنیم، پیکربندی کنید.

چگونه از تحمل خطای هدف خود اطمینان حاصل کنیم؟

شما می توانید به طور مشابه اهداف را در سایر مانیتورها پیکربندی کنید و چند مسیری را راه اندازی کنید (vmware این را درک می کند و حتی کار می کند، Hyper-V نمی فهمد - به قفل های SCSI نیاز دارد). از آنجایی که کلاینت Ceph از هسته از کش استفاده نمی کند، این کاملاً قابل اجرا است. یا گزینه دیگر ایجاد یک منبع خوشه ای از سه جزء است - یک آدرس IP هدف اختصاصی و سرویس های rbdmap و sci-target، و مدیریت این منبع از طریق ابزارهای خوشه بندی (چه کسی ضربان ساز گفته است؟)

به جای یک کلمه پس از آن

همانطور که واضح است، این مقاله کمی شوخی است - اما در آن سعی کردم "سریع و با مثال" چندین موضوع نسبتاً محبوب را همزمان در نظر بگیرم - هدف iSCSI، که ممکن است لزوماً تصاویر Ceph را صادر نکند - اما برای مثال، صادرات حجم LVM، اصول اولیه کار با یک آغازگر iSCSI (نحوه اسکن یک هدف، نحوه اتصال به یک هدف، قطع اتصال، حذف یک ورودی هدف از پایگاه داده)، نوشتن واحد خود برای systemd و برخی دیگر

امیدوارم حتی اگر کل این آزمایش را به طور کامل تکرار نکنید، حداقل چیزی از این مقاله برای شما مفید باشد.

منبع: www.habr.com

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