क्या कोई कमांड है जो लिनक्स को एनएफएस शेयर पर एक फ़ाइल के कैश को फ्लश करने के लिए मजबूर करेगा?


14

StackOverflow पर इस प्रश्न से संबंधित , मुझे आश्चर्य हो रहा है कि क्या NFS कैश / बल लिनक्स को फ्लश करने का कोई तरीका है जो किसी NFS शेयर पर मौजूद फ़ाइल की सबसे अद्यतित प्रति देखने के लिए है।

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

fstabफाइल सिस्टम के लिए प्रविष्टि है:

172.16.1.15:/home               /media/home     nfs     vers=3,defaults,noauto,sync,acregmin=1          0       0

क्या कोई कमांड है जो लिनक्स को एनएफएस शेयर पर एक फ़ाइल के कैश को फ्लश करने के लिए मजबूर करेगा?


क्या अपाचे कैशिंग तंत्र आप का उपयोग कर?

@usermane: मैं अपाचे कैशिंग तंत्र का उपयोग नहीं कर रहा हूं। विचाराधीन फाइलें PHP फाइलें हैं, और जब वे एक होस्ट पर संशोधित होती हैं, तो अन्य होस्ट कुछ सेकंड के लिए उस परिवर्तन को नहीं देखते हैं।
जोश

जवाबों:


12

इन मदों की जांच करें, और देखें कि आपके लिए कोई काम:

  1. क्लाइंट पर , यदि आप पहले से ही अपने NFS फाइल सिस्टम के लिए लाइन ctoके विकल्प कॉलम में विकल्प का उपयोग नहीं कर रहे हैं, तो /etc/fstabउसे जोड़ें। ctoएनएफ़एस क्लाइंट को क्लोज़-टू-ओपन के माध्यम से फाइलें खोलने के लिए कहता है, जो जब भी वे इसे खोलते हैं, फाइल को ताज़ा करते हैं।

  2. सर्वर पर , सुनिश्चित करें कि आपका फ़ाइल सिस्टम syncविकल्प के साथ निर्यात किया गया है, और नहीं async। सिंक्रोनस के साथ लिखते हैं, फ़ाइल बंद होने पर क्लाइंट डिस्क में फ्लश करेगा। ( या nfs V3 के साथ, जब भी कोई कमिट किया जाता है )। इस तरह एक प्रदर्शन हिट हो सकता है, लेकिन यदि आप एक एनएफएस फाइलसिस्टम को लिखते हैं, तो आप निश्चित रूप से syncसेट करना चाहते हैं।

  3. उस स्टैकओवरफ़्लो पोस्ट की एड़ी पर चलने के बाद, O_DIRECT के साथ फ़ाइल खोलना तभी काम करता है जब कर्नेल CONFIG_NFS_DIRECTIO के साथ संकलित किया गया था।

  4. यह भी सुनिश्चित करें कि आपकी httpd.conf फ़ाइल में निम्नलिखित सेटिंग्स हैं:

    • EnableMMAP off
    • EnableSendfile off

    अपाचे प्रदर्शन ट्यूनिंग प्रलेखन से:

    • यदि आप किसी NFS-माउंटेड फाइलसिस्टम पर स्थित फ़ाइल को मेमोरी-मैप करते हैं और किसी अन्य NFS क्लाइंट मशीन पर एक प्रक्रिया फ़ाइल को हटाती या काटती है, तो अगली बार मैप की गई फ़ाइल सामग्री तक पहुँचने का प्रयास करने पर आपकी प्रक्रिया को बस त्रुटि मिल सकती है।
    • EnableSendfile को बंद करना विशेष रूप से NFS के सिंक / async व्यवहार के साथ मदद नहीं करेगा, लेकिन यदि आप NFS के साथ अपाचे का उपयोग कर रहे हैं तो इसे बंद करने की आवश्यकता है।

धन्यवाद! ये बड़े सुझाव हैं। मैं ctoक्लाइंट पर उपयोग नहीं कर रहा हूं और मैं यह कोशिश करूंगा। मैं या तो नहीं है syncऔर न ही asyncसर्वर पर; मैंने अभी जोड़ा syncO_DIRECTमेरी मदद नहीं की क्योंकि यह वास्तव में PHP है जो इन फ़ाइलों को पढ़ रहा है और यह O_DIRECTकिसी भी तरह से मुझे नहीं मिल सकता है।
जोश

@ जोश, क्या इससे आपकी समस्या हल हो गई? हम एक ही मुद्दे पर अवरुद्ध हैं! क्या आप इस पोस्ट को अपडेट कर सकते हैं?
rafa.ferreira

3

किसी दिए गए प्रक्रिया के भीतर, किसी फ़ाइल की मूल निर्देशिका पर ओपेंडिर और बंद को कॉल करना एनएफएस कैश को अमान्य करता है। मैंने एक नौकरी अनुसूचक की प्रोग्रामिंग करते समय इसका उपयोग किया था। बहुत, बहुत मददगार। कोशिश करो!


-1

यदि आप दी गई फ़ाइल को गैर-कैश्ड प्रोग्राम (जैसे vim या emacs) में खोलते हैं और फिर बंद करते हैं, तो यह उस फ़ाइल के लिए कैश को अपडेट / क्लियर कर देगा


2
"गैर-कैश्ड प्रोग्राम" की आपकी परिभाषा क्या है, और क्या आपके पास उस कथन का संदर्भ है?
राल्फफ्राइडल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.