DRBD9 और Proxmox के साथ विश्वसनीय भंडारण (भाग 2: iSCSI + LVM)

छवि


पिछले लेख में, मैंने DRBD और Proxmox का उपयोग करके एक दोष-सहिष्णु NFS सर्वर बनाने की संभावना की जांच की। यह अच्छी तरह से निकला, लेकिन हम अपने लॉरेल्स पर आराम नहीं करेंगे और अब हम अपने भंडारण से "सभी रसों को निचोड़ने" की कोशिश करेंगे।


इस लेख में मैं आपको बताऊंगा कि इस तरह से एक दोष-सहिष्णु iSCSI लक्ष्य कैसे बनाया जाता है, जिसे हम LVM को छोटे-छोटे टुकड़ों में काटकर आभासी मशीनों के लिए उपयोग करेंगे।


यह ऐसा दृष्टिकोण है जो लोड को कम करेगा और कई बार डेटा तक पहुंच की गति को बढ़ाएगा, यह विशेष रूप से फायदेमंद है जब डेटा के लिए प्रतिस्पर्धी पहुंच की आवश्यकता नहीं होती है, उदाहरण के लिए, मामले में जब आपको वर्चुअल मशीनों के लिए भंडारण को व्यवस्थित करने की आवश्यकता होती है।


DRBD के बारे में कुछ शब्द


DRBD एक काफी सरल और परिपक्व समाधान है, आठवें संस्करण कोड को लिनक्स कर्नेल के हिस्से के रूप में अपनाया जाता है। वास्तव में, यह एक नेटवर्क दर्पण RAID1 का प्रतिनिधित्व करता है। नौवें संस्करण ने दो से अधिक नोड्स के साथ कोरम और प्रतिकृति के लिए समर्थन पेश किया।


वास्तव में, यह आपको कई भौतिक नोड्स पर ब्लॉक डिवाइस को एक साझा साझा नेटवर्क में संयोजित करने की अनुमति देता है।


DRBD का उपयोग करके आप बहुत दिलचस्प कॉन्फ़िगरेशन प्राप्त कर सकते हैं। आज हम iSCSI और LVM के बारे में बात करेंगे।


आप मेरे पिछले लेख को पढ़कर इसके बारे में अधिक जान सकते हैं, जहाँ मैंने इस समाधान के बारे में विस्तार से बताया।


ISCSI के बारे में कुछ शब्द


iSCSI एक नेटवर्क पर एक ब्लॉक डिवाइस डिलीवरी प्रोटोकॉल है।


एनबीडी के विपरीत, यह प्राधिकरण का समर्थन करता है, समस्याओं के बिना नेटवर्क विफलताओं का काम करता है और कई अन्य उपयोगी कार्यों का समर्थन करता है, और सबसे महत्वपूर्ण बात यह है कि यह बहुत अच्छा प्रदर्शन दिखाता है।


इसके कार्यान्वयन की एक बड़ी संख्या है, उनमें से कुछ को कर्नेल में भी शामिल किया गया है और इसके कॉन्फ़िगरेशन और कनेक्शन के लिए विशेष कठिनाइयों की आवश्यकता नहीं है।


LVM के बारे में कुछ शब्द


यह ध्यान देने योग्य है कि LINBIT के पास Proxmox का अपना समाधान है, उसे बॉक्स से बाहर काम करना चाहिए और एक समान परिणाम प्राप्त करने की अनुमति देनी चाहिए, लेकिन इस लेख में मैं केवल Proxmox पर ध्यान केंद्रित नहीं करना चाहूंगा और कुछ और सार्वभौमिक समाधान का वर्णन करूंगा जो Proxmox और दोनों के लिए उपयुक्त है कुछ और, इस उदाहरण में, प्रॉक्समोक्स का उपयोग केवल कंटेनर ऑर्केस्ट्रेशन के साधन के रूप में किया जाता है, वास्तव में आप इसे दूसरे समाधान के साथ बदल सकते हैं, उदाहरण के लिए, कुबेरनेट्स में एक लक्ष्य के साथ कंटेनर लॉन्च करें।


Proxmox के लिए विशेष रूप से, यह साझा LUN और LVM के साथ ठीक काम करता है, केवल अपने स्वयं के मानक ड्राइवरों का उपयोग करके।


एलवीएम के फायदों में यह तथ्य शामिल है कि इसका उपयोग कुछ क्रांतिकारी नया और अपर्याप्त रूप से रन-इन नहीं है, लेकिन इसके विपरीत, यह सूखा स्थिरता दिखाता है, जो आमतौर पर भंडारण से आवश्यक होता है। यह ध्यान देने योग्य है कि एलवीएम अन्य वातावरणों में काफी सक्रिय रूप से उपयोग किया जाता है, उदाहरण के लिए, ओपननेबुला या कुबेरनेट्स में, और वहां काफी अच्छी तरह से समर्थित है।


