تخزين موثوق به مع DRBD9 و Proxmox (الجزء 2: iSCSI + LVM)

الصورة


في مقال سابق ، درست إمكانية إنشاء خادم NFS يتحمل الأخطاء باستخدام DRBD و Proxmox. اتضح الأمر جيدًا ، لكننا لن نرتاح في أمجادنا ، والآن سنحاول "عصر جميع العصائر" من مخازنتنا.


في هذه المقالة ، سأخبرك بكيفية إنشاء هدف iSCSI المتسامح بهذه الطريقة ، والذي سنستخدم LVM لتقطيعه إلى قطع صغيرة واستخدامها للأجهزة الافتراضية.


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


بضع كلمات حول DRBD


DRBD هو حل بسيط وناضج إلى حد ما ؛ يتم اعتماد رمز الإصدار الثامن كجزء من نواة Linux. في الواقع ، إنه يمثل مرآة شبكة RAID1. قدم الإصدار التاسع دعم النصاب والنسخ المتماثل بأكثر من عقدتين.


في الواقع ، يسمح لك بدمج أجهزة الحظر على عدة عقد فعلية في شبكة مشتركة واحدة مشتركة.


باستخدام DRBD يمكنك تحقيق تكوينات مثيرة للاهتمام للغاية. اليوم سنتحدث عن iSCSI و LVM.


يمكنك معرفة المزيد عن ذلك من خلال قراءة مقالتي السابقة ، حيث وصفت هذا الحل بالتفصيل.


بضع كلمات حول iSCSI


إن بروتوكول iSCSI هو بروتوكول تسليم جهاز منع عبر شبكة.


على عكس NBD ، فهو يدعم التخويل ، ويعمل على فشل الشبكة دون مشاكل ويدعم العديد من الوظائف المفيدة الأخرى ، والأهم من ذلك أنه يظهر أداءً جيدًا للغاية.


هناك عدد كبير من تطبيقاتها ، بعضها مدرج أيضًا في النواة ولا تتطلب صعوبات خاصة لتكوينها واتصالها.


بضع كلمات حول LVM


من الجدير بالذكر أن LINBIT لديها حلها الخاص لـ Proxmox ، يجب أن تعمل خارج الصندوق وتسمح بتحقيق نتيجة مماثلة ، ولكن في هذه المقالة لا أريد التركيز فقط على Proxmox ووصف بعض الحلول الأكثر شمولية المناسبة لكل من Proxmox و أي شيء آخر ، في هذا المثال ، يتم استخدام proxmox فقط كوسيلة لتنسيق الحاويات ، في الواقع يمكنك استبداله بحل آخر ، على سبيل المثال ، حاويات الإطلاق ذات الهدف في Kubernetes.


بالنسبة إلى Proxmox على وجه التحديد ، فإنه يعمل بشكل جيد مع LUN و LVM المشتركين ، وذلك باستخدام برامج التشغيل القياسية الخاصة به فقط.


تشمل مزايا LVM حقيقة أن استخدامه ليس شيئًا ثوريًا جديدًا وغير كافٍ ، ولكنه على العكس ، يظهر استقرارًا جافًا ، وهو مطلوب عادةً من التخزين. من الجدير بالذكر أن LVM يستخدم بنشاط في بيئات أخرى ، على سبيل المثال ، في OpenNebula أو Kubernetes ، وهو مدعوم جيدًا هناك.


وبالتالي ، ستتلقى تخزينًا عالميًا يمكن استخدامه في أنظمة مختلفة (ليس فقط في البروكسموكس) ، وذلك باستخدام برامج التشغيل الجاهزة فقط ، دون الحاجة إلى تعديلها بملف.


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


نعم ، يدعم LVM تجمعات التزويد الرقيق الخالية من هذا العيب ، ولكن للأسف لا يمكن استخدامها إلا في سياق عقدة واحدة ولا توجد طريقة لمشاركة تجمّع رفيع واحد للعديد من العقد في المجموعة.


ولكن على الرغم من هذه العيوب ، نظرًا لبساطتها ، لا تزال LVM لا تسمح للمنافسين بالالتفاف حولها ودفعها بالكامل خارج ساحة المعركة.


مع حمل صغير إلى حد ما ، لا تزال LVM توفر حلًا سريعًا جدًا ومستقرًا ومرناً إلى حد ما.


