2012-06-28 16 views
6

मैं बड़ी फाइल सर्वर बनाने जा रहा हूं, और फ़ाइल सिस्टम विकल्प (लिनक्स) के लिए स्टैक-ओवरफ्लो समुदाय सलाह की आवश्यकता है।मध्यम लेखन के तहत, nginx का उपयोग करके 1 जीबी फ़ाइलों की सेवा के लिए सर्वश्रेष्ठ फ़ाइल सिस्टम, प्रदर्शन के अनुसार पढ़ा?

फ़ाइल सर्वर डिस्क पर निरंतर मध्यम लिखने के तहत 1-2 जीबी आकार की स्थैतिक फाइलों (ज्यादातर अनुरोध के साथ अधिकतर) की सेवा करने जा रहा है (RAID5 SATA/7200 डिस्क भारी)। पढ़ने के लिए लिखें अनुपात 1: 5-10 है, प्रत्येक 1 बाइट प्रति सेकेंड लिखा है, 5-10 पढ़ा जाता है। मेरे लिए सबसे महत्वपूर्ण प्रदर्शन पढ़ा जाता है, मैं धीमे लिखने के साथ रह सकता हूं।

इस कार्य के लिए कौन सी लिनक्स फ़ाइल सिस्टम सबसे अच्छा समाधान होगा? और क्यों :) धन्यवाद!

उत्तर

0

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

लेकिन हमेशा की तरह: यदि आप वास्तव में परवाह करते हैं, बेंचमार्क। फाइल सिस्टम प्रदर्शन के बारे में कोई आसान जवाब नहीं है।

+0