इस प्रकार, आप सार्वभौमिक भंडारण प्राप्त करेंगे जिसका उपयोग विभिन्न प्रणालियों में किया जा सकता है (न केवल प्रॉक्समॉक्स में), केवल तैयार किए गए ड्राइवरों का उपयोग करके, बिना किसी विशेष आवश्यकता के इसे एक फ़ाइल के साथ संशोधित करने के लिए।


दुर्भाग्य से, भंडारण के लिए एक समाधान चुनते समय, आपको हमेशा कुछ समझौता करना होगा। तो यहां, यह समाधान आपको उसी लचीलेपन के रूप में नहीं देगा जैसे कि उदाहरण सिफ।
वर्चुअल डिस्क का आकार LVM समूह के आकार से सीमित है, और एक विशिष्ट वर्चुअल डिस्क के लिए चिह्नित क्षेत्र आवश्यक रूप से वास्तविक होगा - यह डेटा तक पहुंच की गति में बहुत सुधार करता है, लेकिन थिन-प्रोविजनिंग की अनुमति नहीं देता है (जब वर्चुअल डिस्क वास्तव में इसकी तुलना में कम जगह लेता है)। यह उल्लेखनीय है कि स्नैपशॉट का उपयोग करते समय LVM का प्रदर्शन काफी बढ़ जाता है, और इसलिए उनके मुफ्त उपयोग की संभावना अक्सर समाप्त हो जाती है।


हां, LVM थिन-प्रोविजन पूल का समर्थन करता है जो इस खामी से रहित हैं, लेकिन दुर्भाग्य से उनका उपयोग केवल एक नोड के संदर्भ में संभव है और क्लस्टर में कई नोड्स के लिए एक थिन-प्रोविजन पूल साझा करने का कोई तरीका नहीं है।


लेकिन इन कमियों के बावजूद, अपनी सादगी के कारण, LVM अभी भी प्रतियोगियों को अपने आस-पास नहीं होने देता है और इसे पूरी तरह से युद्ध के मैदान से बाहर धकेल देता है।


काफी छोटे ओवरहेड के साथ, LVM अभी भी एक बहुत तेज, स्थिर और काफी लचीला समाधान प्रदान करता है।


सामान्य योजना


  • हमारे पास तीन नोड हैं
  • प्रत्येक नोड में एक वितरित ड्रब डिवाइस है
  • ड्रब डिवाइस के शीर्ष पर, ISCSI लक्ष्य के साथ एक LXC कंटेनर लॉन्च किया गया है।
  • लक्ष्य तीनों नोड्स से जुड़ा है।
  • कनेक्ट किए गए लक्ष्य पर LVM समूह बनाया गया है।
  • यदि आवश्यक हो, LXC कंटेनर iSCSI लक्ष्य के साथ एक और नोड में जा सकता है

समायोजन


हमें अब इस विचार का पता चला है, आइए कार्यान्वयन के लिए आगे बढ़ें।


डिफ़ॉल्ट रूप से, लिनक्स कर्नेल मॉड्यूल के साथ बंडल आठवें संस्करण केडंप आता है, दुर्भाग्य से यह हमें सूट नहीं है और हम मॉड्यूल के नौवें संस्करण सेट करना होगा।


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 - मॉड्यूल बनाने के लिए कर्नेल हेडर की आवश्यकता होती है
  • drbd-dkms - drbd-dkms प्रारूप में कर्नेल मॉड्यूल
  • drbd-utils - मूल DRBD प्रबंधन उपयोगिताओं
  • drbdtop केवल drbdtop लिए शीर्ष जैसा एक इंटरैक्टिव उपकरण है

मॉड्यूल की जांच है कि क्या वह ठीक था स्थापित करने के बाद:


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

यदि आप कमांड के आउटपुट में आठवां संस्करण देखते हैं, तो कुछ गलत हो गया और इन-ट्री कर्नेल मॉड्यूल लोड हो गया है। कारण क्या है, यह जानने के dkms status जाँच करें।


हमारे पास प्रत्येक नोड में नियमित विभाजन के शीर्ष पर चलने वाले एक ही ड्रब-डिवाइस होगा । पहले हमें प्रत्येक नोड पर इस अनुभाग को ड्रब के लिए तैयार करने की आवश्यकता है।


ऐसा विभाजन किसी भी ब्लॉक डिवाइस हो सकता है, यह lvm, zvol, एक डिस्क विभाजन या संपूर्ण डिस्क हो सकता है। इस लेख में मैं एक अलग nvme डिस्क का उपयोग करूँगा जिसमें विभाजन के तहत /dev/nvme1n1p1 : /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; } } 