مخطط عام


  • لدينا ثلاث عقد
  • تحتوي كل عقدة على جهاز drbd موزع.
  • في الجزء العلوي من جهاز drbd ، تم إطلاق حاوية LXC ذات هدف iSCSI.
  • الهدف متصل بالعقد الثلاث.
  • تم إنشاء مجموعة LVM على الهدف المتصل.
  • إذا لزم الأمر ، يمكن أن تنتقل حاوية LXC إلى عقدة أخرى ، مع هدف iSCSI

التخصيص


لقد توصلنا إلى الفكرة الآن ، دعنا ننتقل إلى التنفيذ.


بشكل افتراضي ، يتم توفير الإصدار الثامن من drbd مع نواة لينكس ، للأسف لا يناسبنا ونحن بحاجة إلى تثبيت الإصدار التاسع من الوحدة.


قم بتوصيل مستودع LINBIT وقم بتثبيت كل ما تحتاجه:


wget -O- https://packages.linbit.com/package-signing-pubkey.asc | apt-key add - echo "deb http://packages.linbit.com/proxmox/ proxmox-5 drbd-9.0" \ > /etc/apt/sources.list.d/linbit.list apt-get update && apt-get -y install pve-headers drbd-dkms drbd-utils drbdtop 

  • pve-headers kernel اللازمة لبناء الوحدة
  • drbd-dkms - وحدة kernel في شكل DKMS
  • drbd-utils - المرافق الأساسية لإدارة DRBD
  • drbdtop هو أداة تفاعلية مثل القمة لـ DRBD فقط

بعد تثبيت الوحدة ، تحقق مما إذا كان كل شيء على ما يرام معها:


 # modprobe drbd # cat /proc/drbd version: 9.0.14-1 (api:2/proto:86-113) 

إذا رأيت الإصدار الثامن في إخراج الأمر ، حدث خطأ ما وتم تحميل وحدة kernel داخل الشجرة . تحقق من dkms status لمعرفة السبب.


سيكون لكل عقدة لدينا نفس جهاز drbd يعمل على الأقسام العادية. نحتاج أولاً إلى إعداد هذا القسم لـ drbd على كل عقدة.


يمكن أن يكون هذا القسم أي جهاز كتلة ، يمكن أن يكون lvm أو zvol أو قسم القرص أو القرص بأكمله. في هذه المقالة سأستخدم قرص nvme منفصل مع قسم تحت drbd: /dev/nvme1n1p1


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


يمكنك العثور على مثل هذا الارتباط الرمزي لـ /dev/nvme1n1p1 بهذه الطريقة:


 # find /dev/disk/ -lname '*/nvme1n1p1' /dev/disk/by-partuuid/847b9713-8c00-48a1-8dff-f84c328b9da2 /dev/disk/by-path/pci-0000:0e:00.0-nvme-1-part1 /dev/disk/by-id/nvme-eui.0000000001000000e4d25c33da9f4d01-part1 /dev/disk/by-id/nvme-INTEL_SSDPEKKA010T7_BTPY703505FB1P0H-part1 

نحن نصف مواردنا على جميع العقد الثلاث:


 # cat /etc/drbd.d/tgt1.res resource tgt1 { meta-disk internal; device /dev/drbd100; protocol C; net { after-sb-0pri discard-zero-changes; after-sb-1pri discard-secondary; after-sb-2pri disconnect; } on pve1 { address 192.168.2.11:7000; disk /dev/disk/by-partuuid/95e7eabb-436e-4585-94ea-961ceac936f7; node-id 0; } on pve2 { address 192.168.2.12:7000; disk /dev/disk/by-partuuid/aa7490c0-fe1a-4b1f-ba3f-0ddee07dfee3; node-id 1; } on pve3 { address 192.168.2.13:7000; disk /dev/disk/by-partuuid/847b9713-8c00-48a1-8dff-f84c328b9da2; node-id 2; } connection-mesh { hosts pve1 pve2 pve3; } } 

من المستحسن استخدام شبكة منفصلة لمزامنة drbd.


الآن قم بإنشاء بيانات التعريف لـ drbd وقم بتشغيلها:


 # drbdadm create-md tgt1 initializing activity log initializing bitmap (320 KB) to all zero Writing meta data... New drbd meta data block successfully created. success # drbdadm up tgt1 

