Ceph عبر iSCSI - أو التزلج أثناء الوقوف في أرجوحة

هل هناك بيننا (cefovodov) أولئك الذين لا يحبون "المدقع المهنية"؟

من غير المحتمل - وإلا فإننا لن نتخبط مع هذا المنتج الممتع والممتع للغاية.

التقى العديد من أولئك الذين شاركوا في استغلال Ceph بواحد غير متكرر للغاية (ولكن حتى نادر جدًا) لكنهم طالبوا أحيانًا بالحالة - لربط Ceph عبر iSCSI أو FC. لماذا؟ حسنًا ، على سبيل المثال ، أرسل صورة من Ceph إلى خادم Windows أو Solaris غير افتراضي بعد. أو افتراضية ، ولكن من خلال برنامج Hypervisor لا يعرف Ceph كيفية القيام بذلك ، وكما نعلم ، هناك ما يكفي منها. على سبيل المثال؟ حسنًا ، على سبيل المثال ، HyperV أو ESXi ، والتي تستخدم بنشاط. وإذا نشأت المهمة لإرسال الصورة من Ceph إلى جهاز الضيف ، فإن هذا يتحول إلى مهمة مثيرة للغاية.

لذلك ، أعطيت:

  1. تعمل بالفعل الكتلة Ceph
  2. صورة حالية يجب إرسالها عبر بروتوكول iSCSI
  3. اسم تجمع mypool ، اسم الصورة myimage

هل بدأنا؟

بادئ ذي بدء ، عندما نتحدث عن FC أو iSCSI ، نحصل على كيانات مثل المبادر والهدف. الهدف هو في الواقع خادم ، البادئ هو عميل. مهمتنا هي تقديم صورة Ceph إلى البادئ بأقل قدر من العمل. لذلك علينا نشر الهدف. ولكن أين ، على أي جهاز كمبيوتر؟

لحسن الحظ ، في نظام Ceph ، لدينا مكون واحد على الأقل يكون عنوان IP الخاص به ثابتًا وعلى أي مكون من أهم مكونات Ceph تم تكوينه ، وهذا المكون عبارة عن شاشة. وفقًا لذلك ، على الشاشة وضعنا هدف iSCSI (والبادئ في نفس الوقت ، على الأقل للاختبارات). لقد قمت بذلك على CentOS ، ولكن بالنسبة لأي توزيع آخر ، الحل مناسب أيضًا - فقط ضع الحزم بالطريقة المقبولة في التوزيع الخاص بك.

# yum -y install iscsi-initiator-utils targetcli

ما هو الغرض من الحزم المثبتة؟

  • targetcli - Linux SCSI أداة إدارة الهدف لـ Linux kernel
  • iscsi-initiator-utils - حزمة مع أدوات مساعدة تستخدم للتحكم في بادئ iSCSI المضمنة في نواة Linux مرة أخرى

من أجل إرسال صورة عبر iSCSI إلى البادئ ، هناك خياران لتطوير الأحداث - استخدم مساحة المستخدم الخلفية للهدف أو توصيل الصورة كجهاز كتلة مرئي لنظام التشغيل وتصديره عبر iSCSI. سنذهب في الاتجاه الثاني - لا تزال الواجهة الخلفية لـ userpace في حالة "تجريبية" وليست جاهزة للاستخدام المثمر. بالإضافة إلى ذلك ، هناك عيوب معه يمكنك التحدث عنها و (يا رعب!) يجادل.

