NFS 캐시 : 서버에서 수정할 때 클라이언트에서 파일 내용이 업데이트되지 않음


11

설정은 다음과 같습니다. 하나의 NFS 서버 시스템 (v4), 여러 NFS 클라이언트 시스템.

클라이언트 시스템이 NFS 마운트에 파일을 쓰면 다른 클라이언트는 새로운 컨텐츠를 즉시 볼 수 있습니다. 문제 없습니다.

그러나 서버 시스템이 파일의 내용을 수정하면 클라이언트 ls에서 디렉토리를 수행 할 때 까지이 새로운 내용이 클라이언트에 표시되지 않습니다 .

나는이 불일치에 완전히 빠져 있습니다 ... 어떤 도움이라도 크게 감사하겠습니다!

정보 :

  • 클라이언트와 서버 모두에서 nfs 1.2.3-r1
  • acregmin, acregmax, acdirmin, acdirmax, lookupcache : 기본값

1
더 많은 정보를 얻기 위해 약간의 실험을 할 수 있습니까? : ls -i서버에서 파일을 편집하기 전에 클라이언트에서 수행 한 후 다시 수행하십시오. 숫자가 바뀌는 지 확인하십시오. 서버가 파일을 바꾸고 있기 때문에 파일을 교체하면 클라이언트는 디렉토리를 다시 스캔 할 때까지이를 알지 못합니다. 그렇다면 마운트 옵션을 설정 lookupcache=none하고 동작이 변경되는지 확인하십시오.
Patrick

2
지연 돼서 죄송합니다. 아이 노드는 효과적으로 변한다. lookupcache 옵션을 추가했는데 작동하는 것 같습니다. 내일 다시 확인하겠습니다.
numberxiii

답변:


11

귀하의 의견에 따라 답변으로 추가하십시오.
해결책은 lookupcache=nonenfs 마운트 옵션 에 추가 하는 것입니다.

클라이언트가 파일을 처음 읽을 때 NFS 조회를 수행하여 NFS 파일 ID를 가져옵니다. 그런 다음 NFS 파일 ID를 캐시하고 파일을 다시 열면 캐시를 사용합니다. 일반적으로 파일이 업데이트 될 때 파일 ID가 동일하게 유지되는 것처럼 문제가되지 않습니다. 그러나 어떤 이유로 이전 파일이 제거되고 새 파일이 만들어 지거나 이름이 바뀌거나 같은 파일이 아닌 다른 파일이 만들어집니다.
이제 일반적으로 클라이언트가 존재하지 않는 파일 ID를 열려고 할 때 서버에서 오류가 발생하고 새 파일 ID를 얻기 위해 다른 조회를 수행하는 것처럼 문제가 아닙니다. 그러나 어떤 이유로 NFS 서버는 클라이언트가 이전 파일 ID를 열도록 허용합니다. 다른 클라이언트가 파일을 열어 놓았으므로 아직 삭제되지 않았을 것입니다.

어쨌든 그것을 해결하는 방법은 클라이언트에게 nfs mount 옵션을 사용하여 파일을 열기 전에 항상 nfslookup을 수행하도록 지시하는 것 lookupcache=none입니다. 이것의 단점은 NFS 서버에 더 많은 트래픽을 추가하기 때문에 파일을 자주 열면 비용이 많이들 수 있다는 것입니다.


설명해 주셔서 감사합니다. NFS 서버에서 내 보낸 디렉토리의 스택은 DRBD / LVM / ext4입니다. "버그"의 원인 일 수 있습니다. 여러 고객에게는 문제가 있지만 다른 고객에게는 문제가 없습니다 ... 모든 테스트를 다시 실행 하고이 옵션이 모두 잘 작동하는지 알려 드리겠습니다.
numberxiii

0

마운트 옵션을로 변경하십시오 hard,intr. 시스템에서 기본값이 부드럽다 고 생각합니다. 도움이 될 것입니다.


불행히도 이러한 마운트 옵션을 추가해도 아무런 변화가 없었습니다. (
numberxiii

첫 번째 테스트를 위해 다시 마운트합니다. 그런 다음 깨끗한 마운트로 다른 클라이언트에서 테스트를 수행했습니다. 문제가 해결 된 것 같습니다 : 우리는 30 대가 새로운 콘텐츠를 볼 때까지 기다립니다
numberxiii

확인하기 위해 새 클라이언트 (vm)를 작성했습니다. 내용에 문제가 없습니다!
numberxiii

1
@ johnshen64 왜 문제가 해결 될 것이라고 생각하십니까? 하드 / 소프트는 연결 중단과 관련해서 만 중요하며 캐싱과 관련이 없습니다.
Patrick

0

다음을 사용하여 NFS 캐시를 수동으로 새로 고칠 수도 있습니다.

sudo mount /nfs-mount -o remount

... 성능을 저하시키는 마운트 옵션을 추가하지 않으려는 경우.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.