반응형

https://spody.tistory.com/216

직전에 작성한 글로부터 이어집니다.

NFS(Network File System)를 곁들인 저장소

쉘 스크립트나 Python을 통해 flush를 직접 유도했음에도 불구하고, 운영 환경에서는 여전히 깨진 파일이 다운로드되었음. 이를 확인한 결과, 해당 파일이 저장된 위치는 NFS 마운트 스토리지였다.

NFS 환경 특성

  • NFS export 옵션 중 sync, async가 있음
  • 옵션이 명시되지 않으면 기본값은 async → flush 지연

NFS export 옵션 설명

  • sync:
    • 클라이언트의 write() 요청마다 NFS 서버가 디스크에 즉시 flush한 후 OK 응답 반환
    • 안정성 높음, 성능 낮음
  • async (기본값):
    • write() → 클라이언트 커널 캐시에 저장 → 일정 시간 후 NFS 서버에 전송
    • 서버에서도 메모리에 저장 후 나중에 flush (2단계 지연)
    • fsync() 호출 → 클라이언트는 COMMIT 요청을 보내지만, 서버 flush 시점은 커널이 결정
    • 이로 인해 flush 전에 장애 발생 시 데이터 손실 가능성 있음

NFS 환경에서 flush 요약

  • 백엔드 서버는 NFS 마운트 스토리지에 파일을 저장하고 있음
  • NFS의 async 설정 때문에 flush 요청이 디스크에 즉시 반영되지 않음
  • flush()나 fsync(), mv 등을 해도 NFS 서버의 커널 스케줄러가 flush 시점을 결정하기 때문에 클라이언트 입장에서 flush가 즉시 완료되었는지는 보장되지 않음

최종 해결 방안

  • NFS export 옵션을 sync로 바꾸는 건 성능 리스크가 커서 적용 어려움
  • 엑셀 파일은 사용자가 다운로드 받기만 하면 되므로, 3초 대기 정도는 큰 무리가 없음
  • 따라서 엑셀 path를 반환하기 전 sleep 3을 넣는 것이 현재 환경에선 가장 현실적인 대응
반응형

'LTF(learn through failure)' 카테고리의 다른 글

파일 flush 문제 해결 전략  (1) 2025.04.13
파일 flush 문제 공유  (0) 2025.04.05

+ Recent posts