إذا استخدمنا بعض التوزيع المستقر على الأقل مع دورة دعم طويلة ، عندها لدينا جوهر بعض الإصدارات القديمة. على سبيل المثال ، في CentOS7 هو 3.10. * ، في CentOS8 هو 4.19. ونحن مهتمون بنواة لا تقل عن 5.3 (ولكن بدلاً من 5.4) وأحدث. لماذا؟ لأنه بشكل افتراضي ، تحتوي الصور في Ceph على مجموعة من الخيارات المرفقة غير متوافقة مع النواة القديمة. لذلك ، نحن نربط المستودع بنواة جديدة لتوزيعنا (على سبيل المثال ، بالنسبة لنظام CentOS هو elrepo) ، ونقوم بتثبيت نواة جديدة وإعادة تشغيل النظام للعمل مع النواة الجديدة:

  • اتصل بالشاشة المحددة للتجربة
  • نقوم بتوصيل مستودعات elrepo وفقًا للتعليمات - elrepo.org/tiki/tiki-index.php
  • قم بتثبيت kernel: yum -y --enablerepo = elrepo-kernel قم بتثبيت kernel-ml
  • نقوم بإعادة تشغيل الخادم باستخدام الشاشة (بعد كل شيء ، لدينا ثلاثة شاشات ، أليس كذلك؟)

قم بتوصيل الصورة كجهاز كتلة

# rbd map mypool/myimage
/dev/rbd0


يبقى فقط لتكوين الهدف. في هذا المثال ، سوف أقوم بتكوين الهدف فيما يسمى وضع العرض التوضيحي - بدون مصادقة ومرئية ومتاحة للجميع. في بيئة منتجة ، من المحتمل أن ترغب في تكوين المصادقة - لكن هذا يعد جزءًا من النطاق الخارج عن نطاق التمرين اليوم المخصص للمتعة فقط.

إنشاء خلفية مع اسم disk1 المعين إلى الملف / dev / rbd / mypool / myimage. الملف المحدد هو رابط رمزي لـ / dev / rbd0 يتم إنشاؤه تلقائيًا بواسطة البرنامج الخفي udev. نحن نستخدم رابطًا رمزيًا لأن اسم جهاز rbd يمكن أن يتغير نظرًا للترتيب الذي تتصل به صور Ceph بالمضيف.

إنشاء خلفية:

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

قم بإنشاء هدف iSCSI:

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

قم بتوصيل الواجهة الخلفية باعتبارها 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 delete ... فربما كان بإمكاننا الحصول على خادم لم يتم تحميله أو تم تحميله لفترة طويلة.

ما تبقى؟

قم بتكوين البادئ على الخادم حيث نريد إرسال الهدف.

كيف نضمن مرونة هدفنا؟

يمكنك بالمثل تكوين الأهداف على الشاشات الأخرى وترتيب مسارات متعددة (سوف تتفهم vmware هذا وستعمل ، لن يفهم Hyper-V - أقفال SCSI مطلوبة هناك). نظرًا لأن عميل Ceph من kernel لا يستخدم التخزين المؤقت ، فهذا وظيفي تمامًا. أو هناك خيار آخر يتمثل في إنشاء مورد نظامي مكون من ثلاثة مكونات - عنوان IP مخصص للهدف وخدمات rbdmap و scsi-target ، وإدارة هذا المورد من خلال أدوات التجميع (من قال منظم ضربات القلب؟)

بدلا من الكلمة الأخيرة


كما تعلمون ، هذه المقالة مزحة بعض الشيء - لكنني حاولت فيها "بسرعة وأمثلة" التفكير في عدة مواضيع شائعة في نفس الوقت - هدف iSCSI ، والذي قد لا يقوم بالضرورة بتصدير صور Ceph - ولكن على سبيل المثال تصدير وحدات تخزين LVM ، أساسيات العمل مع بادئ iSCSI ( كيفية مسح هدف ، كيفية الاتصال بهدف ، قطع اتصال ، حذف سجل هدف من قاعدة البيانات) ، اكتب وحدتك الخاصة بالنظام وبعض الآخرين

آمل أنه حتى لو لم تكرر هذه التجربة بالكامل بالكامل ، فإن شيئًا على الأقل من هذه المقالة سيكون مفيدًا لك.

Source: https://habr.com/ru/post/ar483974/


All Articles