ZFS: झूले में सभी डिस्क पर पुनर्वितरण zvol?


12

क्या कोई ऐसा तरीका है जिसमें जेडएफएस को किसी दिए गए फाइल सिस्टम को उसके ज़ूल में सभी डिस्क पर पुनर्वितरित करने के लिए प्रेरित किया जा सकता है?

मैं एक ऐसे परिदृश्य के बारे में सोच रहा हूं, जहां मेरे पास एक निश्चित आकार की ZFS मात्रा है जो कि FC पर LUN के रूप में निर्यात की जाती है। वर्तमान ज़ूल छोटा है, बस दो 1 टीबी मिररड डिस्क, और ज़वोल कुल 750GB है। अगर मुझे अचानक 12 1TB डिस्क कहने के लिए ज़ूलू के आकार का विस्तार करना था, मेरा मानना ​​है कि zvol अभी भी प्रभावी रूप से केवल पहले दो स्पिंडल पर 'रखे' जाएगा।

यह देखते हुए कि अधिक स्पिंडल = अधिक IOPS, मैं किस विधि का उपयोग करके सभी 12 स्पिंडल पर zvol का पुनर्वितरण कर सकता हूं ताकि उनका लाभ उठाया जा सके?

जवाबों:


8

आपको अपने डेटा को फिर से असंतुलित करने के लिए विस्तारित ज़ूलप में फिर से लिखना होगा। अन्यथा, समय बीतने के साथ, आपके लेखन को पूरे पूल में वितरित किया जाएगा।


मुझे नहीं लगता कि ऐसा करने का कोई त्वरित और आसान तरीका है ...?
growse

7
zfs send | zfs recv
वाबेट

मैं परीक्षण करने जा रहा हूँ कि - विश्वास नहीं कर सकता कि कुछ इतना सरल होगा। :)
बड़ा हो

3
वापस रिपोर्ट करें, मैंने कभी ऐसा नहीं किया है और मैं उत्सुक हूं।
स्ट्रेंजवेल

3

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


4
मेरे अनुभव में, यह सच नहीं है। जबकि कोई 'निश्चित परिशोधन' नहीं है, ZFS क्लाइंट IO अनुरोधों के बाहर अपने स्वयं के निःशुल्क डेटा को स्थानांतरित नहीं करेगा। यदि आप मेरे द्वारा वर्णित परिदृश्य बनाते हैं, तो अधिक डिस्क जोड़ें और फिर मूल LUN पर कुछ भारी IO करें, आप केवल सरणी में पहले दो डिस्क पर गतिविधि देखेंगे, क्योंकि डेटा यही है। ewwhite बताते हैं कि समय के साथ यह संतुलित हो जाता है, लेकिन मैं यह जानने के लिए उत्सुक हूं कि क्या ऐसा करने का कोई तेज़ तरीका है।
growse

1
क्षमा करें यदि मैं अस्पष्ट था। बेशक, मौजूदा डेटा जादुई रूप से आगे नहीं बढ़ेगा। केवल अपडेट किए गए डेटा को समान रूप से स्थानांतरित किया जाएगा। यही मेरा मतलब है "नए IOs" के साथ। जहां तक ​​मौजूदा स्थैतिक डेटा का संबंध है, कैशिंग भी प्रदर्शन में सुधार करेगा क्योंकि ब्लॉक एक से अधिक बार पढ़े जाते हैं।
jlliagre

0

यह ewwhite के उत्तर की "निरंतरता" है:

आपको अपने डेटा को फिर से असंतुलित करने के लिए विस्तारित ज़ूलप में फिर से लिखना होगा

मैंने अपने Ubuntu 14.04 होस्ट पर इसे स्वचालित करने के लिए एक PHP स्क्रिप्ट ( github पर उपलब्ध ) लिखी ।

बस sudo apt-get install php5-cliपहले स्क्रिप्ट के रूप में अपने पूल डेटा के लिए मार्ग गुजर रहा है और स्क्रिप्ट चलाने के साथ PHP सीएलआई उपकरण स्थापित करने की आवश्यकता है । उदाहरण के लिए

php main.php /path/to/my/files

आदर्श रूप से आपको पूल के सभी डेटा में दो बार स्क्रिप्ट को चलाना चाहिए। पहला रन ड्राइव के उपयोग को संतुलित करेगा, लेकिन व्यक्तिगत फ़ाइलों को ड्राइव में अंतिम रूप से आवंटित किया जा रहा है। दूसरा रन यह सुनिश्चित करेगा कि प्रत्येक फ़ाइल ड्राइव के पार "काफी" वितरित की गई है। मैं समान रूप से के बजाय निष्पक्ष रूप से कहता हूं क्योंकि यह केवल समान रूप से वितरित किया जाएगा यदि आप ड्राइव क्षमता का मिश्रण नहीं कर रहे हैं जैसा कि मैं अपने छापे के 10 विभिन्न आकार के जोड़े (4tb दर्पण + 3 टीबी दर्पण + 3 टीबी दर्पण) के साथ हूं।

