Linux가 NFS 공유에서 하나의 파일 캐시를 플러시하도록하는 명령이 있습니까?


14

StackOverflow 에서이 질문과 관련 하여 NFS 캐시에 플러시하고 Linux가 NFS 공유에있는 파일의 최신 사본을 볼 수 있도록하는 방법이 있는지 궁금합니다.

4 대의 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. 클라이언트 에서 NFS 파일 시스템 행 cto옵션 열에 있는 옵션을 아직 사용하지 않는 경우 /etc/fstab추가하십시오. ctonfs 클라이언트가 파일을 열 때마다 파일을 열도록 파일을 열도록 지시합니다.

  2. 서버 에서 파일 시스템이 sync아닌 옵션으로 내보내 집니다 async. 동기 쓰기를 사용하면 파일이 닫힐 때 클라이언트가 디스크로 플러시됩니다. ( 또는 commit ()이 이루어질 때마다 nfs V3 사용 ) 그런 식으로 성능이 저하 될 수 있지만 NFS 파일 시스템에 쓰는 경우 분명히 sync설정해야합니다.

  3. 해당 스택 오버 플로우 게시물의 뒤를 쫓아 O_DIRECT로 파일을 열면 커널이 CONFIG_NFS_DIRECTIO로 컴파일 된 경우에만 작동합니다.

  4. 또한 httpd.conf 파일에 다음 설정이 있는지 확인하십시오.

    • EnableMMAP off
    • EnableSendfile off

    Apache 성능 조정 문서에서 :

    • NFS 마운트 파일 시스템에있는 파일을 메모리 맵핑하고 다른 NFS 클라이언트 시스템의 프로세스가 파일을 삭제하거나 자르면 다음에 맵핑 된 파일 컨텐츠에 액세스하려고 할 때 프로세스에서 버스 오류가 발생할 수 있습니다.
    • EnableSendfile을 끄면 NFS의 동기화 / 비동기 동작에 도움이되지 않지만 NFS와 함께 아파치를 사용하는 경우 해제해야합니다.

감사! 이것들은 좋은 제안입니다. 나는 cto클라이언트에서 사용하지 않고 있으며 시도 할 것입니다. 서버 sync도없고 async서버 도 없습니다 . 방금 추가했습니다 sync. O_DIRECT실제로 이러한 파일을 읽는 PHP이므로 O_DIRECT내가 찾을 수있는 방법으로 열 수 없습니다 .
Josh

@ 조쉬, 문제가 해결 되었습니까? 우리는 같은 문제로 막혔습니다! 이 게시물을 업데이트 해 주시겠습니까?
rafa.ferreira

3

주어진 프로세스 내에서 파일의 상위 디렉토리에서 opendir 및 closedir를 호출하면 NFS 캐시가 무효화됩니다. 작업 스케줄러를 프로그래밍하는 동안 이것을 사용했습니다. 매우 도움이되었습니다. 시도 해봐!


-1

캐시되지 않은 프로그램 (vim 또는 emacs 등)에서 지정된 파일을 연 다음 닫으면 해당 파일의 캐시가 업데이트 / 삭제됩니다.


2
"캐시되지 않은 프로그램"에 대한 정의는 무엇이며 해당 명령문에 대한 참조가 있습니까?
RalfFriedl
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.