كرر هذه الخطوات على العقد الثلاث وتحقق من الحالة:


 # drbdadm status tgt1 role:Secondary disk:Inconsistent pve2 role:Secondary peer-disk:Inconsistent pve3 role:Secondary peer-disk:Inconsistent 

الآن قرصنا غير المتناسق موجود على جميع العقد الثلاث ، وذلك لأن drbd لا يعرف أي قرص يجب أن يؤخذ على أنه الأصلي. يجب وضع علامة على أحدها على أنه أساسي حتى تتم مزامنة حالته مع العقد الأخرى:


 drbdadm primary --force tgt1 drbdadm secondary tgt1 

مباشرة بعد ذلك ، ستبدأ المزامنة :


 # drbdadm status tgt1 role:Secondary disk:UpToDate pve2 role:Secondary replication:SyncSource peer-disk:Inconsistent done:26.66 pve3 role:Secondary replication:SyncSource peer-disk:Inconsistent done:14.20 

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


لا تنسى تفعيل التشغيل التلقائي لخدمة drbd على العقد:


 systemctl enable drbd.service 

تكوين حاوية LXC


سنحذف جزء التهيئة من مجموعة Proxmox من ثلاث عقد ، وهذا الجزء موصوف جيدًا في الويكي الرسمي


كما قلت من قبل ، سيعمل هدف iSCSI في حاوية LXC . /dev/drbd100 بالحاوية على الجهاز /dev/drbd100 الذي /dev/drbd100 للتو.


نحتاج أولاً إلى إنشاء نظام ملفات عليه:


 mkfs -t ext4 -O mmp -E mmp_update_interval=5 /dev/drbd100 

يتضمن Proxmox بشكل افتراضي حماية متعددة على مستوى نظام الملفات ، من حيث المبدأ ، يمكننا الاستغناء عنها ، لأنه تتمتع DRBD بحمايتها الخاصة بشكل افتراضي ، فهي ببساطة تمنع الأساسي الثاني للجهاز ، ولكن الحذر لا يؤذينا.


الآن قم بتنزيل قالب Ubuntu:


 # wget http://download.proxmox.com/images/system/ubuntu-16.04-standard_16.04-1_amd64.tar.gz -P /var/lib/vz/template/cache/ 

وأنشئ حاويتنا منه:


 pct create 101 local:vztmpl/ubuntu-16.04-standard_16.04-1_amd64.tar.gz \ --hostname=tgt1 \ --net0=name=eth0,bridge=vmbr0,gw=192.168.1.1,ip=192.168.1.11/24 \ --rootfs=volume=/dev/drbd100,shared=1 

في هذا الأمر ، نشير إلى أن نظام الجذر /dev/drbd100 سيكون على الجهاز /dev/drbd100 وإضافة المعلمة shared=1 للسماح /dev/drbd100 الحاوية بين العقد.


إذا حدث خطأ ما ، فيمكنك دائمًا إصلاحه من خلال واجهة /etc/pve/lxc/101.conf أو في /etc/pve/lxc/101.conf حاوية /etc/pve/lxc/101.conf


سيقوم Proxmox بفك القالب وإعداد نظام جذر الحاوية لنا. بعد ذلك يمكننا إطلاق الحاوية الخاصة بنا:


 pct start 101 

تكوين هدف iSCSI.


من بين مجموعة الأهداف بأكملها ، اخترت istgt ، لأنها تتمتع بأعلى أداء وتعمل في مساحة المستخدم.


الآن دعونا تسجيل الدخول إلى الحاوية لدينا:


 pct exec 101 bash 

تثبيت التحديثات و istgt :


 apt-get update apt-get -y upgrade apt-get -y install istgt 

قم بإنشاء ملف سنعطيه عبر الشبكة:


 mkdir -p /data fallocate -l 740G /data/target1.img 