स्क्रिप्ट का उपयोग करने के कारण

  • मुझे समस्या को "इन-प्लेस" ठीक करना होगा। उदाहरण के लिए, मैं डेटा को दूसरे सिस्टम पर नहीं लिख सकता, इसे यहां हटा दें और इसे फिर से वापस लिख दें।
  • मैंने अपना पूल 50% से अधिक भर दिया, इसलिए मैं मूल को हटाने से पहले एक बार में पूरे फाइल सिस्टम को कॉपी नहीं कर सकता था।
  • यदि केवल कुछ फाइलें हैं जिन्हें अच्छा प्रदर्शन करने की आवश्यकता है, तो कोई भी उन फाइलों पर दो बार स्क्रिप्ट चला सकता है। हालाँकि, दूसरा रन केवल तभी प्रभावी होता है जब पहला रन ड्राइव के उपयोग को संतुलित करने में सफल होता है।
  • मेरे पास बहुत अधिक डेटा है और मैं प्रगति के एक संकेत को देखने में सक्षम होना चाहता हूं।

मैं यह भी कैसे बता सकता हूं कि क्या यहां तक ​​कि ड्राइव यूटिलाइजेशन हासिल किया गया है?

समय की अवधि (जैसे iostat -m 5) पर iostat टूल का उपयोग करें और राइट्स की जांच करें। यदि वे समान हैं, तो आपने एक फैल भी हासिल किया है। वे नीचे दिए गए स्क्रीनशॉट में भी पूरी तरह से नहीं हैं, क्योंकि मैं 4TB की एक जोड़ी को RAID 10 में 3TB ड्राइव के 2 जोड़े के साथ चला रहा हूं, इसलिए दो 4 के बारे में थोड़ा और लिखा जाएगा। यहाँ छवि विवरण दर्ज करें

यदि आपका ड्राइव उपयोग "असंतुलित" है, तो iostat नीचे स्क्रीनशॉट की तरह कुछ और दिखाएगा जहां नए ड्राइव को असम्मानित रूप से लिखा जा रहा है। आप यह भी बता सकते हैं कि वे नए ड्राइव हैं क्योंकि रीड 0 पर हैं क्योंकि उनके पास कोई डेटा नहीं है। यहाँ छवि विवरण दर्ज करें

स्क्रिप्ट परफेक्ट नहीं है, केवल एक वर्कअराउंड है, लेकिन यह मेरे लिए इस बीच काम करता है जब तक कि ZFS एक दिन BTRFS की तरह एक रिबैलेंसिंग फीचर लागू नहीं करता (उंगलियां पार हो गई)।


ओह माई ... वाह ...
ईव्वाइट

0

वैसे यह थोड़ा हैक है लेकिन यह देखते हुए कि आपने zvol का उपयोग करके मशीन को बंद कर दिया है, आप फ़ाइल सिस्टम को स्थानीय फ़ाइल पर स्थानीय फ़ाइल पर भेज सकते हैं, जिसे bar.zvol कहा जाता है, और फिर आप फ़ाइल को वापस सिस्टम प्राप्त करते हैं। यह आपके लिए डेटा को रिबैलेंस करना चाहिए।

zfs send tank/bar > bar.zvol

zfs receive tank/bar < bar.zvol

-1

सबसे अच्छा समाधान मैंने पाया कि विस्तारित पूल पर अपने आधे डेटा को डुप्लिकेट करना और फिर मूल डुप्लिकेट किए गए डेटा को हटाना।


3
क्या आप विस्तार से समझा सकते हैं?
18

@reco: zvols फ़ाइल सिस्टम नहीं हैं, ताकि आप उन पर डेटा हटा या डुप्लिकेट न कर सकें। आप डेटा को अधिलेखित कर सकते हैं लेकिन यह तब तक भ्रष्ट होगा जब तक आप इसे उसी सामग्री के साथ नहीं करते हैं जो अंतर्निहित संस्करणों पर डेटा को प्रभावी ढंग से फैलाएगा, लेकिन यह वही है जो एक साल पहले ही सुझाया गया था।
जूलियाग्रे

हाँ आप सही है। मैं चारों ओर देख रहा था और एक ही विषय पर शोध कर रहा था। मुझे एहसास हुआ कि zFS के साथ vdevs पर डेटा का पुनर्वितरण करने की आवश्यकता नहीं है। लेकिन अगर आप अभी भी किसी भी कारण से डेटा को डुप्लिकेट करना चाहते हैं और ओरिजिनल को हटाने से समय के साथ zfs क्या करेगा तो तेजी आएगी।
Reco

1
Vdevs पर डेटा का पुनर्वितरण एक वैध अनुरोध है। मुझे डर है कि आप अभी भी याद कर रहे हैं सवाल zvols के बारे में है, फाइल सिस्टम नहीं। आप किसी वॉल्यूम पर डेटा को डुप्लिकेट या डिलीट नहीं कर सकते, इसका कोई मतलब नहीं है।
जॉलीग्रे

हाय जल्लीगर हाँ तुम सही खेद है
Reco
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.