V souvislosti s touto otázkou na StackOverflow mě zajímá, jestli existuje způsob, jak vyprázdnit mezipaměť NFS / přinutit Linux, aby viděl nejaktuálnější kopii souboru, který je na sdílené složce NFS.
Mám situaci, kdy čtyři servery Apache připojují stejný adresář přes NFS, a když jeden server provede změnu souboru, trvá to asi 5 – 10 sekund, než ostatní servery tuto změnu uvidí. Pokud je v tomto okně provedena druhá změna tohoto souboru, může dojít k přepsání první změny.
fstab
položka pro souborový systém je:
172.16.1.15:/home /media/home nfs vers=3,defaults,noauto,sync,acregmin=1 0 0
Existuje příkaz, který přinutí Linux vyprázdnit mezipaměť jednoho souboru na sdílené složce NFS?
Přijatá odpověď:
Zkontrolujte tyto položky a zjistěte, zda vám některá vyhovuje:
-
U klienta , pokud ještě nepoužíváte
cto
možnost v možnostech sloupec/etc/fstab
řádek pro váš souborový systém NFS, přidejte jej.cto
říká klientovi nfs, aby otevíral soubory pomocí close-to-open, což mu umožňuje obnovit soubor, kdykoli jej otevřou. -
Na serveru , ujistěte se, že váš souborový systém je exportován pomocí
sync
možnost, nikoliasync
. Při synchronních zápisech se klient při zavření souboru vyprázdní na disk. (nebo s nfs V3, kdykoli se provede commit() ). Tímto způsobem může dojít ke snížení výkonu, ale pokud provádíte zápisy do souborového systému NFS, určitě chcetesync
set. -
V návaznosti na tento příspěvek stackoverflow funguje otevření souboru pomocí O_DIRECT pouze v případě, že jádro bylo zkompilováno pomocí CONFIG_NFS_DIRECTIO.
-
Také se ujistěte, že máte v souboru httpd.conf následující nastavení:
EnableMMAP off
EnableSendfile off
Z dokumentace ladění výkonu Apache:
- Pokud namapujete soubor umístěný na souborovém systému připojeném k NFS a proces na jiném klientském počítači NFS soubor odstraní nebo zkrátí, může váš proces při příštím pokusu o přístup k obsahu mapovaného souboru získat chybu sběrnice.
- Vypnutí EnableSendfile konkrétně nepomůže se synchronizačním/asynchronním chováním NFS, ale pokud používáte apache s NFS, je potřeba jej vypnout.