तो कोई सच्चा :(कुछ तुम कभी बनाम JFS? इसके अलावा, कर्नेल-स्रोत पर एक नज़र आप को पता चला गया है होता XFS बनाम ext2-3 पर बड़ी फ़ाइलों को हटाने की कोशिश की है, जो अलग-अलग FS ड्राइवरों खर्च महत्वपूर्ण वर्गों में अलग-अलग समय, वे उच्च आईओ दबाव के तहत _radically_ अलग व्यवहार करते हैं। –

+0

एक बड़ी फ़ाइल को हटाने का उपयोग केस नहीं था। यदि आपके पास संख्याएं हैं, तो उन्हें दिखाएं। मैं जो लिखा वह खड़ा हूं। –

+0

संख्या? "झूठ, झूठ झूठ और फिर बेंचमार्क हैं" मुझे अभी तक किसी मार्केटिंग लक्ष्य के बिना बेंचमार्क देखना है। मैं अपने अनुभव और सार्वजनिक रूप से उपलब्ध लिनक्स कर्नेल स्रोत के बारे में बात कर रहा था। मुद्दा यह है कि मुझे संदेह है कि आप मापनीय मतभेद देखेंगे फिर भी हास्यास्पद है। –

4

भारी सामग्री की सेवा के साथ सर्वोत्तम परिणाम प्रदान करने के लिए, ट्यून करने के लिए कुछ और है। कृपया नीचे Nginx core developer's comment पर एक नज़र डालें:

  1. स्विच बंद Sendfile, यह Readahead (और इसलिए ब्लॉक डिस्क से पढ़ें) को नियंत्रित करने के लिए कोई क्षमता के कारण linux तहत इस तरह के काम का बोझ पर बुरा काम करता है।

    sendfile बंद;

  2. उपयोग बड़े उत्पादन बफ़र्स

    output_buffers 1 512K

  3. aio का उपयोग कर बेहतर डिस्क संगामिति सुनिश्चित करने के लिए प्रयास करें (और linux यह रूप में अच्छी तरह directio की जरूरत के तहत ध्यान दें), यानी कुछ इस तरह

    आईओओ; डायरेक्टियो 512;

अन्य सिफारिशें:

  1. चेक फाइल सिस्टम स्वैप नहीं किया जाता है

  2. फ़ाइल - ext4, XFS। अच्छा data_writeback सक्षम करने के लिए और noatime माउंट विकल्प

5

मैं प्रति "असली" डिस्क (धुरी) "यादृच्छिक पढ़ने" प्रदर्शन के हासिल 80MB/एस। यहां मेरे निष्कर्ष हैं।

तो, पहले तय करें कि उपयोगकर्ताओं को कितना ट्रैफिक चाहिए और आपको प्रति सर्वर कितना संग्रहण चाहिए।

आप नीचे दिए गए डिस्क सेटअप सलाह को छोड़ सकते हैं क्योंकि आपके पास पहले से ही RAID5 सेटअप है।

3 * 2TB डिस्क के साथ एक समर्पित 1 जीबीपीएस बैंडविड्थ सर्वर का उदाहरण लें। ओएस और टीएमपी को समर्पित पहली डिस्क रखें। अन्य 2 डिस्क के लिए आप एक सॉफ्टवेयर RAID बना सकते हैं (मेरे लिए, यह ऑन-बोर्ड हार्डवेयर RAID से बेहतर काम करता है)। अन्यथा, आपको अपनी फ़ाइलों को स्वतंत्र डिस्क पर समान रूप से विभाजित करने की आवश्यकता है। आइडिया दोनों डिस्क शेयर को पढ़ने/लिखने के भार को समान रूप से रखना है। सॉफ्टवेयर RAID-0 सबसे अच्छा विकल्प है।

Nginx सम्मेलन वहाँ nginx का उपयोग कर प्रदर्शन के उच्च स्तर को प्राप्त करने के दो तरीके हैं।

  1. उपयोग directio

    aio पर;
    डायरेक्टियो 512; output_buffers 1 8 मीटर;

    "इस विकल्प के लिए आपको रैम की अच्छी मात्रा की आवश्यकता होगी" लगभग 12-16GB रैम की आवश्यकता है।

  2. userland

    कब

    output_buffers 1 2 एम;

    blockdev --setra 4096/dev/md0 (या स्वतंत्र डिस्क माउंट)

    यह सेटिंग बेहतर प्रणाली फ़ाइल कैश का उपयोग करेगा "सुनिश्चित करें कि आप सॉफ्टवेयर छापे के लिए 4-6MB को माउंट Readahead निर्धारित किया है", और बहुत कम राम की आवश्यकता है। लगभग 8 जीबी रैम की आवश्यकता है।

आम नोट्स:

  • रखने "बंद Sendfile,"

आप भी उपलब्ध बैंडविड्थ से अधिक कनेक्शन के 100s सक्षम करने के लिए बैंडविड्थ थ्रोटल का उपयोग करना चाहते हो सकता है। प्रत्येक डाउनलोड कनेक्शन 4 एमबी सक्रिय राम का उपयोग करेगा।

 limit_rate_after 2m; 
     limit_rate 100k; 

ऊपर समाधान के दोनों एक 3 डिस्क सर्वर पर आसानी से करने के लिए 1k + एक साथ उपयोगकर्ता स्केल करेगा। मान लीजिए कि आपके पास 1 जीबीपीएस बैंडविड्थ है और प्रत्येक कनेक्शन को 1 एमबी/पीएस पर थ्रॉटल किया गया है, पढ़ने के प्रभाव को प्रभावित किए बिना डिस्क लिखने के लिए अतिरिक्त सेटअप की आवश्यकता है।

माउंट पर मुख्य ओएस डिस्क पर सभी अपलोड करें/tmpuploads पर सभी अपलोड करें। यह भारी पठन चल रहा है, जबकि यह कोई अड़चन परेशानी सुनिश्चित करेगा। फिर फ़ाइल को "dd" कमांड का उपयोग करके/tmpuploads से thelag = direct के साथ ले जाएं। जैसे

dd if=/tmpuploads/<myfile> of=/raidmount/uploads/<myfile> oflag=direct bs=8196k