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

هل يوجد بيننا (تسيفوفوودوف) من لا يحب "التطرف المهني"؟

من غير المرجح - وإلا فلن نتعثر مع هذا المنتج المثير للاهتمام والمضحك للغاية.

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

لذلك معطى:

  1. مجموعة Ceph قيد التشغيل بالفعل
  2. صورة موجودة بالفعل ويجب تقديمها عبر بروتوكول iSCSI
  3. اسم المسبح مسبحي، اسم الصورة صورتي

يبدأ؟

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

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

# yum -y install iscsi-initiator-utils targetcli

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

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

من أجل إرسال صورة عبر بروتوكول iSCSI إلى البادئ، هناك خياران لتطوير الأحداث - استخدم الواجهة الخلفية لمساحة المستخدم للهدف أو قم بتوصيل الصورة كجهاز كتلة مرئي لنظام التشغيل وتصديرها عبر بروتوكول 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

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

قم بإنشاء واجهة خلفية باسم disk1 مرتبطة بالملف /dev/rbd/mypool/myimage. الملف المحدد عبارة عن رابط رمزي تم إنشاؤه تلقائيًا بواسطة برنامج udev الخفي إلى /dev/rbd0. نستخدم رابطًا رمزيًا لأن اسم جهاز 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 حذف ... قد ينتهي بك الأمر بخادم لا يتم تحميله أو يستغرق تحميله وقتًا طويلاً.

ماذا تبقى؟

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

كيفية ضمان التسامح مع الخطأ لهدفنا؟

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

بدلا من خاتمة

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

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

المصدر: www.habr.com

إضافة تعليق