यह सलाह दी जाती है कि ड्रग सिंक्रोनाइज़ेशन के लिए एक अलग नेटवर्क का उपयोग किया जाए।


अब drdd के लिए मेटाडेटा बनाएं और इसे चलाएं:


 # 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 

अब हमारी असंगत डिस्क तीनों नोड्स पर है, इसका कारण यह है कि शराबी को यह नहीं पता होता है कि किस डिस्क को मूल रूप में लिया जाना चाहिए। हमें उनमें से एक को प्राथमिक रूप से चिह्नित करना चाहिए ताकि उसका राज्य अन्य नोड्स के साथ सिंक्रनाइज़ हो जाए:


 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 राज्य के साथ डिवाइस पर रीडायरेक्ट किए जाएंगे।


नोड पर drdd सेवा के ऑटोरन को सक्रिय करना न भूलें:


 systemctl enable drbd.service 

एक एलएक्ससी कंटेनर को कॉन्फ़िगर करना


हम तीन नोड्स के समीपस्थ क्लस्टर के कॉन्फ़िगरेशन भाग को छोड़ देंगे , इस भाग को आधिकारिक विकी में अच्छी तरह से वर्णित किया गया है


जैसा कि मैंने पहले कहा था, हमारा iSCSI लक्ष्य एक LXC कंटेनर में काम करेगा। हम कंटेनर को डिवाइस /dev/drbd100 जो हमने अभी बनाया है।


पहले हमें इस पर एक फ़ाइल सिस्टम बनाने की आवश्यकता है:


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

डिफ़ॉल्ट रूप से Proxmox में फ़ाइल सिस्टम स्तर पर मल्टीमाउंट सुरक्षा शामिल है, सिद्धांत रूप में, हम इसके बिना कर सकते हैं, क्योंकि DRBD की डिफ़ॉल्ट रूप से अपनी सुरक्षा है, यह डिवाइस के लिए दूसरे प्राथमिक को प्रतिबंधित करता है, लेकिन सावधानी हमें नुकसान नहीं पहुंचाती है।


अब उबंटू टेम्पलेट डाउनलोड करें:


 # 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 और विकल्प जोड़ने shared=1 कि कंटेनर नोड्स के बीच स्थानांतरित करने के लिए अनुमति होगी।


यदि कुछ गलत हुआ है, तो आप इसे हमेशा Proxmox इंटरफ़ेस या /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-manager groupadd tgt1 --nodes pve1,pve2,pve3 --nofailback=1 --restricted=1 

हमारा संसाधन इस समूह के लिए निर्दिष्ट नोड्स पर ही काम करेगा। हमारे कंटेनर को इस समूह में जोड़ें:


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

सिफारिशें और ट्यूनिंग


केडंप

जैसा कि मैंने ऊपर उल्लेख किया है, प्रतिकृति के लिए एक अलग नेटवर्क का उपयोग करना हमेशा उचित होता है। 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 में सत्र पुनर्प्राप्ति के लिए प्रतीक्षा समय /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 से जुड़ा हो सकता है, बिना LUN के सीधे उपयोग को अनचेक किए बिना।



इसके तुरंत बाद, यह सब के ऊपर एलवीएम के निर्माण संभव हो जाएगा, मत भूलना टिकटिक साझा किया:



अन्य वातावरण


यदि आप एक अलग वातावरण में इस समाधान का उपयोग करने की योजना बनाते हैं, तो आपको दो कार्यान्वयन के समय LVM के लिए क्लस्टर एक्सटेंशन स्थापित करने की आवश्यकता हो सकती है। CLVM और lvmlockd


CLVM को कॉन्फ़िगर करना तुच्छ नहीं है और इसके लिए एक कार्यशील क्लस्टर प्रबंधक की आवश्यकता होती है।
दूसरी विधि के रूप में, lvmlockd अभी तक पूरी तरह से परीक्षण नहीं किया गया है और अभी स्थिर रिपॉजिटरी में दिखाई देने लगा है।


मैं LVM में अवरुद्ध करने पर एक उत्कृष्ट लेख पढ़ने की सलाह देता हूं


प्रोक्समॉक्स के साथ एलवीएम का उपयोग करते समय , क्लस्टर अतिरिक्त की आवश्यकता नहीं होती है , क्योंकि वॉल्यूम प्रबंधन स्वयं प्रोक्समॉक्स द्वारा प्रदान किया जाता है, जो एलवीएम मेटाडेटा को स्वतंत्र रूप से अपडेट और मॉनिटर करता है। वही OpenNebula पर लागू होता है, क्योंकि आधिकारिक दस्तावेज स्पष्ट रूप से इंगित करता है।

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


All Articles