نحتاج الآن إلى كتابة تهيئة لـ istgt /etc/istgt/istgt.conf :


 [Global] Comment "Global section" NodeBase "iqn.2018-07.org.example.tgt1" PidFile /var/run/istgt.pid AuthFile /etc/istgt/auth.conf MediaDirectory /var/istgt LogFacility "local7" Timeout 30 NopInInterval 20 DiscoveryAuthMethod Auto MaxSessions 16 MaxConnections 4 MaxR2T 32 MaxOutstandingR2T 16 DefaultTime2Wait 2 DefaultTime2Retain 60 FirstBurstLength 262144 MaxBurstLength 1048576 MaxRecvDataSegmentLength 262144 InitialR2T Yes ImmediateData Yes DataPDUInOrder Yes DataSequenceInOrder Yes ErrorRecoveryLevel 0 [UnitControl] Comment "Internal Logical Unit Controller" AuthMethod CHAP Mutual AuthGroup AuthGroup10000 Portal UC1 127.0.0.1:3261 Netmask 127.0.0.1 [PortalGroup1] Comment "SINGLE PORT TEST" Portal DA1 192.168.1.11:3260 [InitiatorGroup1] Comment "Initiator Group1" InitiatorName "ALL" Netmask 192.168.1.0/24 [LogicalUnit1] Comment "Hard Disk Sample" TargetName disk1 TargetAlias "Data Disk1" Mapping PortalGroup1 InitiatorGroup1 AuthMethod Auto AuthGroup AuthGroup1 UseDigest Auto UnitType Disk LUN0 Storage /data/target1.img Auto 

إعادة تشغيل istgt:


 systemctl restart istgt 

يكمل هذا الإعداد الهدف


إعداد HA


الآن يمكننا الانتقال إلى تكوين HA-manager . لنقم بإنشاء مجموعة HA منفصلة لجهازنا:


 ha-manager groupadd tgt1 --nodes pve1,pve2,pve3 --nofailback=1 --restricted=1 

سيعمل موردنا فقط على العقد المحددة لهذه المجموعة. أضف حاويتنا لهذه المجموعة:


 ha-manager add ct:101 --group=tgt1 --max_relocate=3 --max_restart=3 

التوصيات والضبط


DRBD

كما أشرت أعلاه ، من المستحسن دائمًا استخدام شبكة منفصلة للنسخ المتماثل. من المستحسن للغاية استخدام محولات شبكة 10 جيجابت ، وإلا فسوف تواجه سرعة المنفذ.
إذا كان النسخ المتماثل يبدو بطيئًا بما فيه الكفاية ، فجرب بعض الخيارات لـ DRBD . هنا هو التكوين ، وهو في رأيي الأمثل لشبكة 10G الخاصة بي:


 # cat /etc/drbd.d/global_common.conf global { usage-count yes; udev-always-use-vnr; } common { handlers { } startup { } options { } disk { c-fill-target 10M; c-max-rate 720M; c-plan-ahead 10; c-min-rate 20M; } net { max-buffers 36k; sndbuf-size 1024k; rcvbuf-size 2048k; } } 

يمكنك الحصول على مزيد من المعلومات حول كل معلمة من وثائق DRBD الرسمية.


افتح iSCSI

نظرًا لأننا لا نستخدم تعدد المسارات ، فمن المستحسن في حالتنا تعطيل عمليات فحص الاتصال الدورية للعملاء ، بالإضافة إلى زيادة مهلات الانتظار لاستعادة الجلسة في /etc/iscsi/iscsid.conf .


 node.conn[0].timeo.noop_out_interval = 0 node.conn[0].timeo.noop_out_timeout = 0 node.session.timeo.replacement_timeout = 86400 

استخدم


Proxmox


يمكن توصيل هدف iSCSI الناتج على الفور بـ Proxmox ، دون نسيان إلغاء تحديد Use LUN Directly .



مباشرة بعد ذلك ، سيكون من الممكن إنشاء LVM فوقها ، لا تنس تحديد المربع المشترك :



بيئات أخرى


إذا كنت تخطط لاستخدام هذا الحل في بيئة مختلفة ، فقد تحتاج إلى تثبيت ملحق نظام المجموعة لـ LVM في لحظة وجود تطبيقين. CLVM و lvmlockd .


تكوين CLVM ليس تافها ويتطلب مدير مجموعة عمل.
حيث كطريقة ثانية ، لم يتم اختبار lvmlockd بالكامل حتى الآن وبدأ للتو في الظهور في مستودعات مستقرة.


أوصي بقراءة مقال ممتاز عن الحجب في LVM


عند استخدام LVM مع Proxmox ، لا يلزم إضافة المجموعة ، حيث يتم توفير إدارة وحدة التخزين عن طريق proxmox نفسها ، والتي تقوم بتحديث ومراقبة بيانات تعريف LVM بشكل مستقل. الأمر نفسه ينطبق على OpenNebula ، كما تشير الوثائق الرسمية بوضوح.

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


All Articles