มีคำสั่งที่จะบังคับให้ Linux ล้างแคชไฟล์หนึ่งไฟล์ในการแบ่งปัน NFS หรือไม่?


14

ที่เกี่ยวข้องกับคำถามนี้ใน StackOverflowฉันสงสัยว่ามีวิธีที่ฉันจะล้างแคช NFS / บังคับ Linux เพื่อดูสำเนาล่าสุดของไฟล์ที่อยู่ใน NFS แบ่งปัน

ฉันมีสถานการณ์ที่เซิร์ฟเวอร์ Apache สี่ตัวเมานต์ไดเร็กทอรีเดียวกันผ่าน NFS และเมื่อเซิร์ฟเวอร์หนึ่งทำการเปลี่ยนแปลงไฟล์มันใช้เวลาประมาณ 5 - 10 วินาทีเพื่อให้เซิร์ฟเวอร์อื่น ๆ เห็นการเปลี่ยนแปลงนั้น หากมีการเปลี่ยนแปลงครั้งที่สองในไฟล์นั้นภายในหน้าต่างนี้มันอาจจะเขียนทับการเปลี่ยนแปลงครั้งแรก

fstabรายการสำหรับระบบแฟ้มคือ:

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

มีคำสั่งที่จะบังคับให้ Linux ล้างแคชไฟล์หนึ่งไฟล์ในการแบ่งปัน NFS หรือไม่?


กลไกการแคชอะแพชอะไรที่คุณใช้?
usermane

@usermane: ฉันไม่ได้ใช้กลไกการแคช Apache ไฟล์ที่เป็นปัญหาคือไฟล์ PHP และเมื่อมีการแก้ไขในโฮสต์หนึ่งโฮสต์อื่นจะไม่เห็นการเปลี่ยนแปลงนั้นในสองสามวินาที
Josh

คำตอบ:


12

ตรวจสอบรายการเหล่านี้และดูว่ามีอะไรที่เหมาะกับคุณหรือไม่:

  1. บนไคลเอ็นต์หากคุณยังไม่ได้ใช้ctoตัวเลือกในคอลัมน์ตัวเลือกของ/etc/fstabบรรทัดสำหรับระบบไฟล์ NFS ของคุณให้เพิ่มเข้าไป ctoบอกให้ไคลเอ็นต์ nfs เปิดไฟล์ผ่านทาง close-to-open ซึ่งทำให้พวกเขารีเฟรชไฟล์ทุกครั้งที่เปิดขึ้นมา

  2. บนเซิร์ฟเวอร์ให้แน่ใจว่าระบบแฟ้มของคุณจะถูกส่งออกที่มีตัวเลือกและไม่sync asyncด้วยการเขียนแบบซิงโครนัสไคลเอนต์จะฟลัชไปยังดิสก์เมื่อไฟล์ถูกปิด ( หรือกับ nfs V3 ทุกครั้งที่มีการส่งมอบ ) อาจมีผลการดำเนินงานเป็นอย่างนั้น แต่ถ้าคุณกำลังเขียนไปยังระบบไฟล์ NFS คุณต้องsyncตั้งค่าอย่างแน่นอน

  3. การติดตามไฟล์ด้วย O_DIRECT จะทำงานเฉพาะในกรณีที่เคอร์เนลถูกคอมไพล์ด้วย CONFIG_NFS_DIRECTIO

  4. ตรวจสอบให้แน่ใจว่าคุณมีการตั้งค่าต่อไปนี้ในไฟล์ httpd.conf ของคุณ:

    • EnableMMAP off
    • EnableSendfile off

    จากเอกสารการปรับประสิทธิภาพ apache:

    • หากหน่วยความจำของคุณแมปไฟล์ที่อยู่ในระบบไฟล์ที่ติดตั้ง NFS และกระบวนการในเครื่องไคลเอนต์ NFS อื่นลบหรือตัดทอนไฟล์กระบวนการของคุณอาจได้รับข้อผิดพลาดรถบัสในครั้งต่อไปที่พยายามเข้าถึงเนื้อหาไฟล์ที่แม็พ
    • การปิดใช้งาน EnableSendfile จะไม่ช่วยโดยเฉพาะอย่างยิ่งกับพฤติกรรมการซิงค์ / async ของ NFS แต่จะต้องปิดหากคุณใช้ apache กับ NFS

ขอบคุณ! นี่เป็นคำแนะนำที่ยอดเยี่ยม ฉันไม่ได้ใช้ctoกับลูกค้าและฉันจะลองทำดู ฉันไม่มีsyncหรือasyncบนเซิร์ฟเวอร์; syncฉันเพิ่งเพิ่ม O_DIRECTไม่ได้ช่วยฉันเพราะมันคือ PHP จริงๆที่อ่านไฟล์เหล่านี้และมันไม่สามารถเปิดด้วยO_DIRECTวิธีใด ๆ ที่ฉันสามารถหาได้
Josh

@Josh มันช่วยแก้ปัญหาของคุณได้ไหม? เราถูกบล็อกในปัญหาเดียวกัน! คุณช่วยอัพเดทโพสต์นี้ได้ไหม
rafa.ferreira

3

ภายในกระบวนการที่กำหนดการเรียกใช้ opendir และ closedir บนไดเร็กทอรีพาเรนต์ของไฟล์จะทำให้แคช NFS ใช้ไม่ได้ ฉันใช้สิ่งนี้ในขณะที่เขียนโปรแกรมกำหนดการงาน มีประโยชน์มาก ๆ ลองมัน!


-1

หากคุณเปิดไฟล์ที่กำหนดในโปรแกรมที่ไม่ใช่แคช (เช่น vim หรือ emacs) จากนั้นปิดไฟล์นั้นจะทำการอัพเดต / ล้างแคชสำหรับไฟล์นั้น


2
คำจำกัดความของคุณของ "โปรแกรมที่ไม่ใช่แคช" คืออะไรและคุณมีการอ้างอิงสำหรับคำสั่งนั้นหรือไม่?
RalfFriedl
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.